Лекция 3. Ветвления. Условный оператор if. Циклы. Операторы цикла While и Do…While.
Ветвления
Ветвление алгоритмов и программ в языке C записывается с помощью условного оператора if.
Условный оператор if имеет вид:
if (выражение) оператор S1 [else оператор S2]
В случае отсутствия конструкции else получим сокращенный условный оператор:
if (выражение) оператор S
Условие ветвления алгоритма и программы – выражение языка С (как в циклах). Значение выражения служит условием выбора той или иной ветви программы или алгоритма. Если значение выражения ≠ 0, то условие истинно и выполняется оператор s1, иначе – оператор s2. Одна из ветвей может отсутствовать, тогда при нулевом значении выражения оператор s пропускается (сокращенный условный оператор).
Задача. Вычислить значение величины y при следующих условиях:
a*x2 + b2*x, если a < 0
y = x – a*b, если 0 ≤ a < 1
1 + x, если a ≥ 1
/* Фрагмент программы для вычисления величины y
#include
#include
main()
{int a, x, y;
scanf(“\%d\%d”,&a, &x);
if a<0 y=a*x*x+b*b*x;
else if a>=1 y=1+x;
else y=x-a*b;
printf (“y=\%d”, y);
getch();
return 0;
}
Цикл используется для многократного повторения одних и тех же действий над данными. Циклы позволяют описывать длинные последовательности операций в виде коротких алгоритмов.
Оператор цикла while
Оператор while – оператор цикла с предусловием имеет вид
while (выражение - Условие)
оператор S;
Сначала вычисляется выражение, значением которого должно быть целое число. Если значение выражение ≠ 0, условие цикла истинно, иначе - ложно. Оператор S повторяется ≥ 0 раз, пока истинно условие цикла (Усл). Если условие сразу ложно, то оператор не выполнится ни разу.
Повторяющаяся часть в схеме работы оператора называется телом цикла. Оператор s в теле цикла может быть простой или составной.
Составной оператор ограничивается фигурными скобками { }, состоит из одного или более операторов любого типа. Все операторы, кроме составного, завершаются ; (точкой с запятой).
Если в теле цикла должно быть более одного простого оператора, то эти операторы нужно объединить в составной оператор (рис.1.). |
|
Рис.1. Составной оператор { }
Условия в циклах и ветвлениях задаются в виде целочисленного выражения языка С в скобках. Условие истинно, если значение выражения ≠ 0, ложно в противном случае.
Примеры условий:
while ( a>0 ) истинно, если а>0
while ( a ) истинно, если а ≠ 0
while ( a!=0 ) истинно, если а ≠ 0
while ( !a ) истинно, если а = 0
while ( a+b ) истинно, если а+b ≠ 0
сложные условия
while ( a && b ) истинно, если а ≠ 0 и b ≠0
while (a > 0 || b >0) истинно, если a > 0 или b > 0 и т.п.
Задача. Составить программу табулирования функции
f(x)= 3+2x (шаг табулирования = 0.1).
/* Программа 2. Табулирование функции (в стиле С) */
#include
main ()
{ int n, i; /* количество строк, номер строки*/
float x; /* текущее значение х */
scanf (“\%f \%d”, &x, &n);
printf (" X F(X) ");
i=1;
while (i <= n)
{ printf(“ \%5.2f \%5.2f”, x, 3+2*x);
i =i + 1; x = x + 0.1;
}
return 0;
}
Тест. Вычислить 5 значений функции, начиная со значения х = 0.2 с шагом 0.1.
Вход: 0.2 5
Выход:
X F(X)
0.2 3.40
0.3 3.60
0.4 3.80
0.5 4.00
0.6 4.20
Пояснения к программе.
1. Вводится начальное значение величины х и количество строк.
2. Выводится заголовок таблицы значений.
3. while - оператор цикла c предусловием. Позволяет повторить действия в { } n раз, т.е. вычислить и вывести n строк со значением функции. Переменная i – счетчик текущей строки.
Оператор цикла do while
При количестве повторений n > 1 возможно использование цикла с постусловием.
Оператор цикла с постусловием имеет вид
do
оператор S
while (выражение - Условие);
Оператор S повторяется ≥ 1 раз, пока истинно условие цикла (обязательно хотя бы один раз).