Циклические вычислительные процессы
При решении многих задач вычислительный процесс имеет циклический характер. Это означает, что часть операторов многократно выполняется при различных значениях переменных. Цикл - многократно повторяющаяся часть программы.
В языке С существует три вида операторов цикла:
- цикл с параметром for ;
- цикл с предварительным условием while;
- цикл с последующим условием do-while.
Каждый цикл характеризуется:
· начальным значением параметра цикла,
· конечным значением параметра цикла,
· шагом изменения параметра цикла
· основной блок цикла – тело цикла, в котором производятся требуемые вычисления с помощью операторов, расположенных внутри цикла и повторяющихся многократно.
Цикл, не содержащий внутри себя других циклов, называют простым; цикл может содержать внутри себя другие циклы, которые называются вложенными.
Цикл с параметром - for
Оператор цикла с параметром используется в тех случаях, когда заранее известно, сколько раз должна повториться циклическая часть программы.
for(выражение 1; выражение 2; выражение 3)
оператор;
for(выражение 1; выражение 2; выражение 3)
{
оператор 1;
оператор 2;
…
оператор n;
}
Обычно первое выражение служит для инициализации начального значения цикла, второе выражение служит для проверки окончательного значения цикла, а третье выражение - для изменения значения параметра цикла ( хотя каждое из трех выражений может быть использовано как угодно). Все три параметра позиционно зависимы, поэтому если какой-либо из параметров отсутствует, его позиция определяется точкой с запятой. Если for( ; ; ), то получается бесконечный цикл.
Работа цикла for:
Присвоение начального значения параметра цикла (выражение 1) Проверяется условие достижения окончательнального значения параметра цила(выражение 2) Если условие истинно:
· то выполняется тело цикла,
· затем изменяется значения параметра цикла (выражение 3)
Возвращаемся к пункту №2, и так до тех пор, пока условие не станет ложнымПримеры
1. Распечатать все числа от 1 до 100.
for(ch=1; ch<=100; ch++)
printf(“%d”, ch)
2. Распечатать числа от 100 до 1.
for(ch=100; ch>=1; ch--)
printf(“%d”, ch)
3. Распечатать все буквы от а до z.
for(sym=’a’; sym<’z’; sym++)
printf(“%c”, sym);
4. Распечатать числа от 100 до 2 c шагом -2.
for(ch=100; ch>=2; ch - = 2)
printf(“%d”, ch)
5. Найти сумму и произведение всех чисел от 3 до 50.
sum=0; p=1;
for(x=3; x<=50; x++)
{
sum + = x;
p * = x;
}
printf(“Сумма равна = %d произведение =%d”, sum, p)
Цикл с предварительным условием while
while ( условие ) while (условие )
оператор; {
оператор 1 ;
оператор 2 ;
. . .
оператор n ;
}
Если условие истинно, то выполняется оператор или группа операторов, если условие ложно, то выполнение оператора цикла заканчивается (т. е. будет выполняться оператор, следующий за оператором цикла.)
Цикл с предусловием. Перед операцией цикла осуществляется операция присвоения начальных значений параметру цикла. Затем происходит проверка условия. Переход к выполнению тела цикла осуществляется только в том случае, если условие выполняется, в противном случае происходит выход из цикла.
В частном случае может оказаться что тело цикла не выполниться ни разу.
Условие окончания цикла и шаг изменения параметра необходимо подобрать так, чтобы действия выполняемые в цикле привели к нарушению его истинности, иначе произойдет зацикливание. Зацикливание - бесконечное повторение выполняемых действий.
Цикл с полседующим условием do - while
do do
оператор; {
оператор_1;
while (условие) оператор_2;
. . .
оператор_n;
}
while (условие)
Цикл выполняется хотя бы один раз и только затем проверяется условие. Если условие истинно, то цикл выполняется еще один раз, пока условие не станет ложным.
Цикл с постусловием. Перед операцией цикла осуществляется операция присвоения начальных значений параметру цикла. Затем выполняется тело цикла. После этого происходит проверка условия. Если условие выполняется, то происходит возврат к выполнению действий. Если условие не выполняется, то осуществляется выход из цикла. Таким образом, тело цикла будет реализовано хотя бы один раз.


Пример №1. Что будет выведено на экран в результате выполнения следующего фрагмента.
int x = 5; while ( x>=6) { printf(“ %d ”,x); x - =3; } /* ни разу не выполнится */ | int x = 5; do { printf(“ %d ”,x); x - =3; } while ( x>=6) /* 5 */ |
int x=10; while ( x>=0) { x - =3; printf(“ %d ”,x); } /* 7 4 1 -2 */
| int x=10; do { x - =3; printf(“ %d ”,x); } while ( x>=0) /* 7 4 1 –2 */ |


