
Программирование4172 / Лекции / Лекция 4.Циклы и ветвления
.docЛекция 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. Напишите программу, которая вводит три числа, находит и выводит наименьшее из заданных чисел.