
- •Списки §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
Упражнения, тесты.
Дан прототип функции:
float FunSum(float a, float b, float h, float (*F)(float)); //1
и вещественная функция одной переменной:
float Fun1(float x) {return x/(1+x*x*x); }
Какие из следующих вызовов функции FunSum синтаксически правильные?
float S; S=FunSum(-1, 1, 0.1, Fun1);
float S; S=FunSum(-1, 1, 0.1, Fun1(x));
float a=-1., b=1., h=0.1; cout<<FunSum(a, b, h, Fun1);
float f=Fun1(x); cout<<FunSum(-1, 1, 0.1, f);
float f; f=Fun1(x); cout<<FunSum(-1, 1, 0.1, &f);
ошибка в прототипе функции, то есть в //1.
Дан прототип функции:
float FunSum(float a, float b, float h, float (*F)(float)); //1
Какие из следующих вызовов функции F из FunSum правильные?
float S, x; S=F(x);
float S, x; S=*F(x);
float S, x; S=(*F)(x);
float S, x; S=(*F(x));
float x; F(x);
float x; *F(x);
float x; (* F)(x);
float x; (* F(x));
float S, x; S=(*F)(x);
float S, x; S=(&F)(x);
3. В каком из следующих вариантов объявлен указатель на функцию с двумя параметрами (строка и целое число) и возвращающей один символ?
char *PFun2 (char *, int);
char (*PFun2) (char *, int );
char *PFun2 (char t[] , int k);
char (*PFun2) (char *t , int k);
char (*PFun2) (char t[], int k);
char *(*PFun2) (char t[], int);
char *(*PFun2) (char *, int);
char PFun2 (char *, int);
4. Дано следующее объявление: char *(*PFun2) (char *, int); Что объявлено?
Варианты ответов:
Указатель на функцию с параметрами типа строка и типа int, возвращающую значение типа указатель на char, то есть строку.
Указатель на функцию с параметрами типа строка и типа int, возвращающую один символ.
Указатель на функцию, параметрами которой являются символ и целое число и возвращающей значение типа указатель на char, то есть строку.
Функция с параметрами типа строка и типа int, возвращающая значение типа указатель на char, то есть строку.
Указатель на указатель на функцию с параметрами типа строка и типа int, возвращающую один символ.
5. Даны прототипы следующих трёх функций:
Void Fun1 (float); void Fun2(float); void Fun3(float);
В каком из вариантов правильно объявлен и проинициализирован статический массив указателей на функции (размерность — константа)?
const n=3; void (*far[n])( float)= { Fun1, Fun2, Fun3 };
const n=3; void (*far)( float) [n]= { Fun1, Fun2, Fun3 };
const n=3; void *far[n]( float)= { Fun1, Fun2, Fun3 };
void (*far[3])( float t); far[0]= Fun1; far[1]= Fun2; far[2]= Fun3 ;
const n=3; void (*far[n])( float t)= { Fun1(t), Fun2(t), Fun3(t) };
void (*far[3])( float t); far[0]= Fun1(t); far[1]= Fun2(t);
far[2]= Fun3(t) ;
const n=3; float (*far[n])( float)= { Fun1, Fun2, Fun3 };
6. Даны тексты двух функций
double MyExp (double x) { return (exp(x)); };
double Myq(double x) { return x*x; };
Третья функция — встроенная (стандартная) для вычисления значения функции cos. В каком из вариантов правильно объявлен, создан и проинициализирован динамический массив указателей на функции размерности три?
1) int n; cin>>n; double **fun(double )= new (double (*[n])(double));
fun[0]= cos; fun[1]=MyExp; fun[2]=Myq;
2)int n; cin>>n; double (*(*fun))(double )= new (double (*[n])(double));
fun[0]= cos; fun[1]=MyExp; fun[2]=Myq;
3) const n=3; double (*(*fun))(double )= new (double (*[n])(double));
fun[0]= cos; fun[1]=MyExp; fun[2]=Myq;
4) int n; cin>>n; double (*fun)(double )= new (double (*[n])(double));
fun[0]= cos; fun[1]=MyExp; fun[2]=Myq;
5) int n; cin>>n; double (*(*fun))(double t)= new (double (*[n])(double));
fun[0]= cos(t); fun[1]=MyExp(t); fun[2]=Myq(t);
6) int n; cin>>n; double (*(*fun))(double )= new (double [n](double));
fun[0]= cos; fun[1]=MyExp; fun[2]=Myq;
7) int n; cin>>n; double (*(*fun))(double x)= new (double (*[n])(double x));
fun[0](x)= cos(x); fun[1](x)=MyExp(x); fun[2](x)=Myq(x);
7. Дан код функции, которая должна суммировать и выводить переменное количество (k ) вещественных чисел:
void fun (int k, …) //1
{ int *p=k; float S=0; //2
for (int i=1; i<=k; i++) S+=*(++p); //3
p=&k; //4
for (; k; k++) //5
cout<<*(++p)<<" "; //6
cout<<S;
}
В каких строках есть ошибки?
8. Дан прототип функции с переменным количеством параметров для вывода к вещественных чисел:
void fun (int k, …) ;
и несколько вариантов вызова этой функции
void main( )
{ float a1=10.1, a2=-20.2;
fun(a1); //1
fun(1,a1); //2
fun(2,a1); //3
fun(a1,a2); //4
fun(2,a1,a2); //5
fun(3,a1,a2); //6
}
Что будет выведено для синтаксически правильных вариантов (//1—//6) ?