156 Глава 2
обходимости обрабатывать исключительную ситуацию. Но бывают ситуации, в которых никакой обработки по метке default не требуется.
Хотя предложения case и default могут размещаться в структуре switch в произвольном порядке, стоит учесть практику качествен ного программирования — помещать default в конце.
Если в структуре switch предложение default помещено последним в списке, то оператор break в нем не требуется. Но некоторые про граммисты включают break и тут для четкости и для симметрии с другими случаями.
Не забывайте обеспечить обработку возможности появления во вход ном потоке символа перехода на новую строку и других символов- разделителей, если обрабатываете по одному символу за раз.
Некоторые программисты всегда включают фигурные скобки в структуру do/while, даже если в них нет необходимости. Это помо гает устранить двусмысленность, проистекающую из совпадения предложений структуры while и структуры do/while, содержащей один оператор.
Некоторые программисты чувствуют, что break и continue нарушают структурное программирование. А поскольку результат работы этих операторов, как мы скоро увидим, может быть достигнут техноло гией структурного программирования, то эти программисты не при меняют break и continue.
Если выражение проверки равенства содержит переменную и кон станту, например, x == 1, некоторые программисты предпочитают записывать подобные выражения, помещая константу слева, а имя переменной справа, чтобы предохранить себя от логической ошибки при случайной подмене операции == операцией =.
Советы по повышению эффективности
Программисты могут программы писать несколько быстрее и ком пилятор может компилировать их немного быстрее, если использо вать «сокращенные» операции присваивания (составные присваива ния). Некоторые компиляторы генерируют код, который выполняется быстрее при использовании «сокращенных» операций присваива ния.
Многие из советов по повышению эффективности, которые мы будем давать в этой книге, приводят к незначительному улучшению, так что читатель может иметь искушение пренебречь ими. Значительное повышение эффективности получается, если такие небольшие улуч шения находятся внутри цикла и могут повторяться много раз.
Избегайте размещать выражения, значение которых не изменяется, внутри цикла. Но даже, если вы сделаете это, то многие современные сложные оптимизирующие компиляторы автоматически разместят подобные выражения вне цикла во время генерации машинного кода.
Управляющие структуры 157
В ситуациях, где важна эффективность, где жесткие требования к памяти или критична скорость исполнения программы, может ока заться желательным использовать целые минимальных размеров.
При надлежащем использовании операторы break и continue вы полняются быстрее, чем соответствующие приемы структурного про граммирования, которые мы скоро изучим.
В выражениях, использующих операцию &&, если отдельные усло вия независимы друг от друга, записывайте комбинированное ус ловие так, чтобы самым левым было то простое условие, которое вероятнее всего окажется ложным. В выражениях, использующих операцию ||, записывайте комбинированное условие так, чтобы самым левым было то простое условие, которое вероятнее всего ока жется истинным. Это может сократить время выполнения програм мы.
Замечания по мобильности
Комбинация клавиш для ввода признака конца файла зависит от системы.
Проверка на символическую константу EOF, а не на -1 делает про грамму более мобильной. Стандарт ANSII устанавливает, что EOF имеет целое отрицательное значение (но не обязательно -1). Так что EOF может иметь различные значения в разных системах.
Поскольку размер типа int варьируется от системы к системе, ис пользуйте тип long, если вы предусматриваете обработку целых, значения которых могут лежать вне диапазона 32767, и вы, веро ятнее всего, сможете выполнять свою программу на нескольких раз личных компьютерных системах.
Замечания по технике программирования
Составной оператор может быть помещен в любом месте программы, в котором может размещаться единичный оператор.
Справедливо, что составной оператор может быть помещен в любом месте программы, в котором может размещаться единичный опера тор, но также справедливо и то, что можно вообще обойтись без оператора, т.е. поместить пустой оператор. Для этого надо поместить символ точки с запятой (;) в том месте, где нормально должен на ходиться оператор.
Каждая детализация, так же как и сама вершина, является полным описанием алгоритма; меняется только уровень детализации.
Многие программы могут быть логически разделены на три этапа: этап задания начальных значений, в котором задаются начальные значения переменных программы; этап обработки данных, в котором вводятся данные и устанавливаются значения соответствующих переменных программы; заключительный этап, в котором вычис ляются и печатаются окончательные результаты.
- 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. Встраиваемые функции