
- •Списки §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
Директивы #ifdef и #ifndef.
Другой метод условной компиляции заключается в использовании директив #ifdef и #ifndef. Стандартный их вид следующий:
#ifdef имя_макроса
последовательность операторов
#endif
или
#ifndef имя_макроса
последовательность операторов
#endif
В первом варианте, если имя макроса определено ранее директивой #define, то последовательность операторов, стоящих между #ifdef и #endif, будет компилироваться. Во втором варианте последовательность операторов будет компилироваться., если указанный макрос не определён. Для этих директив также можно использовать #else, но не #elif. Их можно вкладывать друг в друга.
Пример.
#define M 10
…
#ifdef M
…
cout<<”Макрос М определён”;
#else
…
cout<<”Макрос М не определён”;
#endif
Так как макрос M определён, то компилироваться будет первый блок.
Существует ещё один способ узнать, определён ли макрос. В сочетании с директивой #if можно использовать следующий оператор времени компиляции:
defined имя_макроса
Если имя_макроса определено, то выражение станет истинным, в противном случае будет ложным. Например, для проверки, определён ли макрос М, можно записать
#if defined M
…
#endif
И если он определён, то операторы, записанные под #if, будут компилироваться. Перед defined можно поместить операцию отрицания, например,
#if !defined M
…
#endif
Фрагмент под #if будет компилироваться, только если макрос М не определён.
Упражнения, тесты
Дан код:
#define MACR(x) (x%10+5) //1
int k=39; printf(“%d”, MACR(k+1)); //2
Что будет выведено?
Варианты ответов:
5; 2) 45 ; 3) 44 ; 4) 9; 5) Ошибка в //1; 6) Ошибка в //2.
Дан код:
#define writeln(v) //1
#int k=40; //2
cout<<(#v)<<” “<<k; //3
writeln (k); //4
В каких строках есть ошибки. Что будет выведено, если исправить ошибки?
Дан код:
#define ONE 1 //1
# if ONE>1 //2
cout<<ONE; //3
#undef ONE //4
#endif //5
#ifdef ONE //6
#define TWO 2 //7
#else //8
#define TWO 22 //9
cout<<” “<<TWO; //10
#endif //11
Что будет выведено?
Варианты ответов:
1) 1 2 2) 1 22 3) 2 4) 22 5) ошибка (указать, в какой (//1 — //11)строке (строках))
Выберите номера правильных утверждений:
Подключаемый с помощью директивы компиляции #include файл обязательно должен быть оформлен по правилам записи функций.
В подключаемом с помощью директивы компиляции #include файле могут быть только объявления переменных. Никакие выполняемые операторы в таком файле не должны быть.
В подключаемом с помощью директивы компиляции #include файле может быть любая часть программы, не обязательно оформленная в виде функции.
В подключаемом с помощью директивы компиляции #include файле могут быть только директивы компиляции. Объявления переменных и выполняемые операторы в таком файле не должны быть.
В подключаемом с помощью директивы компиляции #include файле можно записать только прототипы функций, а их тексты записываем в основном файле.
Даны следующие директивы компиляции:
#include “myfile.h” //1
#include <stdio> //2
#define IncFile “AddFile1.h” //3
#include IncFile //4
В каких из них есть ошибки? Чем отличается подключение указанных здесь файлов?
6.1.Дан код:
#define c 2 //1
int k=5; //2
#if k>5 //3
cout<< c <<”Yes”; //4
#else cout<<”No”; //5
#endif //6
В каких строках (//1 — //6) есть ошибки? Объяснить их. Если ошибок нет, что будет выведено?
6.2. Сравните приведенный выше код со следующим:
const c=2; //1
int k=5; //2
if k>5 //3
cout<< c <<”Yes”; //4
else cout<<”No”; //5
endif //6
В каких строках (//1 — //6) есть ошибки? Объяснить их. Если ошибок нет, что будет выведено?
Дан код:
#define N 10 //1
#ifndef N //2
#define N 20 //3
cout<< N ; //4
#endif //5
cout<<” “<<N; //6
Что будет выведено?
Варианты ответов:
1) 10 2) 20 3) 10 10 4) 20 20 5)10 20 6) 20 20
7) ошибка (указать, в какой (//1 — //6)строке (строках))
Дан код:
#define N 10 //1
#define K 20 //2
#if !defined(N) //3
#define N 40 //4
cout<< N <<” “<<K; //5
#elif K<50 //6
cout<<” “<<(N+K); //7
#else //8
cout<<” “<<(N-K); //9
#endif //10
cout<<” “<<N; //11
Что будет выведено?
Варианты ответов:
1) 30 2) 60 3) 10 40 4) -10 5) 20 6) 40 20 60 10 7) 30 10
Г л а в а 8