1.4.1. Оператор while

Операторwhile организует итерационное (циклическое) выполнение фрагмента кода, пока его условие остается истинным. Используя оператор while, можно написать следующую программу, суммирующую числа от 1 до 10 включительно:

#include <iostream>

int main() {

 int sum = 0, val = 1;

 // продолжать выполнение цикла, пока значение val

 // не превысит 10

 while (val <= 10) {

  sum += val; // присвоить sum сумму val и sum

  ++val;      // добавить 1 к val

 }

 std::cout << "Sum of 1 to 10 inclusive is "

           << sum << std::endl;

 return 0;

}

Будучи откомпилированной и запущенной на выполнение, эта программа отобразит на экране следующий результат:

Sum of 1 to 10 inclusive is 55

Как и прежде, программа начинается с включения заголовка iostream и определения функции main(). В функции main() определены две переменные типа int — sum, которая будет содержать полученную сумму, и val, которая будет содержать каждое из значений от 1 до 10. Переменной sum присваивается исходное значение 0, а переменной val — исходное значение 1.

Новой частью программы является оператор while, имеющий следующий синтаксис.

while (условие)

 оператор

Оператор while циклически выполняет оператор, пока условие остается истинным. Условие — это выражение, результатом выполнения которого является истина или ложь. Пока условие истинно, оператор выполняется. После выполнения оператора условие проверяется снова. Если условие остается истинным, оператор выполняется снова. Цикл while продолжается, поочередно проверяя условие и выполняя оператор, пока условие не станет ложно.

В этой программе использован следующий оператор while:

// продолжать выполнение цикла, пока значение val

// не превысит 10

while (val <= 10) {

 sum += val; // присвоить sum сумму val и sum

 ++val;      // добавить 1 к val

}

Для сравнения текущего значения переменной val и числа 10 условие цикла использует оператор меньше или равно (оператор <=). Пока значение переменной val меньше или равно 10, условие истинно и тело цикла while выполняется. В данном случае телом цикла while является блок, содержащий два оператора.

{

 sum += val; // присвоить sum сумму val и sum

 ++val;      // добавить 1 к val

}

Блок (block) — это последовательность из любого количества операторов, заключенных в фигурные скобки. Блок является оператором и может использоваться везде, где допустим один оператор. Первым в блоке является составной оператор присвоения (compound assignment operator), или оператор присвоения с суммой (оператор +=). Этот оператор добавляет свой правый операнд к левому операнду. Это эквивалентно двум операторам: суммы и присвоения.

sum = sum + val; // присвоить sum сумму val и sum

Таким образом, первый оператор в блоке добавляет значение переменной val к текущему значению переменной sum и сохраняет результат в той же переменной sum.

Следующее выражение использует префиксный оператор инкремента (prefix increment operator) (оператор ++), который осуществляет приращение:

++val; // добавить 1 к val

Оператор инкремента добавляет единицу к своему операнду. Запись ++val эквивалентна выражению val = val + 1.

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

Как только значение переменной val станет больше 10, происходит выход из цикла while и управление переходит к оператору, следующему за ним. В данном случае это оператор, отображающий результат на экране, за которым следует оператор return, завершающий функцию main() и саму программу.

Упражнения раздела 1.4.1

Упражнение 1.9. Напишите программу, которая использует цикл while для суммирования чисел от 50 до 100.

Упражнение 1.10. Кроме оператора ++, который добавляет 1 к своему операнду, существует оператор декремента (--), который вычитает 1. Используйте оператор декремента, чтобы написать цикл while, выводящий на экран числа от десяти до нуля.

Упражнение 1.11. Напишите программу, которая запрашивает у пользователя два целых числа, а затем отображает каждое число в диапазоне, определенном этими двумя числами.