Цикл повторяет свое выполнение, пока значение выражения отлично от нуля, т. е. заключенное в нем условие цикла истинно.
Рисунок 7– Алгоритм цикла с предусловием
В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного числа N!.
Пример 1.
//nрограмма вычисления факториала
#include <stdio.h>
#include <conio.h>
void main()
{ long int F;
int i,N;
printf(“N=”);
scanf(“%d”,&N);
F=i=1;
while(i<=N) { F=F*i; i++; }
printf(“\n %d \n%d”,N,F); getch(); }
Пример 2.Составить программу приближенного вычисления суммы бесконечного ряда S = 1 + x/1! + x2/2! + ...
Решение:
по условию задачи считается, что нужное приближение получено, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число e.
Введем обозначения: EPS – малое положительное число, например, 0.003; S – сумма; i – переменная, последовательно принимающая значения 0, 1, 2, ...; Y – значение xi/i!, которое вычисляется путем умножения предыдущего результата на x/i.
Начало
abs(y)³eps
i:=0, y:=1
вывод s
Конец
y:=y*x/i
да
нет
s:=s+y
i:=i+1
ввод x, eps
Рисунок 8 – Блок-схема алгоритма решения задачи из примера 2
Программа:
#include <stdio.h>
#include <conio.h>
void main()
{ int i=0; float x,y=1,eps,s=0;
printf (“Введите x, eps”);
scanf(“%f%f”,&x,&eps);
while (abs(y)>=eps) // начало цикла
{ s:=s+y;
i:=i+1;
y:=y*x/i;
} // конец цикла
printf("\n cумма s=%f”,s);
getch();
}
Результат выполнения программы:
Введите x, eps
2 0.003
Сумма S= 7.39
Пример 3. Найти натуральное число n, удовлетворяющее условию n3-n2=100, или вывести сообщение об отсутствии такого числа.
Решение:
при решении такого класса задач поиск начинается с наименьшего натурального числе, т. е. 1, и продолжается (с увеличением значения n на шаг 1) до тех пор, пока выражение в левой части меньше значения в правой части заданного условия. Выход из цикла может осуществиться в двух случаях: при равенстве левой и правой частей (что означает, что искомое число найдено) или, когда значение в левой части больше значения в правой части (что означает, что искомого числа не существует).
Программа:
#include <stdio.h>
#include <conio.h>
void main()
{ int n=1;
while (pow(n,3)-pow(n,2) < 100)
n=n+1;
if (pow(n,3)-pow(n,2) = =100) printf(“\n n=%d”,n);
else printf(“\n такого числа нет”);
getch();}
Интересно свойство следующего оператора:
while (1);
Это бесконечный пустой цикл. Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор.