Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование4172 / Лекции / Лекция 4.Циклы и ветвления

.doc
Скачиваний:
50
Добавлен:
12.03.2015
Размер:
71.17 Кб
Скачать

Лекция 4. Операторы цикла for и do while.

Программирование ветвлений

Оператор цикла for

Оператор цикла for удобно использовать, если заранее известно (или может быть вычислено) количество повторений цикла.

Пример оператора for:

/* вычисление суммы n вещественных чисел */

for (s=0, i = 1; i<=n; i++)

{ scanf(“%f”, &x);

s = s + x ;

}

Здесь цикл выполняется n раз.

Этот фрагмент можно записать и с помощью оператора цикла while:

/* вычисление суммы n вещественных чисел */

s = 0; i = 1;

while (i <= n)

{ scanf(“%f”, &x);

s = s + x ;

i++;

}

Оператор цикла for имеет вид

for ( [выражение1] ; [выражение2] ; [выражение3] )

оператор s;

Выражение1 и выражение3 могут содержать запятые.

Схема работы оператора цикла for представлена на рис.4.1.

Рис. 4.1. Схема работы оператора цикла for

Эквивалентный оператор while имеет вид:

выражение1;

while ( выражение2 )

{ оператор s;

выражение3;

}

Любое из выражений в операторе for может отсутствовать, например может отсутствовать выражение1, если не требуются подготовительные действия. В частном случае могут отсутствовать все выражения, тогда получим условие бесконечного цикла. Прервать цикл можно оператором break, например, при обнаружении некоторого условия:

for ( ; ; )

{ …

break;

….

}

Оператор завершения break иногда полезен для “аварийного” выхода из цикла, часто позволяет избежать сложных проверок, но затрудняет понимание программы.

Оператор цикла do while

Оператор цикла с постусловием имеет вид

do

оператор s

while (выражение - условие);

Оператор s повторяется ≥ 1 раза, пока истинно условие цикла (обязательно хотя бы один раз).

Схема работы оператора do while представлена на рис. 4.2.

Рис. 4.2. Цикл с постусловием

Пример оператора do while:

/* вычисление суммы n вещественных чисел */

s = 0; i = 1;

do

{ scanf(“%f”, &x);

s = s + x ;

i++;

}

while (i <= n) ;

Ветвления

Ветвление алгоритмов и программ в языке C записывается с помощью условного оператора if. Условный оператор if имеет вид:

if (условие) оператор s1

[else оператор s2]

В случае отсутствия конструкции else получим сокращенный условный оператор:

if (условие) оператор s

Схема работы оператора if (полного и сокращенного) представлена на рис.4.3. .

Рис. 4.3. Структуры ветвления

Условие ветвления алгоритма и программы – выражение языка С (как в циклах). Значение выражения служит условием выбора той или иной ветви программы или алгоритма. Если значение выражения ≠ 0, то условие истинно и выполняется оператор s1, иначе – оператор s2. Одна из ветвей может отсутствовать, тогда при нулевом значении выражения оператор s пропускается (сокращенный условный оператор). Операторы s, s1, s2 могут быть простыми или составными.

Примеры оператора if:

1. if (s >= ‘0’ && s <= ‘9’) printf (“Символ - цифра”);

2. if (x < 0) s1 += x;

else s2 += x;

3. Вычислить значение величины y при следующих условиях:

a*x2 + b2*x, если a < 0,

y = x – a*b, если 0 ≤ a < 1,

1 + x, если a ≥ 1.

/* Фрагмент программы для вычисления величины y */

float a, b, x, y;

scanf (“%f%f%f”, &a, &b, &x);

if ( a < 0 ) y = a *x *x + b *b *x;

else if ( a < 1 ) y = x - a * b;

else y = 1 + x;

4. if (x < 0) { s1 += x; k1++; }

else if (x > 0) s2 += x, k2++;

else k3++;

5. if (i % 2)

if (a > max) max = a;

else ; /* пустой оператор */

else if (a < min) min = a;

Если не написать else ; (с пустым оператором), то компилятор отнесет строку else if (a < min) min = a; ко второму оператору if, а не к первому, что приведет к неверным результатам. Этот фрагмент можно записать иначе:

. if (i % 2)

{ if (a > max) max = a; }

else if (a < min) min = a;

Контрольные вопросы и упражнения.

1. Какие операторы можно использовать в языке С для организации циклов?

2. Какое значение примет величина s после выполнения следующего фрагмента

int j, n = 5, s = 0;

. . .

for (j = 0; j < n; j++)

s = s + (j + 1)*2;

3. Какие числа будут получены при выполнении следующего фрагмента программы?

int j;

. . .

for(j = 20; j > 10; j--)

printf (“%d ”, j%3);

Какое значение примет величина j после выполнения фрагмента?

4. Что означает следующая запись: for ( ; ; );

5. Запишите условный оператор для вычисления y = 1/x (исключите деление на 0).

6. Запишите следующий фрагмент программы без помощи оператора for. Дополните определением типов переменных. Нарисуйте схему.

for (r = -1, n = 500; n > 0; n--)

{ scanf("%f",&z);

if (z < r) r = z;

}

7. Напишите программу, которая вводит три числа, находит и выводит наименьшее из заданных чисел.

41