- •Языки программирования. Классификация. Яп Си. Место Си в различных классификациях. Преимущества и недостатки.
- •2 Базовые конструкции яп. 3 вида констант *целочисленные, действительные, строковые). Правило составления идентификатора. Зарезервированные слова.
- •Константы
- •3 Общая структура программы на Си. Понятие функции. Функция main. Лексема.
- •Int main() // главная функция
- •5. Схема создания исполняемой программы
- •6. Понятие типа данных. Базовые типы данных языка Си и их характеристика.
- •7. Размещение программы в памяти. 4 цели использования памяти. 6 моделей памяти
- •8 Понятие переменной и 3 ее характеристики. Статические и динамические переменные. Операция присваивания.. Область действия переменной.
- •10 Внешняя память. Понятие глобальной и локальной переменной. Объявление с различными классами памяти.
- •11 Функции. Определение. Имя функции. Независимость. Возвращаемое значение. Прототип. Синтаксис прототипа функции. Оператор return.
- •Int func(int, double, int); // описание прототипа функции
- •12 Структурное программирование. Преимущества структурного программирования. Обработка вызова функции.
- •13 Различия между аргументами и параметрами функции. Передача в функцию адресов переменных.
- •14 Идентификатор, объявленный как функция. Правила определения области видимости функции. Формат вызова функции.
- •16 Понятие массива. Объявление массива. Случаи, в которых константное выражение может быть опущено. Сечение массива.
- •17 Пример объявления символьного массива. Вычисление адреса элемента массива. Связь между массивами и указателями.
- •19 Массивы указателей типа char(указатели и строки). Инициализация символьных массивов. Действия оператора «*».
- •20 Указатели на функцию. Объявление. Инициализация и использование указателя на функцию.
- •21 Передача указателя как аргумента в функцию. Встраиваемые функции. Ключевое слово inline.
- •22 Передача массивов в функцию (2 способа).
- •23 Функции с переменным числом параметров. Подключение stdarg.H. Средства работы и макросы
- •Va_start (ptr, последний_явный_параметр);
- •24 Массивы и динамическая память. Функции malloc, calloc, realloc, free- прототипы и краткий анализ.
- •25 Структуры. Понятие. Объявление. Определение. Обращение к полям структуры.
- •26 Сложные структуры. Структуры, содержащие массивы
- •28 Структуры и указатели. Указатели, как поля структур. Создание указателей на структуры. Указатели и массивы структур. Передача структур в функции.
- •29 Объединения. Определение. Создание. Инициализация. Обращение к отдельным объектам объединения. Создание структурных типов с помощью спецификатора typedef.
- •30 Создание динамически связанных структурных типов. Линейный список. Двусвязный список.
- •31 Потоки ввода-вывода. Понятие потока. Текстовые и двоичные потоки. Стандартные потоки.
- •32 Файлы. Имена файлов. Открытие файла. Ситуации, считающиеся ошибочными, в результате которых функция возвращает значение 0.
29 Объединения. Определение. Создание. Инициализация. Обращение к отдельным объектам объединения. Создание структурных типов с помощью спецификатора typedef.
Объединение — это переменная, которая может содержать объекты различных типов и размеров. Все требования относительно размеров и выравнивания выполняет компилятор. Объединение можно инициализировать только один значением, причем оно должно соответствовать первому элементу этого объединения. У нас первым элементом расположено поле int, поэтому при инициализации так же должно быть поле int. Объявление объединения (начинается с ключевого слова union) похоже на объявление структуры и в общем виде выглядит так:
union тег {
тип имя-члена;
тип имя-члена;
тип имя-члена;
} переменные-этого-объединения;
Объединения (union)
Внешне похожи на структуры
union box
{ int i;
char c;
long l; ... }
Всё вышеперечисленное для структур справедливо и для объединений. Но для обращение к полю каждый раз доступен только один элемент. Памяти под структуру выделяется столько, сколько занимает самый большой её элемент.
30 Создание динамически связанных структурных типов. Линейный список. Двусвязный список.
31 Потоки ввода-вывода. Понятие потока. Текстовые и двоичные потоки. Стандартные потоки.
Потоки ввода-вывода
Процесс перемещения данных с внешних носителей в оперативную память называется вводом данных, а из памяти на внешние носители – выводом.
Поток – последовательность байт данных. Поток байт, принимаемый программой, называется потоком ввода, а поток, посылаемый программой на устройство, называется потоком вывода. Основное преимущество работы с потоками состоит в том, что потоки являются независимыми от устройства. Программа рассматривает ввод-вывод как работу с непрерывным потоком байт, независимо от их происхождения или места назначения. Каждый поток в C связан с файлом. В этом смысле термин «файл» ассоциируется с различными устройствами и не относится только к файлам, хранящимся на диске.
Файл понимают как промежуточный объект между потоком и реальным физ. устройством, выполняющим ввод-вывод данных. В C не приходится беспокоиться о деталях работы с файлами, т.к. автоматическое взаимодействие между потоками, файлами и устройствами обеспечивают библиотечные функции C и операционная система.
Потоки бывают двух видов: текстовые и двоичные.
Двоичные и текстовые режимы доступа к файлам
Для стандартных и системных функций ввода-вывода возможны два режима доступа к файлам — текстовый и двоичный.
При осуществлении операции ввода-вывода в текстовом режиме
1. При записи информации в файл символ новой строки преобразуется в пару символов CR и LF. При чтении из файла эта пара символов преобразуется обратно в символ \n. В конце файла записывается EOF (0x1A). При считывании информации прочитать находящуюся после EOF не удаётся.
При выполнении ввода-вывода в двоичном режиме никакого преобразования символов не происходит и все остальные рассматриваются как не имеющие особого значения символы.
Открытие и закрытие потоков
Функции работы с файлами определены в заголовочном файле stdio.h
Указатель на поток
FILE *fp;
Открытие файла
fp=fopen(имя_файла, режим_открытия);