Если значение условия повторения истинно, то выполняются операторы, входящие в тело цикла, иначе – выход из цикла и переход к оператору, записанному в программе после оператора while. Значение операнда условие_повторения вычисляется при каждом переходе на начало цикла. Если значение условия повторения в операторе while окажется ложным уже при первой проверке, то операторы в теле цикла не выполнятся ни одного раза. Например:
// Суммирование первых десяти чисел натурального ряда
int i = 1, sum = 0;
while (i <= 10) { sum +=i; i++; } // можно записать и так: sum += i++;
Оператор цикла с постусловием имеет вид:
do { тело_цикла } while (условие_повторения);
Операторы, входящие в тело цикла, гарантированно выполнятся хотя бы один раз, так как условие повторения (выхода) проверяется в конце цикла. Операторы в составе цикла выполняются до тех пор, пока истинно значение условия повторения. При получении ложного значения операнда условие_повторения осуществляется выход из цикла и переход к следующему оператору программы. Разработчик должен позаботиться о том, чтобы после выполнения тела цикла while или do – while некоторое число раз произошел выход из цикла, т.е. условие_повторения стало ложным, иначе произойдет зацикливание.
// Сумма гармонического ряда 1 + 1/2 + 1/3 + …+ 1/n + …, пока (1 / n) > e
int n = 2;
double x, eps = 1e-8, sum = 1.0;
do { x = 1.0 / n; sum += x; n++;
} while (x > eps);
cout << "сумма " << n - 1 << “ членов гармонического ряда = “ << (sum – x);
Почему в операторе вывода указаны выражения n - 1 иsum – x?
Выражение условие_повторения может состоять из нескольких простых выражений, разделенных операторами логических операций. Например:
do { // суммирование ряда до тех пор, пока сумма < 5 и член ряда > eps
…
} while ((sum < 5) && (x > eps)); // выход, если sum >= 5 или 1 / n < eps.
Для организации цикла с заданным числом повторений (цикла с параметром) в С++ предназначается оператор цикла for, который имеет вид:
for (выражение_1; выражение_2; выражение_3) тело_цикла;
Параметр цикла for – целочисленная или вещественная переменная, которая изменяется монотонно (возрастает или убывает). Значение операнда выражение_1 инициализирует параметр (управляющую переменную) цикла, операнд выражение_2 задает условие повторения операторов в теле цикла, а операнд выражение_3 предназначается для изменения текущего значения параметра цикла.
// Суммирование первых десяти членов натурального ряда
for (int i = 1, sum = 0; i <= 10; i++) sum += i;
Компилятор реализует оператор цикла for по следующей схеме:
· значение операнда выражение_1 вычисляется только один раз до начала цикла. Оно инициализирует переменную, которая является параметром цикла. Так как инициализация параметра цикла выполняется до входа в тело цикла, то параметр цикла попадает в область видимости функции, которая содержит соответствующий оператор for. Благодаря этому в операнде выражение_1 параметр цикла может быть не только проинициализирован, но и предварительно описан (см. пример выше);
· шаг 1: выполнение цикла начинается с вычисления значения операнда выражение_2. Если его значение равно нулю (false), то осуществляется выход из цикла и переход к следующему оператору программы. Если значение условия повторения отлично от нуля (true), то переход к следующему шагу;
· шаг 2: выполняются операторы, входящие в тело цикла;
· шаг 3: вычисляется значение операнда выражение_3, т.е. параметр цикла получает новое значение, и происходит безусловный переход к шагу 1.
Таким образом, оператор цикла for эквивалентен группе операторов:
выражение_1; // инициализация параметра цикла
while (выражение_2) { . . . // операторы тела цикла;
выражение_3;
}
при условии, что выражение_2 - непустое и в теле цикла нет оператора досрочного выхода из цикла.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.