
- •Алфавит языка Си
- •Идентификаторы (имена) языка Си
- •Ключевые слова
- •Константы (литералы)
- •Комментарии
- •Пример программы на Си
- •Последовательность обработки программы на Си
- •Термины
- •2.1. Концепция типа данных
- •2.2. Базовые типы данных
- •2.2. Атрибуты объектов
- •2.2.1. Класс памяти
- •2.2.2. Область (сфера) действия, связанного с объектом идентификатора
- •2.2.3. Область видимости объекта
- •2.2.4. Продолжительность существования объекта (время жизни)
- •2.2.5. Тип компоновки (связывания)
- •2.3. Объявления, определения и описания в языке Си
- •2.4. Объявления переменных стандартных типов
- •2.5. Преобразования типов
- •Термины
- •3.1. Определение и общая классификация операторов
- •3.2. Последовательно выполняемые операторы
- •3.3. Операции языка Си
- •3.4. Приоритеты и порядок выполнения операций, тип результата выражения
- •Тип результата выражения арифметической бинарной операции
- •Даны X, y (значения вводятся с клавиатуры). Вычислить a, если
- •Термины
- •4.1. Условный оператор
- •4.2. Переключатель
- •4.3. Операторы циклов
- •4.4. Оператор безусловной передачи управления
- •4.5. Оператор возврата из функции
- •4.6. Оператор выхода из цикла или переключателя
- •4.7. Оператор перехода к следующей итерации цикла
- •Термины
- •5.1. Указатели
- •5.2. Ссылки
- •5.3. Массивы
- •5.3.1. Одномерные массивы
- •Int a[100]; // Объявление массива из 100 элементов типа int
- •Инициализация массива
- •Массивы и указатели
- •Динамические массивы
- •5.3.2. Многомерные массивы
- •Инициализация многомерных массивов
- •Динамические многомерные массивы
- •Указатель на массив указателей и указатель на массив
- •Int ** p1; // Указатель на массив указателей
- •Int (*p2)[10]; // Указатель на массив из 10 элементов типа int
- •Термины
- •6.1. Структуры
- •Int X; // Поле структуры
- •Int X; // Поле структуры
- •Int X; // Поле структуры
- •Инициализация структуры
- •Int year, page; // Год издания и число страниц
- •6.2. Объединения
- •6.3. Битовые поля структур и объединений
- •Int a1: 10; // Битовое поле из 10 бит
- •Int a2: 14; // Битовое поле из 14 бит
- •Int :6; // Пропускаем 6 бит
- •6.4. Директива определения типа typedef
- •Термины
- •7.1. Определение, описание и вызов функции
- •7.2. Использование значений параметров по умолчанию
- •7.3. Изменение значений скалярных параметров в функциях
- •7.3.1. Передача параметров в функции по значению
- •7.3.1. Передача параметров в функции по указателю (по ссылке)
- •7.4. Передача в функцию массивов
- •7.4.1. Передача в функцию массивов, не являющихся строками
- •7.4.2. Передача в функцию строк
- •7.5. Функции с переменным количеством параметров
- •7.6. Рекурсивные функции
- •7.7. Подставляемые (inline) функции
- •7.8. Указатели на функции
- •7.10. Шаблоны функций
- •7.11. Возможные параметры функции main
- •Термины
- •8.1. Общие сведения о вводе-выводе
- •8.2. Стандартные потоки ввода-вывода
- •8.3. Функции для вывода в поток stdout
- •8.4. Функции для считывания из потока stdin
- •8.5. Ввод- вывод в файлы Открытие файла
- •Закрытие файла
- •Определение конца файла
- •Функции записи в файл
- •Функции чтения из файла
- •Функции позицирования в файлах
- •Функции для сброса буферов
- •Термины
- •9.1. Стадии и основные команды препроцессорной обработки
- •9.2. Замены в тексте
- •9.3. Макроподстановки
- •9.4. Включение текстов из файлов
- •9.5. Условная компиляция
- •9.6. Директива нумерации строк
- •9.7. Директива обработки ошибок
- •9.8. Директивы # и ##
- •9.9. Заранее определенные препроцессорные идентификаторы
- •9.10. Указания компилятору
- •Термины
Термины
Оператор – это языковая конструкция, представляющая шаг из последовательности действий или описаний (оператор задает законченное описание некоторого действия), оператор всегда завершается «;», за исключение составного оператора или блока. (Элементы заголовка цикла for, после которых ставится «;» оператором считать не будем).
Под операцией будем понимать некоторое действие, выполняемое над операндами (аргументами операции), результат операции всегда некоторое значение определенного типа, которое может быть использовано справа от операции присваивания (может быть присвоено некоторому объекту).
Оператор – выражение строится из операндов и знаков операций, выражение задает правило вычисления некоторого значения.
Составной оператор – это последовательность операторов, заключенных в фигурные скобки { }.
L-значение (L- value) (леводопустимое значение, может быть использовано слева от операции присваивания) - любое выражение, адресующее некоторый участок памяти, в который можно занести значение.
Ассоциативность - порядок выполнения операции в выражении, бывают право ассоциативные операции, выполняются в выражении справа налево и лево ассоциативные операции, выполняются в выражении слева направо.
Лекция 4. Управляющие операторы
4.1. Условный оператор
Условный оператор служит для бинарного ветвления фрагмента исходного кода программы, в зависимости от условия («истина» или «ложь») выполняется или один фрагмент кода (оператор) или другой фрагмент кода (оператор).
Формат условного оператора:
if (<выражение>) <оператор1>
[ else <оператор2> ]
Примечание. Далее при записи форматов различных конструкций примем следующие обозначения: оператор или выражение заключаем в скобки <>, точка с запятой («;») после оператора при описании формата не ставится, так как считается, что она входит в состав оператора, или это составной оператор (блок), а элемент, заключенный в квадратные скобки [] (за исключением использования массивов), считается необязательным, т.е. может отсутствовать.
Тип выражения должен быть любым типом, заменяющий логический тип (целым, вещественным, указателем), если значение выражение равно 0, то оно считается ложным, в противном случае, истинным.
Пример:
if (x>=0) y=x; else y=-x; // Переменной y присваивается значение модуля x
Если необходимо объединить несколько операторов, то они объединяются в составной оператор (блок).
Пример:
if (x>0) { y=x; z=x+y; }
else { y=-x; z=x*x+y*y; }
Условный оператор может быть неполным, часть, начинающаяся с else, отсутствует. В этом случае в зависимости от условия или выполняется оператор после if или он не выполняется.
Представляют интерес вложенные условные операторы. Рассмотрим пример:
if (x==1) if (y==1) printf(“x==1 and y==1”);
else printf(“x==1 and y!=1”);
В этом примере ключевое слово else относится ко второму if, первый оператор if является не полным. Следует отметить, что условный оператор if … else … считается одним оператором, он может быть сам внутри условного оператора или быть внутри тела цикла. Правило, позволяющее найти соответствие между if и else в случае вложенных условных операторов, следующее: ищем первое ключевое слово else, оно относится к ближайшему if, которое предшествует ему, ко второму else относится if, которое предшествует отмеченному ранее if и т.д.
Если требуется изменить описанный порядок соответствия if и else при вложенных условных операторах, то с помощью фигурных скобок необходимо организовать составной оператор. В примере:
if (x==1) { if (y==1) printf(“x==1 and y==1”); }
else printf(“x!=1”);
ключевое слово else относится к первому if, второй оператор if является не полным, поэтому после else печатаем x не равно 1, а значение переменной y может быть любым.