Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

143 Глава 3

Цикл while

Второй тип циклов С++ — цикл while. В то время как цикл for предназначен глав- ным образом для повторения оператора или блока операторов определенное количе- ство раз, цикл while служит для выполнения оператора или блока до тех пор, пока указанное условие остается истинным. Общая форма цикла while показана ниже.

Здесь оператор_внутри_цикла выполняется повторно до тех пор, пока выра- жение условие имеет значение true. После того, как условие становится равным false, программа выходит из цикла и переходит к оператору, следующему за ним. Как всегда, единственный оператор_внутри_цикла может быть заменен блоком опе- раторов в фигурных скобках.

Логика цикла while представлена на рис. 3.5.

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

Решения и циклы 144

Описание полученных результатов

При том же вводе, что и ранее, эта программа генерирует такой же вывод. Один оператор был изменен, другой добавлен — они выделены полужирным в исходном коде. Оператор цикла for заменен while, и исключена проверка indicator в if, по- скольку теперь эту функцию выполняет условие цикла while. Вы должны инициали- зировать indicator значением ' у' вместо ' п1, как было раньше. Иначе цикл while прервется немедленно. До тех пор, пока условие while возвращает true, цикл будет продолжаться.

Вы можете поместить в условие цикла while любое выражение, которое в результа- те дает true или false. Данный пример можно усовершенствовать, если сформулиро- вать условие цикла так, чтобы для продолжения цикла можно было вводить 1Y1 наряду с 1 у *. Для этого потребуется модифицировать оператор while следующим образом:

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

Можно также записать управляющее выражение цикла как целочисленное значе- ние 1, которое будет преобразовано в значение true типа bool. Естественно, здесь также остается в силе то же требование, что предъявляется к бесконечным циклам for, а именно: необходимо предусмотреть какой-нибудь способ выхода из цикла вну- три его тела. Вы увидите в главе 4 другие примеры применения цикла while.

Цикл do-while

Цикл do-while подобен циклу while в том, что он выполняется до тех пор, пока указанное условие остается истинным. Главное отличие его состоит в том, что здесь условие проверяется в конце цикла — что отличает его от циклов for и while, где

145 Глава 3

оно проверяется в начале. Как следствие, оператор внутри цикла do-while всегда вы- полняется, по меньшей мере, один раз. Общая форма цикла do-while следующая:

Логика этой формы цикла показана на рис. 3.6.

Рис. 3.6. Оператор цикла do-while

Вы можете заменить цикл while в последней версии программы вычисления сред- него циклом do-while:

Между двумя последними версиями цикла нет особой разницы, за исключени- ем того, что правильная работа этой версии не зависит от начального значения indicator. До тех пор, пока вы уверены, что будет введено хотя бы одно осмыслен- ное значение, которое нужно обработать, применение данной версии цикла более предпочтительно.

Вложенные циклы

Циклы можно вкладывать друг в друга. Смысл этого станет более очевидным в гла- ве 4: такая техника обычно применяется для повторения действий на разных уровнях классификации. Примером может быть вычисление суммы оценок каждого студента в классе с повторением процесса для каждого класса школы.

Решения и циклы 147

Эффект от вложения одного цикла в другой можно увидеть на примере вычисле- ния значений по простой формуле. Факториал целого числа — это произведение всех целых чисел от 1 и до заданного включительно. Поэтому факториал 3, например — это 1, умноженное на 2 и на 3, что равно 6. Следующая программа вычисляет факто- риал целых чисел, которые вводит пользователь:

Если вы скомпилируете и выполните этот пример, он будет работать примерно так:

Описание полученных результатов

Значения факториала возрастают очень быстро. Фактически, 12— наибольшее входное значение, для которого данный пример выдает правильный результат. Факториал 13 на самом деле равен 6 227 020 800, а не 1 932 053 504, как сообщает про-