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

139 Глава 3

И, наконец, выполняется вывод количества введенных значений и их средней ве- личины, которая вычисляется делением sum на i. Конечно, было бы неплохо приве- сти i к типу double перед вычислением, если вы помните разговор о приведениях в главе 2.

Использование оператора continue

Имеется еще один оператор помимо break, служащий для управления циклом — continue. Записывается он очень просто:

Выполнение continue внутри цикла немедленно начинает следующую итерацию цикла, пропуская операторы тела цикла, которые оставалось выполнить в текущей итерации. Я могу продемонстрировать, как это работает, на следующем примере:

Цикл читает 10 чисел с намерением получить произведение всех введенных зна- чений. Оператор if проверяет, не был ли введен 0, и если это так, то выполняется continue, чтобы сразу перейти к следующей итерации. Это делается для того, чтобы произведение введенных чисел не обратилось в ноль при первом же вводе нулевого значения. Понятно, что если ноль будет введен на последней итерации, цикл просто завершится. Безусловно, существуют и другие способы достичь того же результата, но continue представляет очень удобное средство, в частности, для сложных циклов, где вам может понадобиться пропускать остаток текущей итерации, начиная с разных точек его тела.

Влияние операторов break и continue на логику цикла for иллюстрирует рис. 3.4.

Очевидно, что в реальных ситуациях вы будете использовать операторы break и continue с некоторой логикой проверки условий для определения того, когда цикл должен быть завершен, или когда текущая итерация должна быть пропущена. Вы мо- жете применять операторы break и continue и с циклами других типов, о которых я расскажу позднее в этой главе. Там они работают точно так же, как и в for.

До сих пор вы применяли только целочисленные переменные (int) в качестве счетчиков цикла. Но вы никоим образом не ограничены в выборе типа переменной, используемой в качестве счетчика итераций. Рассмотрим следующий пример.

141 Глава 3

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

Программа начинается с нескольких объявлений using для имен некоторых но- вых манипуляторов, управляющих представлением вывода.

Цикл управляется переменной capital типа char, которая объявлена вместе с переменной small в выражении инициализации. Обе переменных подвергаются ин- крементированию в третьем управляющем выражении цикла, так что capital изме- няется от 'А' до 1Z', а значение small — соответственно от 'а1 до 1 z1.

Тело цикла содержит единственный оператор вывода, растянутый на семь строк. Первая из них:

начинает новую строку на экране. Следующие три строки таковы:

При каждой итерации после вывода символа табуляции значение capital отобра- жается три раза: как символ, в шестнадцатеричном и в десятичном видах.

Когда вы вставляете манипулятор hex в поток cout, это заставляет следующие зна- чения данных отображаться в шестнадцатеричном виде вместо обычного принято- го по умолчанию для целых чисел десятичного, поэтому следующий вывод capital представляет код символа как шестнадцатеричное число.

Затем в поток вставляется манипулятор dec, что заставляет его отобразить следу- ющее значение в десятичном виде. По умолчанию переменная типа char интерпрети- руется потоком как символ, а не как числовая величина. Вы отправляете в поток пе- ременную capital типа char как числовое значение путем приведения его значения к типу int операцией staticcasto (), которая вам знакома по предыдущей главе.

Значение small выводится точно таким же образом в следующих трех строках оператора вывода:

В результате программа генерирует следующий вывод:

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

Счетчики с плавающей точкой

Вы можете также использовать в качестве счетчиков цикла значения с плавающей точкой. Ниже приведен пример цикла for со счетчиком такого типа:

Этот фрагмент кода вычисляет значение а*х+Ь для значений х от 0 . О до 2 . О с шагом 0.25; однако вы должны быть осторожны, применяя в циклах счетчик с пла- вающей точкой. Многие десятичные значения не могут быть представлены точно в двоичной форме с плавающей точкой, поэтому в аккумулируемых значениях может накапливаться погрешность. Это значит, что вы не должны кодировать цикл for так, чтобы его завершение зависело от достижения счетчиком с плавающей точкой точ- ного значения. Например, следующий неправильно спроектированный цикл никогда не завершится:

Казалось бы, этот цикл должен отобразить значения х, изменяя их от 0.0 до 1.0; однако шаг 0 . 2 не может быть представлен точно в формате с плавающей точкой, поэтому значение х никогда не будет точно равно 1.0. Следовательно, второе управ- ляющее циклом выражение всегда будет true, а потому цикл будет продолжаться бес- конечно.