3.1. Операторы циклов

В языке Си существует 3 вида циклов: 1) цикл с параметром или цикл типа for; 2) цикл с предусловием или цикл типа while, 3) цикл с постусловием или цикл типа do ... while . Во всех этих циклах условие продолжения цикла заключается в круглые скобки. В циклах типов for и while повторяющаяся часть состоит из одного оператора; если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор. В цикле с постусловием тело цикла помещается между словами do и while. В отличие от цикла с предусловием, цикл с постусловием выполнится хотя бы один раз. Циклы с пред- и постусловием продолжаются, если условие продолжения истинно.

 

3.2. Цикл с параметром

Для цикла типа 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.

 

3.3. Циклы с неизвестным количеством повторений

Изменим условие в предыдущем примере: Определить число 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.


3.4. Контрольные вопросы

1. Какой алгоритм является алгоритмом циклической структуры?

2. Типы циклов в языке Си.

3. Какой цикл выполнится хотя бы один раз? А какой - ни разу?

4. Когда тело цикла заключается в фигурные скобки?

5. Поясните алгоритм работы цикла for.

6. При каком условии заканчивается цикл while? do..while?