Цикл, управляемый инструкцией while

Вначале рассмотрим организацию цикла, управляемого этой инструкцией, а затем приведем ряд примеров.

В общем случае цикл, управляемый инструкцией while, может состоять из трех частей. К первой части цикла относятся элементы его инициализации. Вторую часть составляет сама инструкция while, а последнюю часть, часто называемую телом, – любая инструкция языка Си. Говорят, что инструкция whileуправляет работой тела цикла. В случае, когда в теле цикла должны находиться несколько инструкций, их следует объединить в составную инструкцию. Таким образом, в общем случае цикл, построенный на основе инструкции while, имеет следующий формат:

 

Инструкции_инициализации

while(выражение) /* Инструкция while */
инструкция /* Единственная инструкция */
продолжение_программы

Заключенное в круглые скобки выражение относится к категории полных выражений (оно не является подвыражением другого выражения). Поэтому к моменту начала выполнения тела цикла все побочные эффекты при его вычислении будут завершены.

Работу цикла удобно пояснить фрагментом схемы алгоритма, приведенным ниже.

 

 

Тело цикла выполняется пока остается истинным выражение, проверяемое в инструкции while. Легко убедиться в том, что цикл, управляемый инструкцией while, относится к категории циклов с предусловием.

Приведем пример применения цикла, управляемого инструкцией while.

Постановка задачи. Последовательность положительных чисел произвольной длины вводится с клавиатуры. Вычислить сумму вводимых чисел.

Решение. Для решения этой задачи требуется организация цикла, в теле которого следует выполнять два действия:

· Вводить очередное число x,

· Увеличивать текущее значение суммы summa на величину введенного числа.

Для прекращения циклического процесса можно воспользоваться тем обстоятельством, что по условию задачи вводимые числа должны быть положительными. Можно предложить пользователю для окончания процесса вычислений ввести любое отрицательное число.

Ниже приводится программа, реализующая требуемые вычисления. В программе использованы следующие локальные переменные: summa - искомая сумма, x – очередное введенное число. В комментариях к программе определены функциональные компоненты цикла.

 

//Файл summa2.c
#include<stdio.h>

int main(void)
{
double x, summa = 0;

 

// Инициализация цикла
printf(“Введите положительное число (для завершения “
“вычислений введите отрицательное число)”);
scanf(“%lf”, &x);


while(x > 0) //Инструкция while (Заголовок цикла)
{ // начало тела цикла
summa += x;
printf(“Введите положительное число(для завершения“
“вычислений введите отрицательное число)”);
scanf(“%lf”, &x);
} // Конец тела цикла

printf(“summa=%10.3g\n”, summa);
return 0;
}

31. Цикл, управляемый инструкцией do … while

В отличие от ранее рассмотренных двух циклических управляющих инструкций цикл, управляемый инструкцией do while, относится к категории циклов с постусловием. Это обусловлено тем обстоятельством, что проверяемое условие расположено после тела цикла. В связи с этим тело такого цикла должно выполниться хотя бы один раз. Такой цикл целесообразно использовать в тех случаях, когда критерий продолжения (окончания) работы цикла формируется в теле цикла.

Цикл, управляемый инструкцией do while, имеет следующий формат:

Инструкции_инициализации

do /* Начало инструкции while */
инструкция /* Единственная инструкция (тело цикла)*/
while(выражение); /* Конец инструкции while */
продолжение_программы

Работу цикла удобно пояснить схемой алгоритма, приведенной ниже.

 

Компонент инструкция, составляющая тело цикла (символ 2 схемы алгоритма), многократно выполняется в процессе работы цикла, пока логическая оценка компонента выражение (символ 3) дает значение, равное true.

 

Рассмотрим пример задачи, решение которой приводит к целесообразности применения цикла, управляемого инструкцией do while.