- •Часть 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. Основы программирования на языке Си
- •Литература
1.24.2. Вложенные инструкции if
Внутри каждой из ветвей инструкции if else может быть расположена другая инструкция if. Такие инструкции называются вложенными. Следует отметить, что большая глубина вложенности может приводить к ухудшению читабельности программы. Кроме того, может появиться специальная проблема, называемая проблемой висячего else. Такая проблема имеется, например, в инструкции if, структура которой приведена ниже.
if(выр1) if(выр2) инструкция1 else
инструкция2
При чтении приведенной выше конструкции возникает проблема, состоящая в том, что необходимо определить к какой из двух инструкций if единственное зарезервированное слово else. Иными словами, необходимо выяснить внешняя или внутренняя инструкция if является сокращенной. Эта проблема в языке Си решается следующим образом. Компилятор всегда относит слово else к ближайшему слову if, для которого еще нет ветви else. Учитывая все изложенное, можно сделать вывод о том, что в приведенном примере внешняя инструкция if является сокращенной, а внутренняя – полной.
Для регулирования структуры вложенных инструкций if следует использовать фигурные скобки. Ниже приводится переработанный вариант использования вложенных инструкций if, приведенных выше.
if(выр1) { if(выр2) инструкция1 } else инструкция2
В новой инструкции if внешняя инструкция является полной, а внутренняя – сокращенной.
1.25. Инструкция switch
Инструкция switch, иногда называемая переключателем, предназначена для организации многовариантного разветвления.
1.25.1. Синтаксис инструкции switch
Инструкция switch может иметь сложную структуру. На самом верхнем уровне рассматриваемая инструкция состоит из двух конструктивных частей:
● Заголовок.
● Тело.
Заголовок инструкции switch имеет следующий формат:
switch(выр)
Здесь switch – зарезервированное слово, выр – выражение целого типа.
Телом может быть единственная инструкция языка Си, в качестве которой обычно используется составная инструкция.
Инструкции, входящие в состав тела переключателя switch, могут быть помеченными специальными метками. Метка отделяется от помечаемой ею инструкции двоеточием. В теле инструкции switch используются метки двух видов:
● label_case.
● label_default.
Метка вида label_case состоит из двух частей:
● зарезервированное слово case.
● Константное выражение целого типа.
Метка вида label_default состоит из одного зарезервированного слова default.
Выражение выр, входящее в состав заголовка инструкции switch, играет роль своеобразного селектора, выбирающего требуемую метку внутри тела переключателя. Дело заключается в том, что значение этого выражения определяет метку той инструкции, с которой должно начинаться выполнение тела переключателя.
Опишем более детально процесс выполнения инструкции switch.
1. Вычисляется значение выражения выр, входящего в состав заголовка.
2. Если значение выражения выр совпадает со значением константного выражения одной из меток case, то управление передается инструкции тела, которая помечена этой меткой, а затем будут выполняться последовательно все оставшиеся инструкции тела переключателя.
3. Если значение выражения выр не совпадает со значением константного выражения ни одной метки, но имеется инструкция, помеченная меткой default, то управление передается инструкции, помеченной этой меткой.
4. Если значение выражения выр не совпадает со значением константного выражения ни одной метки и отсутствует инструкция, помеченная меткой default, то выполнение инструкции switch на этом заканчивается и управление передается инструкции, расположенной непосредственно за инструкцией switch.
