В языке Си существует 3 вида циклов: 1) цикл с параметром или цикл типа for; 2) цикл с предусловием или цикл типа while, 3) цикл с постусловием или цикл типа do ... while . Во всех этих циклах условие продолжения цикла заключается в круглые скобки. В циклах типов for и while повторяющаяся часть состоит из одного оператора; если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор. В цикле с постусловием тело цикла помещается между словами do и while. В отличие от цикла с предусловием, цикл с постусловием выполнится хотя бы один раз. Циклы с пред- и постусловием продолжаются, если условие продолжения истинно.
Для цикла типа for заголовок состоит из трех разделов: инициализации (присваивания начальных значений), проверки условия повторения, модификации (изменения параметров). Разделителем между разделами заголовка служит точка с запятой.
Пример вычисления суммы квадратов натурального ряда чисел от 1 до n.
S=
= 12
+ 2 2 + . . . + n 2.
// сумма квадратов натурального ряда чисел
#include <stdio.h>
main()
{ int S,n,i;
printf("\n Введите n "); scanf("%d",&n);
for (S=0, i=1; i<=n; i++)
S+=i*i; // соответствует S=S+i*i
printf ("n=%d S=%d",n,S);
}
В разделе инициализации присваиваются начальные значения переменным S и i. При i, не превышающем n, цикл повторяется, иначе выполняется выход из цикла. Оператор инкремента i++ (или декремента i--), эквивалентен i=i +1 (i=i-1). Для досрочного выхода из цикла и перехода на следующий оператор после цикла используется оператор break. Для пропуска всех операторов, оставшихся до конца тела цикла и перехода к следующему повторению цикла используется оператор continue.
Изменим условие в предыдущем примере: Определить число n, при котором сумма чисел S предыдущего ряда не превысит величину K, введенную с клавиатуры. Такую программу можно реализовать с помощью циклов предусловия или постусловия следующим образом:
// цикл while
#include <stdio.h>
#include <conio.h>
main()
{int K,S, i;
clrscr(); // очистка экрана перед выводом
printf ("Введите К ");
scanf ("%d", &K);
// цикл с предусловием
S=0;
i= 0;
while ( S<K)
{i++ ; S+=i*i };
printf ("n=%d S=%d \n", i, S);
getch();
}
// цикл do…while
#include <stdio.h>
#include <conio.h>
main()
{int K,S, i;
clrscr(); // очистка экрана перед выводом
printf ("Введите К ");
scanf ("%d", &K);
//цикл с постусловием
S=0;
i=0;
do
{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.
1. Какой алгоритм является алгоритмом циклической структуры?
2. Типы циклов в языке Си.
3. Какой цикл выполнится хотя бы один раз? А какой - ни разу?
4. Когда тело цикла заключается в фигурные скобки?
5. Поясните алгоритм работы цикла for.
6. При каком условии заканчивается цикл while? do..while?