- •Списки §1. Общие сведения о списках
- •§2. Создание списка
- •§3. Просмотр и анализ списка
- •3.1. Просмотр и анализ списка целых чисел.
- •3.2. Просмотр и анализ списка одномерных массивов.
- •§6. Сравнительный анализ списков.
- •§1. Порядок работы с файлом
- •1.1. Потоки и файлы
- •1.2. Объявление файла
- •1.3. Открытие файла.
- •1.4. Закрытие файла.
- •§2. Работа с текстовым файлом
- •2.1. Посимвольная работа с текстовым файлом
- •Int fputc(int ch, file *stream)
- •2.2. Построчная работа с текстовым файлом
- •§3. Функции блокового ввода/вывода
- •3.1. Экономические задачи с использованием файлов
- •3.2. Математические задачи с использованием файлов
- •§4. Прямой (произвольный) доступ к файлу
- •4.1. Функция fseek()
- •4.2. Замена записи. Функции ftell, fgetpos, fsetpos, rewind.
- •Пример. В файл записать координаты точек плоскости. Найти две (любые) точки с наибольшим расстоянием между ними. Массив для хранения координат всех точек не использовать.
- •Упражнения, тесты.
- •Функции (дополнительные возможности)
- •§1. Функции с переменным количеством параметров.
- •§2. Указатели на функции.
- •§3. Массив указателей на функции.
- •§4. Введение в рекурсивные функции.
- •Упражнения, тесты.
- •Void Fun1 (float); void Fun2(float); void Fun3(float);
- •Лабораторная работа № 12.
- •Команды препроцессора (директивы компиляции)
- •§1. Директива define (замены в тексте)
- •Простое макроопределение (макрос)
- •Макрос с аргументами.
- •Директива #undef.
- •§2. Директива #include (включение файлов).
- •§3. Директивы условной компиляции.
- •Директива #if.
- •Директивы #ifdef и #ifndef.
- •Упражнения, тесты
- •История развития технологий программирования
- •§1. Программирование в машинных кодах и на языках символического кодирования
- •§2. Языки высокого уровня. Структурное и модульное программирование
- •§3. Интегрированные системы программирования.
- •§4. История и идеи объектно-ориентированного программирования.
- •§5. Программирование для Windows. Визуальное программирование.
- •Литература
- •Оглавление Предисловие………………………………………………………….…………………3
- •Г л а в а 4. Структуры и другие типы, определяемые пользователем.84
- •Г л а в а 6. Файлы ………………………………………………………..154
- •Г л а в а 7. Функции (дополнительные возможности) ………………190
- •Г л а в а 9. История развития технологий программирования ……220
§3. Директивы условной компиляции.
Существует несколько директив, которые в зависимости от условия включают или не включают строки в текст программы для дальнейшей её компиляции. Этот процесс называется условной компиляцией и используется для подготовки различных версий одной и той же программы.
Директива #if.
Первая (сокращённая) форма директивы #if в общем виде записывается так:
#if константное_выражение
последовательность операторов ( блок 1)
#endif
Выражение, записанное в директиве #if, вычисляется на этапе компиляции, а не во время выполнения, как в обычном операторе if. Поэтому оно должно быть составлено из констант и макроимён, определённых с помощью директивы define, и не должно содержать переменных. Если выражение истинно (отлично от нуля), то строки, записанные между #if и #endif остаются в тексте программы и затем будут компилироваться, а #if и #endif исключаются из текста. В противном случае, если значение выражения false (равно нулю), то последовательность опереаторов исключается вместе с #if и #endif из текста программы и не будет компилироваться. Например,
#define MAX 50
… /* здесь размещаются некоторые операторы */
#if MAX>100
cout<<” This text is compiled”;
… /* Здесь могут быть другие операторы */
#endif
… /* Здесь программа продолжается */
В результате препроцессорной обработки оператор
cout<<” This text is compiled”;
и, возможно, записанные в этом блоке другие операторы, не включаются в программу и компилироваться не будут, так как условие 50>100 ложно. Если значение макроса MAX изменить, например,
#define MAX 150,
то оператор вывода будет включён для компиляции, так как 150>100.
Вторая ( полная) форма директивы #if в общем виде записывается так:
#if константное_выражение
последовательность операторов ( блок1)
#else
последовательность операторов ( блок2)
#endif
По аналогии с полной формой обычного оператора if в зависимости от значения константного выражения в компилируемую программу будет включён блок1 или блок2.
Для построения конструкции с вложенной директивой #if (лесенки if-else-if) используется директива #elif:
#if константное_выражение1
последовательность операторов ( блок1)
#elif константное_выражение2
последовательность операторов ( блок2)
#elif константное_выражение3
последовательность операторов ( блок3)
…
#elif константное_выражениеN
последовательность операторов ( блокN)
#else
последовательность операторов ( блок(N+1))
#endif
Если истинно i-е константное выражение, то для компиляции включается i-й блок, и остальные выражения не проверяются. В противном случае вычисляется и проверяется следующее выражение. Если все выражения ложны, то используется (N+1)-й блок, если есть директива #else. Если #else отсутствует, то в случае ложности всех выражений ни один из блоков в компиляции не участвует.
Как и для оператора if, возможны другие вложенные конструкции директивы #if, например, в качестве любого из блоков может быть полная или сокращённая форма директивы #if.
Упражнение. Привести пример полной формы директивы #if и вложенной директивы #if.