Цикл с предусловием (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 и, наоборот, по следующей схеме:
Часто встречающиеся ошибки при программировании циклов - использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла. Чтобы избежать ошибок, рекомендуется: - проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения (а также возможно ли выполнение других операторов); - проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла; - предусмотреть аварийный выход из цикла по достижению некоторого количества итераций; - и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки. Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае. Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных). Оператором while удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла. Оператор for предпочтительнее в большинстве остальных случаев.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|