Глава 2
ние. Чтобы предотвратить это, убедитесь, что нет точки с запятой сразу после заголовка структуры while. В цикле, управляемом счетчиком, убедитесь, что управляющая переменная увеличивается (или уменьшается) в теле цикла. В цикле, управляемом меткой, убедитесь, что значение метки в конце концов будет введено.
В выражениях, использующих операцию &&, может оказаться, что одно условие — назовем его зависимым — может требовать, чтобы другое условие было значимо при оценке зависимого условия. В этом случае зависимое условие должно быть помещено после другого условия, в противном случае может произойти ошибка.
Использование операции == для присваивания или операции = для проверки равенства.
Хороший стиль программирования
Неукоснительно соблюдайте правила ступенчатой записи во всех ваших программах, это существенно улучшит их читаемость. Мы советуем делать отступы фиксированного размера примерно 0,5 см или три пробела на отступ.
Псевдокод часто используется при «обдумывании» программ в про цессе их разработки. Затем программа на псевдокоде преобразуется в программу на С++.
Записывайте с отступом оба предложения структуры ЕСЛИ-ИНАЧЕ (if/else).
Если есть несколько уровней отступов, каждый уровень должен иметь постоянное число пробелов.
Некоторые программисты предпочитают сначала записать откры вающую и закрывающую скобки составного оператора, а уже потом писать внутри их требуемые операторы. Это позволяет избежать пропуска одной или обеих скобок.
Задавайте начальные значения всем счетчикам и переменным сумм.
Когда осуществляется деление на выражение, значение которого может равняться нулю, надо предварительно проверить эту возмож ность и обработать ее должным образом (например, напечатать со общение об ошибке), не допуская возникновения неисправимой ошибки.
В цикле, управляемом меткой, приглашение к вводу данных должно явно напоминать пользователю, какое значение используется как метка.
Не следует сравнивать числа с плавающей запятой на их равенство или неравенство друг другу. Лучше проверять, не меньше ли их разность некоторой заданной малой величины.
Задание начальных значений переменных одновременно с их объ явлением помогает программисту избежать проблем, связанных с неопределенными значениями данных.
Управляющие структуры 155
Унарные операции должны размещаться после их операндов без разделяющего пробела.
Управляйте количеством повторений цикла с помощью целой пере менной.
Записывайте с отступом операторы тела каждой управляющей структуры.
Размещайте пустую строку до и после каждой большой управляю щей структуры, чтобы она выделялась в программе.
Слишком большая глубина вложенности может сделать программу трудной для понимания. Как правило, старайтесь избегать более трех уровней отступов.
Вертикальные пробелы над и под управляющими структурами вмес те с отступами в телах этих структур по отношению к их заголовкам создают двумерный эффект, облегчающие чтение программы.
Использование конечной величины управляющей переменной в ус ловиях структур while и for и использование операции отношения <= поможет избежать ошибок занижения на единицу. Например, для цикла, используемого при печати чисел от 1 до 10 условие продолжения цикла надо записать counter <= 10, а не counter < 10 (что является ошибкой занижения на единицу) или coimter < 11 (что тем не менее корректно).
Помещайте в разделы задания начального значения и изменения переменных структуры for только выражения, относящиеся к уп равляющей переменной. Манипуляции с другими переменными должны размещаться или до цикла (если они выполняются только один раз подобно операторам задания начальных значений), или внутри тела цикла (если они должны выполняться в каждом цикле, как, например, операторы инкремента или декремента).
Хотя управляющая переменная может изменяться в теле цикла for, избегайте делать это, так как такая практика приводит к неявным, неочевидным ошибкам.
Хотя операторы, предшествующие for и операторы тела for могут часто включаться в заголовок for, избегайте делать это, чтобы на затруднять чтение программы.
Ограничивайте, если возможно, размер заголовка управляющей структуры так, чтобы он умещался на одной строке.
Не используйте переменные типов float и double для денежных рас четов. Неточность чисел с плавающей запятой может привести к ошибкам, которые проявятся в итоге в неправильной сумме денег. В качестве упражнения попробуйте использовать для денежных рас четов целые числа. Заметим: библиотека классов С++ позволяет должным образом осуществлять денежные расчеты.
Вставляйте метку default в оператор switch. Случаи неудачных про верок в операторе switch без метки default будут игнорироваться. Включение метки default фиксирует внимание программиста на не-
- 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. Встраиваемые функции