Как и в других языках программирования, в С++ существуют специальные средства организации циклов, управляющие последовательностью выполнения повторений в зависимости от условий.
Наряду с циклами for и while, где проверка условия, влияющего на порядок выполнения повторений, предшествует итерациям, предусмотрена конструкция, в которой выражение-условие проверяется после очередного выполнения тела цикла. Семантика организации такого цикла, в котором тело цикла предшествует проверке выражения-условия, определила оператор цикла с постусловием.
Оператор цикла с постусловием do … while
Цикл с постусловием – цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз.
Оператор цикла do...while имеет следующий синтаксис:
do
тело_цикла;
while (выражение-условие)
выражение-условие – это выражение, определяющее условие, при котором тело цикла будет выполняться. В качестве выражения-условия чаще всего используется отношение или логическое выражение.
Схема выполнения оператора do...while следующая:
● выполняется тело_цикла;
● вычисляется выражение-условие;
● если значение выражения-условия равно нулю, то выполнение оператора do...while заканчивается и выполняется следующий по порядку оператор. Если значение выражения-условия не равно нулю, то выполнение оператора цикла do...while продолжается с пункта 1 (т.е. выполняется тело_цикла и все повторяется…).
В операторе do...while проверка условия происходит после выполнения операторов, образующих тело цикла. Оператор do...while удобно использовать в ситуациях, когда цикл должен выполниться хотя бы один раз.
Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.
При построении цикла do...while необходимо включить в тело цикла какие-либо конструкции, изменяющие величину проверяемого выражения-условия так, чтобы в конце концов оно стало равным нулю. В противном случае цикл будет бесконечным.
Например:
int i, s;
i=2;
do {
printf("Добрый день!"); }
while(i < 5); /*цикл будет выполняться бесконечно*/
int i, s;
i=2;
do {
printf("Добрый день!");
i=i+1; }
while(i < 5); /*цикл будет выполнен 3 раза*/
Пример 1: Вычисления квадратов чисел от 1 до 9.
#include <stdio.h>
void main() {
int i, b;
i=1;
do {
b=i*i;
printf("\n %2d в квадрате = %3d", i, b);
i++; }
while (i<10);
}
Пример 2: Программа для печати фрагмента таблицы ASCII (от 32-го символа до 126-го).