Циклы с неизвестным количеством повторений
Циклы while или repeat используются тогда, когда количество повторений цикла заранее неизвестно и не может быть вычислено.
Цикл while состоит из заголовка и тела цикла.
В заголовке после слова while в круглых скобках записывается условие, при котором цикл продолжает выполняться. Когда это условие нарушается (становится ложно), цикл заканчивается.
В условии можно использовать знаки логических отношений и операций
> < больше, меньше
>= <= больше или равно, меньше или равно
== равно
!= не равно
Если условие неверно в самом начале, то цикл не выполняется ни разу (это цикл с предусловием). Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается; в таком случае говорят, что программа «зациклилась» — это серьезная логическая ошибка. В языке Си любое число, не равное нулю, обозначает истинное условие, а ноль - ложное
Условие
while ( 1 ){ ... } // бесконечный цикл
while ( 0 ){ ... } // цикл не выполнится ни разу
Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить. В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»). Для того, чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа.
Цикл do-while также используется тогда, когда количество повторений цикла заранее неизвестно и не может быть вычислено.
Цикл do-while состоит из заголовка do, тела цикла и завершающего условия.
Условие записывается в круглых скобках после слова while, цикл продолжает выполняться, пока условие верно; когда условие становится ложным, цикл заканчивается. Условие проверяется только в конце очередного шага цикла (это цикл с постусловием),
таким образом, цикл всегда выполняется хотя бы один раз. Если условие никогда не становится ложным (неверным), то цикл никогда не заканчивается, т.е. программа зацикливается. Тело цикла также заключается в фигурные скобки; если в теле цикла стоит всего один оператор,
скобки можно не ставить. В тело цикла могут входить любые другие операторы, в том числе и другие циклы.
Рассмотрим пример из предыдущей работы - вычисление суммы квадратов натурального ряда чисел от 1 до n.
S= = 12 + 2 2 + . . . + n 2.
Изменим условие в этом примере: Определить число n, при котором сумма чисел S предыдущего ряда не превысит величину K, введенную с клавиатуры. Такую программу можно реализовать с помощью циклов предусловия или постусловия следующим образом:
//lab3_2 циклы while и do…while
#include<stdio.h>
#include<conio.h>
main()
{int K,S, i;
clrscr(); // очистка экрана перед выводом
printf (“Введите К ”); scanf (“%d”, &K);
// цикл с предусловием //цикл с постусловием
S=0; S=0; i=0;
i= 0; do
while ( S<K) { i++ ; S+=i*i }; { i++; S+=i*i; }
while ( S<K) ;
printf (“n=%d S=%d\n”, i, S);
getch();
}
Отличие этих программ: если ввести К<1, то в программе с предусловием получим S=0, i=0 ; а в программе с постусловием S=1, i=1.
ВЫПОЛНЕНИЕ РАБОТЫ
Составить 3 варианта программ циклической структуры типа for и while, сравнить полученные результаты.
Варианты заданий
1. . 2. .
3. . 4. .
5. . 6. .
7. 8.
9. . 10. .
11. 12.
КОНТРОЛЬНЫЕ ВОПРОСЫ
4.1. Какой алгоритм является алгоритмом циклической структуры?
4.2. Типы циклов в языке Си.
4.3. Какой цикл выполнится хотя бы один раз? А какой - ни разу?
Лабораторная работа №4