Оператор цикла while
Стандартный вид оператора while следующий:
while(условие) тело_цикла;
где оператор – это или пустой, или простой, или составной оператор. Условием может быть любое выражение, имеющее в качестве истины ненулевое значение. Цикл выполняется, пока условие истинно. Когда условие становится ложным, выполняется инструкция, следующая за циклом. Если условие при первой проверке ложно, тело_цикла не выполняется ни разу.
На схеме алгоритма оператор whileотображается следующим образом:
Следующий пример показывает процедуру, обрабатывающую ввод с клавиатуры, работающую, пока не будет введен символ А:
char ch;
while(ch != ‘A’) ch = getche();
Сначала ch устанавливается в 0. Цикл while начинается с проверки ch на равенство А. Поскольку ch инициализировано нулем, проверка выдаст истину и цикл начнется. При каждом нажатии клавиши на клавиатуре условие проверяется повторно. Если введено А, условие становится ложным и цикл прекращается.
Как и цикл for, цикл while сначала выполняет проверку, то есть тело цикла может вообще не выполняться
В теле цикла может и не быть никаких операторов. Например:
while((ch = getchar()) != ‘A’);
просто зацикливается до тех пор, пока с клавиатуры не введется символ А.
Пример: Написать программу вычисления значения функции cos x (гиперболический косинус) с помощью бесконечного ряда Тейлора с точностью ε по формуле:
Для достижения заданной точности необходимо суммировать члены ряда до тех пор, пока очередной член по модулю не будет меньшим ε.
Воспользуемся рекуррентной формулой для получения последующего члена ряда через предыдущий, т.е.
Сп+1=Сп*Т, где Т некоторый множитель.
Найдем его:
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void)
{ const int MaxIter=100; //допустимое число итераций
double x,eps;
double Cn=1,y=Cn;//первый член ряда и нач. значение суммы.
int n=0; // количество итераций.
bool usl=true;
printf("Введите аргумент и точность:");
scanf("%lf%lf",&x,&eps);
while(fabs(Cn)>eps)
{Cn*=-x*x/((2*n+1)*(2*n+2));//очередной член ряда
y+=Cn;//вычисление суммы
n++;
if(n>MaxIter)
{printf("Ряд расходится.");
usl=false;
break;
}
}
if(usl)
{printf("Значение функции: %.3lf, для x=%.3lf при n=%d итераций\n",y,x,n);
printf("(Для проверки cos x=%lf)",cos(x));}
getche();
return 0;
}
Дата добавления: 2017-01-13; просмотров: 607;