2.13. Основы повторения, управляемого счетчиком
Для организации повторения, управляемого счетчиком, требуется задать: 1. Имя управляющей переменной (или счетчика циклов).
Управляющие структуры
117
Начальное значение управляющей переменной.
Приращение (или уменьшение), на которое изменяется управляющая переменная в каждом цикле.
Условие проверки, не достигнуто ли конечное значение управляющей переменной (т.е. надо ли продолжать циклы).
Рассмотрим простую программу, показанную на рис. 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
Вертикальные пробелы над и под управляющими структурами вместе с отступами в телах этих структур по отношению к их заголовкам создают двумерный эффект, облегчающие чтение программы.
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции