120 Глава 2
//Повторение, управляемое счетчиком, со структурой for #include <iostream.h>
main ()
{
// задание начального значения, условие повторения и // приращение - все это включено в заголовок структуры for for ( int counter = 1; counter <= 10; counter++) cout « counter « endl;
return 0; // успешное окончание }
Рис. 2.17. Повторение, управляемое счетчиком, со структурой for
Имя Конечное значение
управляющей управляющей
переменной переменной
I I
for (int counter ж 1; counter <» 10; countar++)
2ounter « 1; counter <» 10;
Т Т Т
Ключевое Начальное Приращение
слово for значение управляющей
управляющей переменной
переменной
Рис. 2.18. Компоненты типичного заголовка for
Хороший стиль программирования 2.17
Использование конечного значения управляющей переменной в условиях структур while и for и использование операции отношения <= поможет избежать ошибок занижения на единицу. Например, для цикла, используемого при печати чисел от 1 до 10 условие продолжения цикла следует записать counter <= 10, а не counter < 10 (что является ошибкой занижения на единицу) или counter < 11 (что тем не менее корректно).
Общая форма структуры for:
for (выражение!; выражение2; выражениеЗ) опера тор
где выражение! задает начальное значение переменной, управляющей циклом, выражение2 является условием продолжения цикла, а выражениеЗ изменяет управляющую переменную. В большинстве случаев структуру for можно представить эквивалентной ей структурой while следующим образом:
Управляющие структуры 121
выражение!;
while (выражение2) { оператор выражениеЗ;
}
Исключения из этого правила будут рассмотрены в разделе 2.18.
Иногда выражение! и выражениеЗ представляются как списки выражений, разделенных запятой. В данном случае запятая используется как операция запятая или операция последования, гарантирующая, что список выражений будет вычисляться слева направо. Операция последования имеет самый низкий приоритет среди всех операций С++. Значение и тип списка выражений, разделенных запятыми, равны значению и типу самого правого выражения в списке. Операция последования наиболее часто используется в структуре for. Ее основное назначение — помочь программисту использовать несколько выражений задания начальных значений и (или) несколько выражений приращения переменных. Например, в одной структуре for может быть несколько управляющих переменных, которым надо задавать начальное значение и которые надо изменять.
Хороший стиль программирования 2.18
Помещайте в разделы задания начальных значений и изменения переменных структуры for только выражения, относящиеся к управляющей переменной. Манипуляции с другими переменными должны размещаться или до цикла (если они выполняются только один раз подобно операторам задания начальных значений), или внутри тела цикла (если они должны выполняться в каждом цикле, как, например, операторы инкремента или декремента).
Выражения в структуре for являются необязательными. Если выраже-ние2 отсутствует, С++ предполагает, что условие продолжения цикла всегда истинно и таким образом создается бесконечно повторяющийся цикл. Иногда может отсутствовать выражение!, если начальное значение управляющей переменной задано где-то в другом месте программы. Может отсутствовать и выражениеЗ, если приращение переменной осуществляется операторами в теле структуры for или если приращение не требуется. Выражение для приращения переменной в структуре for действует так же, как автономный оператор в конце тела for. Следовательно, все выражения
counter = counter + 1 counter += 1 ++counter counter++
эквивалентны в той части структуры for, которая определяет приращение. Многие программисты предпочитают форму counter++, поскольку приращение срабатывает после выполнения тела цикла. Поэтому постфиксная форма представляется более естественной. Поскольку изменяемая переменная здесь не входит в какое-то выражение, обе формы инкремента равноправны. В структуре for должны применяться точки с запятой.
Типичная ошибка программирования 2.13
Использование запятых вместо точек с запятой в заголовке структуры for.
- 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. Встраиваемые функции