×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 14 из 714 Настройки

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

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

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

>#include

>int main() {

> int sum = 0, value = 0;

> // читать данные до конца файла, вычислить сумму всех значений

> while (std::cin >> value)

>  sum += value; // эквивалентно sum = sum + val

> std::cout << "Sum is: " << sum << std::endl;

> return 0;

>}

Если ввести значения >3 4 5 6, то будет получен результат >Sum is: 18.

Первая строка функции >main() определяет две переменные типа >int по имени >sum и >value, инициализируемые значением >0. Переменная >value применяется для хранения чисел, вводимых в условии цикла >while.

>while (std::cin >> value)

Условием продолжения цикла >while является выражение

>std::cin >> value

Это выражение читает следующее число со стандартного устройства ввода и сохраняет его в переменной >value. Как упоминалось в разделе 1.2, оператор ввода возвращает свой левый операнд. Таким образом, в условии фактически проверяется объект >std::cin.

Когда объект типа >istream используется при проверке условия, результат зависит от состояния потока. Если поток допустим, т.е. не столкнулся с ошибкой и ввод следующего значения еще возможен, это условие считается истинным. Объект типа >istream переходит в недопустимое состояние по достижении конца файла (end-of-file) или при вводе недопустимых данных, например строки вместо числа. Недопустимое состояние объекта типа >istream в условии свидетельствует о том, что оно ложно.