вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


1.7. Циклы while и do…while

1.7.1 Цикл с предусловием while. Пример возведения в степень в цикле (пример 8)

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

В качестве примера цикла while рассмотрим программу, вычисляющие степени двойки, не превышающие 100:

/////////////////////////////////////////////////////////////////////////////
// Прикладное программирование
// Пример 8. Пример работы оператора while - возведение в степень
// 
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
// подключение библиотеки ввода-вывода
#include <iostream>
// подключение стандартного пространства имен для использования библиотек
using namespace std;
 
/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы 
void main()
{
    // описание переменных
    int product = 2; 

    // оператор цикла с предусловием
    while(product <= 100)
    {
        product = product * 2; 
        cout<<"product="<<product<<endl;
    }
}
/////////////////////////////////////////////////////////////////////////////

Когда оператор while начинает выполняться, значение переменной product равно 2. Каждое повторение цикла умножает product на 2, так что переменная принимает последовательные значения 4, 8, 16, 32, 64, 128. Когда product становится равной 128, условие оператора while (product <= 100) оказывается ложным. Это завершает повторение, так что окончательным значением product будет 128. Программа продолжает работу со следующего оператора после while.

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

1.7.2 Цикл с постусловием do...while

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

Когда do...while завершается, выполнение программы продолжается с оператора, следующего за предложением while.

Предыдущий пример можно записать с использованием цикла do...while.

/////////////////////////////////////////////////////////////////////////////
// функция main начинает исполнение программы 
void main()
{
    // описание переменных
    int product = 2; 

    // оператор цикла с предусловием
    do
    {
        product = product * 2; 
        cout<<"product="<<product<<endl;
    }while(product <= 100);
}
/////////////////////////////////////////////////////////////////////////////

Результат выполнения этого пример будет точно такой же, как и предыдущего. Программа выведет на экран 4, 8, 16, 32, 64, 128. Чтобы увидеть разницу между циклом с предусловием и постусловием, изменим примеры следующим образом:

цикл с предусловием

цикл с постусловием

    // описание переменных
    int product = 128; 

    // оператор цикла с предусловием
    while(product <= 100)
    {
        product = product * 2; 
        cout<<"product="<<product<<endl;
    }
    cout<<"result product="<<product<<endl;
    // описание переменных
    int product = 128; 

    // оператор цикла с предусловием
    do
    {
        product = product * 2; 
        cout<<"product="<<product<<endl;
    }while(product <= 100);
    cout<<"result product="<<product<<endl;

результат:

 result product=128 

результат:

 256 
 result product=256 

В цикле с предусловием вначале происходит проверка условия, и поскольку 128>100, цикл ни разу не выполниться. В цикле с постусловием вначале произойдет выполнение одного шага цикла, и только потом произойдет проверка (256>100).

цикл с предусловием

цикл с постусловием

while( условие ) 
{
    блок операторов;
}
do 
{ 
   блок операторов;
}while( условие );