Цикл с предусловием реализует структурную схему, приведенную на рис.
и имеет вид:
while ( < выражение > ) < действие > ;
Выражение определяет условие повторения тела цикла, представленного простым или составным оператором. Выполнение оператора начинается с вычисления <выражения>, если оно истинно (не равно false), выполняется оператор цикла.
Если при первой проверке выражение равно false, цикл не выполнится ни разу. Тип выражения должен быть арифметическим или приводимым к нему. Выражение вычисляется перед каждой итерацией цикла.
Пример (программа печатает таблицу значений функции y=х2+1 во введенном
диапазоне):
#include <stdio.h>
int main()
{
float Xn, Xk, Dx;
printf("Введите диапазон и шаг изменения аргумента: " ):
scanf( “%f %f %f”, &Хп. &Хк. &Dx):
printf(''l X I Y |\n"): // шапка таблицы
float X = Xn: // установка параметра цикла
while (X <= Хк){ // проверка условия продолжения
printf(“%5.2f I %5.2f |\n", X, X*X + 1 ) : // тело цикла
X += Dx: // модификация параметра
}
return 0:
}
В круглых скобках после ключевого слова while можно вводить описание переменной. Областью ее действия является цикл:
while (int х = 0){ ... / * область действия х */ }
2) Цикл с постусловием ( do … while )
Цикл с постусловием реализует структурную схему, приведенную на рис.
и имеет описание:
do оператор while выражение:
Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение. Если оно истинно (не равно fаlse), тело цикла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления.
Тип выражения должен быть арифметическим или приводимым к нему.
Пример (программа осуществляет проверку ввода):
#include <1ostream.h>
1nt mdin(){
char answer;
do{
cout « "\пКупи слоника! ": c1n » answer;
}while (answer != 'y');
return 0;
}
Пример. Программа вычисляет квадратный корень вещественного аргумента X
с заданной точностью Eps по итерационной формуле:
где Уп_1 — предыдущее приближение к корню (в начале вычислений выбирается произвольно), Уп — последующее приближение. Процесс вычислений прекращается, когда приближения станут отличаться друг от друга по абсолютной величине менее, чем на величину заданной точности. Для вычисления абсолютной величины используется стандартная функция fabs(), объявление которой находится в заголовочном файле <math.h>.
#inc1ucle <stdio.h>
#include <math.h>
void main()
{
double X, Eps; // аргумент и точность
double Yp, Y = 1; // предыдущее и последующее приближение
printf("Введите аргумент и точность: " );
scanf(“%f %f”,&Х, &Eps);
do
{
Yp = Y;
Y = (Yp + X/Yp)/2;
}
while (fabs(Y - Yp) >= Eps);
printf("\nKopeнь из %f равен %f", X, Y);
}
Замечание.
2) При записи тела циклов проверить, всем ли переменным, встречающимся в правой части операторов присваивания, присвоены до этого начальные значения.
3) Проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;
4) Предусмотреть аварийный выход из цикла по достижению некоторого количества итераций.
5) Если тело цикла состоит более чем из одного оператора (действия), то эти операторы взять в операторные скобки (фигурные скобки).
Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае.
Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).
Оператором while удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла.
Оператор for предпочтительнее в большинстве остальных случаев (однозначно — для организации циклов со счетчиками).
Дата: 2019-02-02, просмотров: 369.