|
Программирование >> Структурное программирование
2.6. Если для счетчика или переменной суммы не задады начальные значения, то результат работы вашей программы будет, вероятно, неправильным. Это пример логической ошибки. 2.7. Выбор такого значения метки, которое могут принимать и входные данные. 2.8. Попытка деления на нуль вызывает сбой программы. 2.9. Использование чисел с плаваюш;ей запятой в предположении, что они совершенно точные, может приводить к некорректным результатам. Числа с плавающей запятой на большинстве компьютеров являются приближенными. 2.10. Попытка использовать в операции инкремента или декремента операнд, отличный от имени простой переменной, например, выражение ++(х+1) является синтаксической ошибкой. 2.11. Поскольку числа с плавающей запятой являются приближенными, контроль количества выполнений цикла с помощью переменной с плавающей запятой может приводить к неточному значению счетчика и неправильному результату проверки условия окончания. 2.12. Использование неправильной операции отношения или использование неправильной конечной величины счетчика цикла в условиях структур while или for может приводить к ошибке занижения (или завышения) на единицу. 2.13. Использование запятых вместо точек с запятой в заголовке структуры for. 2.14. Размещение точки с запятой сразу после правой закрывающей скобки заголовка for делает тело структуры пустым оператором. Обычно это логическая ошибка. 2.15. Использование несоответствующей операции отношения в условии продолжения цикла при счете циклов сверху вниз (например, использование i <= 1 при счете циклов сверху до 1), 2.16. Забывают включить файл math.h в программы, использующие библиотеку математических функций. 2.17. Забывают вставить оператор break, когда он нужен в структуре switch. 2.18. Пропуск пробела между ключевым словом case и целым значением, которое проверяется в структуре switch, может вызвать логическую ошибку. Например, запись сазеЗ: вместо case 3: просто создаст неиспользуемую метку (мы поговорим об этом подробнее в главе 18). Дело в том, что в этой структуре switch не будут совершены соответствующие действия, когда управляющее выражение switch будет иметь значение 3. 2.19. Отсутствие обработки символа новой строки при вводе, если символы читаются по одному, может привести к логической ошибке. 2.20. Если условие продолжения цикла в структурах while, for или do/while никогда не становится ложным, то возникает зациклива- ние. Чтобы предотвратить это, убедитесь, что нет точки с запятой сразу после заголовка структуры while. В цикле, управляемом счетчиком, убедитесь, что управляющая переменная увеличивается (или уменьшается) в теле цикла. В цикле, управляемом меткой, убедитесь, что значение метки в конце концов будет введено. 2.21. В выражениях, использующих операцию &&, может оказаться, что одно условие - назовем его зависимым - может требовать, чтобы другое условие было значимо при оценке зависимого условия. В этом случае зависимое условие должно быть помещено после другого условия, в противном случае может произойти ошибка. 2.22. Использование операции == для присваивания или операции = для проверки равенства. Хороший стиль программирования 2.1. Неукоснительно соблюдайте правила ступенчатой записи во всех ваших программах, это существенно улучшит их читаемость. Мы советуем делать отступы фиксированного размера примерно 0,5 см или три пробела на отступ. 2.2. Псевдокод часто используется при обдумывании программ в процессе их разработки. Затем программа на псевдокоде преобразуется в программу на С-Н-. 2.3. Записывайте с отступом оба предложения структуры ЕСЛИ-ИНАЧЕ (if/else). 2.4. Если есть несколько уровней отступов, каждый уровень должен иметь постоянное число пробелов. 2.5. Некоторые программисты предпочитают сначала записать открывающую и закрывающую скобки составного оператора, а уже потом писать внутри их требуемые операторы. Это позволяет избежать пропуска одной или обеих скобок. 2.6. Задавайте начальные значения всем счетчикам и переменным сумм. 2.7. Когда осуществляется деление на выражение, значение которого может равняться нулю, надо предварительно проверить эту возможность и обработать ее должным образом (например, напечатать сообщение об ошибке), не допуская возникновения неисправимой ошибки. 2.8. В цикле, управляемом меткой, приглашение к вводу данных должно явно напоминать пользователю, какое значение используется как метка. 2.9. Не следует сравнивать числа с плавающей запятой на их равенство или неравенство друг другу. Лучше проверять, не меньше ли их разность некоторой заданной малой величины. 2.10. Задание начальных значений переменных одновременно с их объявлением помогает программисту избежать проблем, связанных с неопределенными значениями данных. 2.11. Унарные операции должны размещаться после их операндов без разделяющего пробела. 2.12. Управляйте количеством повторений цикла с помощью целой переменной. 2.13. Записывайте с отступом операторы тела каждой управляющей структуры. 2.14. Размещайте пустую строку до и после каждой большой управляющей структуры, чтобы она выделялась в программе. 2.15. Слишком большая глубина вложенности может сделать программу трудной для понимания. Как правило, старайтесь избегать более трех уровней отступов. 2.16. Вертикальные пробелы над и под управляющими структурами вместе с отступами в телах этих структур по отношению к их заголовкам создают двумерный эффект, облегчающие чтение программы. 2.17. Использование конечной величины управляющей переменной в условиях структур while и for и использование операции отношения <= поможет избежать ошибок занижения на единицу. Например, для цикла, используемого при печати чисел от 1 до 10 условие продолжения цикла надо записать counter <= 10, а не counter < 10 (что является ошибкой занижения на единицу) или counter < 11 (что тем не менее корректно). 2.18. Помещайте в разделы задания начального значения и изменения переменных структуры for только выражения, относящиеся к управляющей переменной. Манипуляции с другими переменными должны размещаться или до цикла (если они выполняются только один раз подобно операторам задания начальных значений), или внутри тела цикла (если они должны выполняться в каждом цикле, как, например, операторы инкремента или декремента). 2.19. Хотя управляющая переменная может изменяться в теле цикла for, избегайте делать это, так как такая практика приводит к неявным, неочевидным ошибкам. 2.20. Хотя операторы, предшествующие for и операторы тела for могут часто включаться в заголовок for, избегайте делать это, чтобы на затруднять чтение программы. 2.21. Ограничивайте, если возможно, размер заголовка управляющей структуры так, чтобы он умещался на одной строке. 2.22. Не используйте переменные типов float и double для денежных расчетов. Неточность чисел с плавающей запятой может привести к ошибкам, которые проявятся в итоге в неправильной сумме денег. В качестве упражнения попробуйте использовать для денежных расчетов целые числа. Заметим: библиотека классов C-I-+ позволяет должным образом осуществлять денежные расчеты. 2.23. Вставляйте метку default в оператор switch. Слзчаи неудачных проверок в операторе switch без метки default будут игнорироваться. Включение метки default фиксирует внимание программиста на не-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |