- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
133 Глава 3
Выражение инициализации цикла for может также включать объявление пере- менной цикла. В предыдущем примере вы могли бы написать цикл так, чтобы в пер- вом его управляющем выражении содержалось объявление переменной i.
Естественно, исходное объявление i теперь должна быть исключена из програм- мы. Если вы внесете это изменение в последний пример, то обнаружите, что про- грамма не компилируется, потому что переменная цикла i исчезает после заверше- ния цикла, и вы не можете обращаться к ней в операторе вывода. Цикл имеет область видимости, распространяющуюся от управляющих выражений for до конца его тела, которое может быть либо блоком кода в фигурных скобках, либо единственным опе- ратором. Счетчик i теперь объявлен внутри области видимости цикла, и вы не мо- жете обращаться к нему в операторе вывода, потому что оно находится за пределами этой области. По умолчанию компилятор С++ придерживается стандарта ISO/ANSI
Решения
и циклы
С++, который утверждает, что переменная, определенная внутри условия цикла, не может быть доступна вне этого цикла.
Вы можете вообще исключить инициализирующее выражение из цикла. Если ини- циализировать i в отдельном операторе объявления, то цикл можно написать так:
Тут по-прежнему нужна точка с запятой, отделяющая выражение инициализации от проверочного условия цикла. Фактически обе точки с запятой всегда должны при- сутствовать, независимо от того, пропущено ли какое-то одно из управляющих выра- жение, или даже все сразу. Если вы пропустите первую точку с запятой, то компиля- тор не сможет понять, какое именно из трех управляющих операторов отсутствует, или даже какой именно точки с запятой не хватает.
Цикл for может быть пустым. Например, вы можете поместить оператор цикла из предыдущего примера в выражение инкремента. Тогда цикл будет выглядеть так:
Точка с запятой после закрывающей скобки необходима, чтобы сообщить компи- лятору, что оператор цикла теперь пусто. Если вы пропустите ее, то оператор, следу- ющий непосредственно после этой строки, будет интерпретирован как тело цикла. Иногда пустой оператор цикла пишется в программах в отдельной строке:
Вы можете использовать операцию запятой, чтобы включить несколько счетчи- ков в цикл for. Ниже показан пример.
Описание полученных результатов
Вы инициализируете две переменных в разделе инициализации цикла for, раз- деляя их операцией запятой и увеличивая значения каждой в секции инкремента.
Понятно, что таким образом в каждый из разделов for можно вставить столько вы- ражений, сколько понадобится.
Можно даже специфицировать множество условий, разделенных запятыми во втором выра- жении, представляющем проверочную часть цикла for, которая определяет, должен ли он продолжаться. Однако при этом лишь самое правое из них будет управлять циклом, опреде- ляя, когда он должен завершиться.
Обратите внимание, что присваивания, задающие начальные значения i и power, являются выражениями, а не операторами. Оператор всегда заканчивается точкой с запятой.
При каждом увеличении i на 1 значение power удваивается за счет сложения с са- мим собой. Это порождает последовательность чисел, представляющих степени двой- ки. Результат работы программы выглядит следующим образом.
Манипулятор setw, с которым вы познакомились в предыдущей главе, использует- ся для симпатичного выравнивания столбцов цифр. Чтобы использовать setw () без квалифицированного имени, в программу включен заголовочный файл <iomanip> и добавлено объявление using для имен из пространства std.
Если вы пропустите второе управляющее выражение, которое специфицирует проверочное условие цикла for, то предполагается, что это условие всегда будет true, поэтому цикл будет продолжаться бесконечно, если только вы не предусмотри- те какой-то другой способ выхода из него. На самом деле при желании вы можете пропустить все управляющие выражения в скобках после for. Это может показаться не слишком полезным, однако, в действительности все как раз наоборот. Довольно часто возникают ситуации, когда необходимо выполнить цикл некоторое число раз, но вы заранее не знаете, сколько именно итераций понадобится. Рассмотрим следую- щий пример.
Решения
и циклы
Данная программа вычисляет среднюю величину произвольного числа значений. После ввода каждого числа пользователь должен указать, желает ли он ввести еще одно значение, введя один символ — у или п. Типичный сеанс работы с этой програм- мой будет выглядеть так:
После объявления и инициализации переменных, которые вы собираетесь ис- пользовать, запускается цикл for без управляющих выражений, а, следовательно, и без гарантий завершения. Непосредственно следующий за этим блок — субъект цикла, который должен повторяться.
Блок цикла выполняет следующие базовые действия.
-
Читает значение.
-
Добавляет прочитанное из cin значение к sum.
-
Проверяет, желаете ли вы продолжить вводить значения.
Первое действие внутри блока приглашает вас ввести число, и читает введенное значение в переменную value. Введенное значение добавляется в sum, после чего за- дается вопрос — желаете ли вы продолжить ввод, и предлагается ввести 1 п1, если не желаете. Введенный символ помещается в переменную indicator для последующей проверки на равенство 'п' или 'N' в операторе if. Если равенства нет, цикл про- должается, в противном случае выполняется break. Эффект от break в цикле подо- бен тому, что он имеет в контексте оператора switch. В данном случае он приводит к немедленному выходу из цикла с передачей управления оператору, следующему за закрывающей фигурной скобкой блока цикла.