- •Санкт-Петербургский
- •Структура программы на языке Си
- •Структура простейшей одномодульной программы
- •Комментарии в программе на языке Си
- •Начальные сведения о препроцессоре
- •Определение функции main().
- •Пример простейшей программы
- •Алфавит, синтаксис и семантика
- •Алфавит языка Си
- •Понятие о типе
- •Система типов языка Си Система типов языка Си
- •Понятие об объекте
- •Лексемы
- •Зарезервированные слова
- •Идентификаторы
- •Литералы
- •Целочисленные литералы
- •Литерал вещественного типа
- •Символьные литералы
- •Строковый литерал
- •Переменные
- •Символические константы в языке Си
- •Операторы, выражения и инструкции. Общие сведения.
- •Классификация операторов
- •Приоритет и ассоциативность операторов.
- •Побочные эффекты и вычисления выражений
- •Порядок вычисления выражений
- •Арифметические операторы и выражения
- •Унарные операторы
- •Бинарные операторы
- •Преобразования типа при выполнении бинарных операторов
- •Автоматическое преобразование типов
- •Явное преобразование типа
- •Математические функции
- •Оператор присваивания и инструкция присваивания
- •Простой оператор присваивания
- •.Множественное присваивание
- •Составной оператор присваивания
- •Преобразование типа при присваивании
- •Начальные сведения об указателях. Выходные параметры функции
- •Принятие решений и логические величины. Операторы отношения и сравнения на равенство
- •Логические операторы
- •Поразрядные операторы
- •Условные выражения (оператор ?:)
- •Оператор запятая
- •Оператор sizeof
- •Составная инструкция
- •Инструкция ifelse
- •Полная и сокращенная формы инструкции if
- •Вложенные инструкции if
- •Инструкция switch
- •Синтаксис инструкции switch
- •1.25.2. Использование инструкции switch
- •Функциональные компоненты цикла
- •Арифметические и итерационные циклы
- •Задачи, приводящие к арифметическим циклам
- •Задачи, приводящие к итерационным циклам
- •Циклические управляющие инструкции
- •Цикл, управляемый инструкцией for
- •Цикл, управляемый инструкцией while
- •Цикл, управляемый инструкцией do … while
- •Цикл с выходом
- •Вложенные циклы
- •Понятие о варианте и инварианте цикла
- •Объявления и определения (расширенное рассмотрение)
- •Спецификаторы объявления
- •Спецификаторы класса памяти.
- •Квалификаторы типа
- •Спецификаторы типа
- •Использование спецификаторов
- •Описатели
- •Использование зарезервированного слова typedefдля объявления синонимов типов
- •Функции
- •Понятие об абстракции и инкапсуляции
- •Функция языка Си и процедурная абстракция
- •Понятие о функции
- •Назначение функций
- •Определение функции
- •Функции, возвращающие и невозвращающие значение
- •Вызов функции. Передача параметров по значению
- •Внешние переменные и процедурная абстракция
- •Понятие о прототипе. Компиляция
- •Старый стиль определения функции
- •Массивы в стиле языка с89
- •Определение и объявление массивов
- •Определение и объявление одномерных массивов. Иницициализация одномерных массивов при их определении. Доступ к элементам массива.
- •Определение и инициализация двумерных массивов
- •Операции с массивами
- •Размещение массивов в оперативной памяти
- •Указатели
- •Операторы разыменования и взятия адреса
- •Области применения указателей
- •Нулевой указатель
- •Определение указателя
- •Недействительный указатель
- •Операции с указателями
- •Дополнительные сведения о разыменовании указателей
- •Присваивание указателей
- •Операция взятия адреса для указателя. Указатели на указатели
- •Указатели и операция индексирования
- •Арифметические операции с указателями
- •Сравнение указателей
- •Указатели и динамическая память
- •Функция malloc
- •Функция calloc
- •Функция realloc
- •Функция free
- •Указатели – параметры функций. Имитация передачи по ссылке
- •Указатели на функцию
- •Инициализация указателя на функцию
- •Операции с указателями на функцию
- •Табулирование произвольной функции одного переменного
- •Использование стандартной функции qsort
- •Указатели и массивы
- •Строковый литерал
- •Символические строковые константы
- •Строковые переменные
- •Инициализация строковых переменных
- •Операции со строковыми переменными
- •Ввод строк
- •Функция scanf()
- •Опасная функция gets()
- •Использование функции fgets()
- •Вывод строк
- •Функция printf()
- •Функция puts()
- •Функция fputs()
- •Библиотечные функции для обработки строк
- •Функция strlen()
- •Функции strcpy()иstrncpy()
- •Функции strcat() иstrncat()
- •Функция strcmp()
- •Массивы строк
- •Структуры
- •Объявление структур
- •Обращение к полям структуры
- •Инициализация структур
- •Операции над структурами
- •Массивы структур
- •Объявление массива структур
- •Идентификация элементов массива структур
- •Работа с внешними устройствами
- •Понятие потока
- •Текстовый поток
- •Двоичный поток
- •Указатель файла
- •Функция fopen()
- •Функция fclose()
- •Построковый ввод – вывод
- •Блоковый ввод – вывод
- •Примеры решенных задач
- •Прямой доступ к файлу
- •Функция fseek()
Вложенные инструкции if
Внутри каждой из ветвей инструкции if elseможет быть расположена другая инструкцияif. Такие инструкции называются вложенными. Следует отметить, что большая глубина вложенности может приводить к ухудшению читабельности программы. Кроме того, может появиться специальная проблема, называемая проблемой висячегоelse. Такая проблема имеется, например, в инструкцииif, структура которой приведена ниже.
if(выр1)if(выр2)инструкция1else
инструкция2
При чтении приведенной выше конструкции возникает проблема, состоящая в том, что необходимо определить к какой из двух инструкций ifединственное зарезервированное словоelse. Иными словами, необходимо выяснить внешняя или внутренняя инструкцияifявляется сокращенной. Эта проблема в языке Си решается следующим образом. Компилятор всегда относит словоelseк ближайшему словуif, для которого еще нет ветвиelse. Учитывая все изложенное, можно сделать вывод о том, что в приведенном примере внешняя инструкцияifявляется сокращенной, а внутренняя – полной.
Для регулирования структуры вложенных инструкций ifследует использовать фигурные скобки. Ниже приводится переработанный вариант использования вложенных инструкцийif, приведенных выше.
if(выр1) {if(выр2)инструкция1}elseинструкция2
В новой инструкции ifвнешняя инструкция является полной, а внутренняя – сокращенной.
Инструкция switch
Инструкция switch, иногда называемая переключателем, предназначена для организации многовариантного разветвления.
Синтаксис инструкции 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.