- •Часть 1
- •1. Основы программирования на языке Си
- •1.1. Структура программы на языке Си.
- •1.2. Структура простейшей одномодульной программы
- •1.2.1. Комментарии в программе на языке Си
- •1.2.2. Начальные сведения о препроцессоре
- •1.2.3. Определение функции main().
- •1.2.4. Пример простейшей программы
- •1.3. Алфавит, синтаксис и семантика
- •1.4. Алфавит языка Си
- •1.5. Понятие о типе
- •1.6. Система типов языка Си
- •1.7. Понятие об объекте
- •1.8. Лексемы
- •1.9. Зарезервированные слова
- •1.10. Идентификаторы
- •1.11. Литералы
- •1.11.1. Целочисленные литералы
- •1.11.2. Литерал вещественного типа
- •1.11.3. Символьные литералы
- •1.11.4. Строковый литерал
- •1.12. Переменные
- •1.13. Символические константы в языке Си
- •1.14. Операторы, выражения и инструкции. Общие сведения.
- •1.14.1. Классификация операторов
- •1.14.2. Приоритет и ассоциативность операторов.
- •1.14.3. Побочные эффекты при вычислении выражений
- •1.14.4. Порядок вычисления выражений
- •1.15. Арифметические операторы и выражения
- •1.15.1. Унарные операторы
- •1.15.2. Бинарные операторы
- •1.15.3. Преобразования типа при выполнении бинарных операторов
- •1.15.3.1. Автоматическое преобразование типов
- •1.15.3.2. Явное преобразование типа
- •1.15.4. Математические функции
- •1.16. Оператор присваивания и инструкция присваивания
- •1.16.1. Простой оператор присваивания
- •1.16.2.Множественное присваивание
- •1.16.3. Составной оператор присваивания
- •1.16.4. Преобразование типа при присваивании
- •1.17. Начальные сведения об указателях. Выходные параметры функции
- •1.18. Принятие решений и логические величины. Операторы отношения и сравнения на равенство
- •1.18.1. Логические операторы
- •1.18.2. Поразрядные операторы
- •1.19. Условные выражения (оператор ?:)
- •1.20. Оператор запятая
- •1.21. Оператор sizeof
- •1.22.4. Инструкция return
- •1.23. Составная инструкция
- •1.24. Инструкция if else
- •1.24.1. Полная и сокращенная формы инструкции if
- •1.24.2. Вложенные инструкции if
- •1.25. Инструкция switch
- •1.25.1. Синтаксис инструкции switch
- •1.25.2. Использование инструкции switch
- •1.26. Функциональные компоненты цикла
- •1.27. Арифметические и итерационные циклы
- •1.27.1. Задачи, приводящие к арифметическим циклам
- •1.27.2. Задачи, приводящие к итерационным циклам
- •1.28. Циклические управляющие инструкции
- •1.29. Цикл, управляемый инструкцией for
- •2. Примеры решенных задач
- •2.1. Линейные вычислительные процессы
- •2.2. Организация разветвлений
- •2.2.1. Простейшие разветвления
- •2.2.2. Многовариантные разветвления
- •2.2.2.1. Использование переключателя switch
- •2.2.2.2. Использование вложенных инструкций if else if
- •2.2.2.3. Использование вложенных инструкций if ... If
- •2.2.2.4. Использование сокращённых форм инструкции if
- •2.2.3. Рекомендации по программированию
- •2.3. Организация циклов
- •2.3.1. Простые циклы
- •2.3.2. Циклы и разветвления
- •2.3.2.1. Разветвление до цикла
- •2.3.2.2. Разветвление внутри цикла
- •2.3.2.3. Разветвление после цикла
- •2.3.2.4. Циклы в ветвях разветвлений.
- •2.3.3. Рекомендации по программированию
- •Содержание
- •1. Основы программирования на языке Си
- •Литература
2.2.2.3. Использование вложенных инструкций if ... If
Этот способ является альтернативным по отношению к способу, использующему вложенные инструкции if...else...if. Общепринятым является мнение о том, что его использование приводит к плохо читаемому программному коду. Дело в том, что при его использовании в программном коде условие, обеспечивающее выбор действия, и само выбранное действие оказываются далеко расположенными. В этом можно убедиться, если обратиться к приведённой ниже обобщённой схеме использования рассматриваемого способа, в которой имеется две вложенные инструкции.
if(<выр1>) if(<выр2>) if(<выр3>) <инструкция4> else <инструкция3> else <инструкция2> else <инструкция1>
Условие выр1 обеспечивает выбор действия, определяемого инструкцией инструкция1. В программе это условие и выбранное с его помощью действие будут далеко расположены. Это приведёт к ухудшению читабельности программы.
Применим этот подход к решению задачи, рассмотренной в п. 2.2.2.2. В результате получим следующий программный код, реализующий вычисление функции
if(x > 0) if(x > 5) if(x > 10) y = -3 * x + 45; else y – x + 5; else y = 2 * x; else y = 0;
2.2.2.4. Использование сокращённых форм инструкции if
При использовании этого способа предусматривается, что выбор каждого из действий, входящих в набор возможных действий, выполняется независимо от других. Главным здесь является нахождение условия, позволяющего сделать требуемый выбор. Следующим шагом является запись сокращённой инструкции if, в логической части которой записывается найденное условие, а внутренняя инструкция реализует действие, соответствующее этому условию. Количество инструкций if, которое требуется для решения, совпадает с количеством действий, входящих в набор возможных действий.
Руководствуясь этими соображениями, можно получить следующее решение для задачи, сформулированной в п. 2.2.2.2.
if(x <= 0) y = 0; if(x > 0 && x <= 5) y = 2 * x; if(x > 5 && x <= 10) y = x + 5; if(x > 10) y = -3 * x + 45;
К достоинствам полученного решения можно отнести:
▪ отсутствие вложенных инструкций, что облегчает чтение программного кода,
▪ инструкции if могут следовать в любой последовательности, что уменьшает количество ошибок.
Имеется существенный недостаток, присущий данному способу, который состоит в том, что всегда выполняются все проверки. Это является существенным ограничением при практическом применении данного метода.
Отмеченный недостаток можно устранить, объединив сокращённые формы инструкции if в одну инструкцию if. Для этого необходимо между сокращёнными инструкциями записать зарезервированное слово else. При этом полученное выше решение приобретёт следующий вид
if(x <= 0) y = 0; else if(x > 0 && x <= 5) y = 2 * x; else if(x > 5 && x <= 10) y = x + 5; else if(x > 10) y = -3 * x + 45;
Отметим, что полученное решение совпадает со вторым решением, которое приведено в п. 2.2.2.2. Следует отметить, что указанное решение получено совсем из других соображений.
