logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

2.13. Основы повторения, управляемого счетчиком

Для организации повторения, управляемого счетчиком, требуется задать: 1. Имя управляющей переменной (или счетчика циклов).

Управляющие структуры

117

  1. Начальное значение управляющей переменной.

  2. Приращение (или уменьшение), на которое изменяется управляющая переменная в каждом цикле.

  3. Условие проверки, не достигнуто ли конечное значение управляющей переменной (т.е. надо ли продолжать циклы).

Рассмотрим простую программу, показанную на рис. 2.16, которая пе­чатает числа от 1 до 10. Объявление

int counter = 1;

определяет имя управляющей переменной (counter), объявляет переменную как целую, резервируя для нее соответствующее место в памяти, и задает ее начальное значение 1. Объявления, в которых задается начальное значение, являются фактически выполняемыми операторами.

Это объявление и задание начального значения переменной counter можно было бы сделать операторами

int counter; counter = 1;

Здесь само объявление не является выполняемым оператором, а присва­ивание осуществляется отдельным оператором. Можно использовать оба эти метода для задания начальных значений переменных.

Оператор

++counter

увеличивает счетчик на 1 при каждом выполнении цикла. Условие продолже­ния цикла в структуре while проверяет, меньше или равно значение управляю­щей переменной числа 10 (последнего значения, при котором условие истинно). Заметьте, что тело этой структуры while выполняется и при значении управ­ляющей переменной, равном 10. Выполнение цикла заканчивается, когда значение управляющей переменной превысит 10 (т.е. переменная counter станет равной 11).

Операция

Ассоциативность

Тип операций

О

слева направо

круглые скобки

+ -- + - (тип)

справа налево

унарные

* / %

слева направо

мультипликативные

+

слева направо

аддитивные

« »

слева направо

поместить в/взять из

< <= > >=

слева направо

отношение

! =

слева направо

проверка на равенство

о .

справа налево

условная

+= -= *= /= %=

справа налево

присваивание

Рис. 2.15. Приоритеты операций, описанных ранее в данной книге

118 Глава 2

//Повторение, управляемое счетчиком #include <iostream.h>

main () {

int counter = 1; // Задание начального значения

while (counter <= 10} ( // условие повторения

cout « counter « endl;

++counter; // увеличение

}

return 0; // успешное окончание

}

1 2 3 4 5 6 7 8 9 10

Рис 2.16. Повторение, управляемое счетчиком

Программа рис. 2.16 может быть сделана более компактной, если пере­менной counter задать начальное значение 0 и заменить структуру while следующей:

while (++couner <= 10)

cout « counter « endl;

Этот код экономит один оператор, поскольку инкремент выполняется непосредственно в условии структуры while до того, как это условие прове­ряется. Этот код также устраняет скобки, заключающие в себе тело while, поскольку теперь while содержит всего один оператор. Кодирование в подоб­ной сжатой манере дается практикой.

Типичная ошибка программирования 2.11

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

Хороший стиль программирования 2.12

Управляйте количеством повторений цикла с помощью целой переменной.

Хороший стиль программирования 2.13

Записывайте с отступом операторы тела каждой управляющей структуры.

Управляющие структуры 119

Хороший стиль программирования 2.14

Размещайте пустую строку до и после каждой большой управляющей структуры, чтобы она выделялась в программе.

Хороший стиль программирования 2.15

Слишком большая глубина вложенности может сделать программу трудной для по­нимания. Как правило, старайтесь избегать более трех уровней отступов.

Хороший стиль программирования 2.16

Вертикальные пробелы над и под управляющими структурами вместе с отступами в телах этих структур по отношению к их заголовкам создают двумерный эффект, облегчающие чтение программы.