Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Цикл с предусловием (while)




 

Цикл с предусловием реализует структурную схему, приведенную на рисунке 6.6 а, и имеет вид:

while (выражение) оператор

Выражение определяет условие повторения тела цикла, представленного простым или составным оператором. Выполнение оператора начинается с вычисления выражения. Если оно истинно (не равно false), выполняется оператор цикла. Если при первой проверке выражение равно false, цикл не выполнится ни разу. Тип выражения должен быть арифметическим или приводимым к нему. Выражение вычисляется перед каждой итерацией цикла.

В круглых скобках после ключевого слова while можно вводить описание переменной. Областью ее действия является цикл:

while (int х = 0){... /* область действия х */ }

Пример (программа печатает таблицу значений функции у=х2+1 во введенном диапазоне):

#include <stdio.h>

int main(){

float Xn, Xk, Dx;

printf("Введите диапазон и шаг изменения аргумента: ");

scanf("%f%f%f", &Xn, &Xk, &Dx);

printf("| X | Y |\n"); // шапка таблицы

float X = Xn; // установка параметра цикла

while (X <= Xk){ // проверка условия продолжения

printf("| %5.2f | %5.2f |\n", X, X*X+1); // тело цикла

X += Dx; // модификация параметра

}

return 0;

}

Цикл с постусловием (do while)

 

Цикл с постусловием реализует структурную схему, приведенную на рисунке 6.5б, и имеет вид:

do оператор while выражение;

Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение. Если оно истинно (не равно false), тело цикла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления. Тип выражения должен быть арифметическим или приводимым к нему.

Пример (программа осуществляет проверку ввода):

#include <iostream.h>

int main(){

char answer;

do{

cout «"\nКупи слоника! ";

cin» answer; }

while (answer!= 'y');

return 0;

}

Пример. Программа вычисляет квадратный корень вещественного аргумента X с заданной точностью Eps по итерационной формуле:

,

где yn-1 - предыдущее приближение к корню (в начале вычислений выбирается произвольно); уn - последующее приближение. Процесс вычислений прекращается, когда приближения станут отличаться друг от друга по абсолютной величине менее чем на величину заданной точности.

#include <stdio.h>

#include <math.h>

int 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);

return 0;

}

Цикл с параметром (for)

 

Цикл с параметром имеет следующий формат:

for (инициализация; выражение; модификации) оператор;

Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»), например, так:

for (int i = 0, j = 2;...

int k, m;

for (k = 1, m = 0;...

Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла.

Выражение определяет условие выполнения цикла: если его результат, приведенный к типу bool, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).

Пример (оператор, вычисляющий сумму чисел от 1 до 100):

for (int i = 1, s = 0; i<=100; i++) s += i;

Пример (программа печатает таблицу значений функции у=х2+1 во введенном диапазоне):

#include <stdio.h>

int main(){

float Xn, Xk, Dx, X;

printf("Введите диапазон и шаг изменения аргумента: ");

scanf("%f%f%f", &Хn, &Xk, &Dx);

printf("| X | Y |\n");

for (X = Xn; Х<=Хk; X += Dx)

printf("| %5.2f | %5.2f |\n", X, X*X+1);

return 0;

}

Любой цикл while может быть приведен к эквивалентному ему циклу for и, наоборот, по следующей схеме:

for (b1;b2;b3) оператор b1; while (b2){ оператор; b3;}

Часто встречающиеся ошибки при программировании циклов - использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла.

Чтобы избежать ошибок, рекомендуется:

- проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения (а также возможно ли выполнение других операторов);

- проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;

- предусмотреть аварийный выход из цикла по достижению некоторого количества итераций;

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

Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае.

Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).

Оператором while удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла.

Оператор for предпочтительнее в большинстве остальных случаев.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...