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

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

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

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

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

<p>1.4.2. Оператор <code>for</code></p>

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

Такая схема, подразумевающая использование переменной в условии и ее инкремент в теле столь популярна, что было разработано второе средство управления — оператор for, существенно сокращающий подобный код. Используя оператор for, можно было бы переписать код программы, суммирующей числа от 1 до 10, следующим образом:

#include

int main() {

 int sum = 0;

 // сложить числа от 1 до 10 включительно

 for (int val = 1; val <= 10; ++val)

  sum += val; // эквивалентно sum = 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; // эквивалентно sum = sum + val

В итоге оператор for выполняется так.

1. Создается переменная val и инициализируется значением 1.

2. Проверяется значение переменной val (меньше или равно 10). Если условие истинно, выполняется тело цикла for, в противном случае цикл завершается и управление переходит к оператору, следующему за ним.

3. Приращение значения переменной val.

4. Пока условие истинно, повторяются действия, начиная с пункта 2.

Упражнения раздела 1.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. Напишите программы, которые содержат наиболее распространенные ошибки, обсуждаемые во врезке «Ввод конца файла с клавиатуры». Ознакомьтесь с сообщениями, выдаваемыми компилятором.

<p>1.4.3. Ввод неизвестного количества данных</p>

В приведенных выше разделах мы писали программы, которые суммировали числа от 1 до 10. Логическое усовершенствование этой программы подразумевало бы запрос суммируемых чисел у пользователя. В таком случае мы не будем знать, сколько чисел суммировать. Поэтому продолжим читать числа, пока будет что читать.

Перейти на страницу:

Похожие книги