Как только значение переменной val
станет больше 10, происходит выход из цикла while
и управление переходит к оператору, следующему за ним. В данном случае это оператор, отображающий результат на экране, за которым следует оператор return
, завершающий функцию main()
и саму программу.
Упражнение 1.9. Напишите программу, которая использует цикл while
для суммирования чисел от 50 до 100.
Упражнение 1.10. Кроме оператора ++
, который добавляет 1 к своему операнду, существует оператор декремента (--
), который вычитает 1. Используйте оператор декремента, чтобы написать цикл while
, выводящий на экран числа от десяти до нуля.
Упражнение 1.11. Напишите программу, которая запрашивает у пользователя два целых числа, а затем отображает каждое число в диапазоне, определенном этими двумя числами.
1.4.2. Оператор for
В рассмотренном ранее цикле while
для управления количеством итераций использовалась переменная val
. Мы проверяли ее значение в условии, а затем в теле цикла while
увеличивали его.
Такая схема, подразумевающая использование переменной в условии и ее инкремент в теле столь популярна, что было разработано второе средство управления — for
, существенно сокращающий подобный код. Используя оператор for
, можно было бы переписать код программы, суммирующей числа от 1 до 10, следующим образом:
#include
int main() {
int sum = 0;
//
for (int val = 1; val <= 10; ++val)
sum += val; //
std::cout << "Sum of 1 to 10 inclusive is "
<< sum << std::endl;
return 0;
}
Как и прежде, определяем и инициализируем переменную sum
нулевым значением. В этой версии мы определяем переменную val
как часть самого оператора for
.
for (int val = 1; val <= 10; ++val)
sum += val;
У каждого оператора for
есть две части: заголовок и тело. Заголовок контролирует количество раз выполнения тела. Сам заголовок состоит из трех частей: val
типа int
присвоено исходное значение 1
:
int val = 1;
Переменная val
существует только в цикле for
; ее невозможно использовать после завершения цикла. Оператор инициализации выполняется только однажды перед запуском цикла for
.
Условие сравнивает текущее значение переменной val
со значением 10
:
val <= 10
Условие проверяется при каждом цикле. Пока значение переменной val
меньше или равно 10
, выполняется тело цикла for
.
Выражение выполняется после тела цикла for
. В данном случае выражение использует префиксный оператор инкремента, который добавляет 1
к значению переменной val
:
++val
После выполнения выражения оператор for
повторно проверяет условие. Если новое значение переменной val
все еще меньше или равно 10
, то тело цикла for
выполняется снова. После выполнения тела значение переменной val
увеличивается снова. Цикл продолжается до нарушения условия.
В рассматриваемом цикле for тело
осуществляет суммирование.
sum += val; //
В итоге оператор for
выполняется так.
1. Создается переменная val
и инициализируется значением 1
.
2. Проверяется значение переменной val
(меньше или равно 10
). Если условие истинно, выполняется тело цикла for
, в противном случае цикл завершается и управление переходит к оператору, следующему за ним.
3. Приращение значения переменной val
.
4. Пока условие истинно, повторяются действия, начиная с пункта 2.
Упражнение 1.12. Что делает следующий цикл for
? Каково финальное значение переменной sum
?
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum += i;
Упражнение 1.13. Перепишите упражнения раздела 1.4.1, используя циклы for
.
Упражнение 1.14. Сравните циклы с использованием операторов for
и while
в двух предыдущих упражнениях. Каковы преимущества и недостатки каждого из них в разных случаях?
Упражнение 1.15. Напишите программы, которые содержат наиболее распространенные ошибки, обсуждаемые во врезке «Ввод конца файла с клавиатуры». Ознакомьтесь с сообщениями, выдаваемыми компилятором.
1.4.3. Ввод неизвестного количества данных
В приведенных выше разделах мы писали программы, которые суммировали числа от 1 до 10. Логическое усовершенствование этой программы подразумевало бы запрос суммируемых чисел у пользователя. В таком случае мы не будем знать, сколько чисел суммировать. Поэтому продолжим читать числа, пока будет что читать.