
- •Санкт-Петербургский
- •Структура программы на языке Си
- •Структура простейшей одномодульной программы
- •Комментарии в программе на языке Си
- •Начальные сведения о препроцессоре
- •Определение функции 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()
Символические константы в языке Си
Символическая константа – это константа, которой в программе назначено некоторое имя. Применение символических констант вместо явных констант повышает читабельность программы и облегчает внесение в нее изменений. Одно из правил хорошего стиля программирования требует, чтобы в программе не было так называемых “магических чисел”. Под магическими числами понимаются конкретные числовые значения. Сложность работы с “магическими числами” заключается в отсутствии у них семантики. Символическая константа наделяет конкретное значение определенной семантикой, что и способствует повышению читабельности программы. В языке Си имеются три способа представления символических констант, в которых предусматривается использование соответственно:
● директивы препроцессора define.
● зарезервированного слова const.
● констант перечисления.
Приведем пример объявления символических констант.
#define PI 3.14159 const int BirthDay = 1964;enum{MaxSize = 100};
Более предпочтительным способом определения символических констант является способ, основанный на применении зарезервированного слова const. Это обусловлено тем обстоятельством, что при использовании этого способа работает аппарат контроля типов.
Имеется один недостаток, связанный с использование определения символических констант с помощью зарезервированного слова const. Дело в том, что символическую константу, определенную таким образом нельзя использовать при определении размера массивов. В этом случае можно воспользоваться константами перечисления (массивы будут рассматриваться во второй части пособия).
Операторы, выражения и инструкции. Общие сведения.
При программировании на языке Си необходимо различать следующие программные элементы:
● операторы,
● выражения,
● инструкции.
Операторы (operators) предназначены для выполнения некоторых элементарных действий. Например, в языке Си имеется оператор сложения ( + ), предназначенный для сложения двух чисел.
Выражение (expression) – конструкция языка, используемая для вычисления одного значения или (и) достижения побочного эффекта (side effect). О побочных эффектах при вычислении выражений см. п. 1.14.3. Выражения строятся из операндов, операторов и круглых скобок. В качестве операндов могут выступать константы, переменные, вызовы функций и выражения в круглых скобках. Литерал и переменную можно рассматривать как частный случай выражения. Пусть, например, имеется следующая синтаксическая конструкция:
3 + 5
Это пример простейшего выражения, в котором используется упоминавшийся выше оператор сложения.
Инструкция (statement) – это отдельное предложение языка Си, предписывающее компилятору выполнить некоторые действия. К числу инструкций относятся такие управляющие конструкции, как if,forи т. д. Важно отметить, что в языке Си имеется тесная связь между выражениями и инструкциями. Дело в том, что любое выражение, после которого поставлена точка с запятой, становится инструкцией. Такой вид инструкции называется инструкцией – выражением. Приведем пример. Пусть a, b и y – переменные типаdouble. Тогда следующая синтаксическая конструкция является выражением:
y = a * b
В этом выражении используются два оператора. Первым из них является оператор присваивания (=), а вторым - оператор умножения (*). Если теперь в конце этого выражения поставить точку с запятой, то получим инструкцию присваивания:
y = a * b;
В настоящем разделе основное внимание будет уделено операторам и выражениям.