
- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Часть 2 __184__
- •Содержание дисциплины
- •1. Индивидуальные практические занятия, их характеристика
- •2. Контрольные работы, их характеристика
- •3. Курсовой проект, его характеристика
- •4. Литература
- •4.1. Основная
- •4.2. Дополнительная
- •5. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Протокол согласования учЕбной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Теоретический раздел Введение
- •1. Основные типы данных
- •1.1. Общие сведения
- •1.2. Данные типа int
- •1.3. Данные типа char
- •1.4. Модификаторы доступа const и volatile
- •1.5. Данные вещественного типа (с плавающей точкой)
- •1.6. Элементарный ввод-вывод
- •1.7. Структура простой программы на языке Си
- •2. Операции и выражения
- •2.1. Выражение и его интерпретация
- •2.2. Основные операции
- •2.2.1. Арифметические операции
- •2.2.2. Побитовые логические операции
- •2.2.3. Операции сдвига
- •2.2.4. Операция присваивания
- •2.2.5. Операция sizeof
- •2.2.6. Преобразование типов в выражениях
- •2.2.7. Операция преобразования типов
- •2.2.8. Приоритеты в языке Си
- •3. Операторы управления вычислительным процессом
- •3.1. Оператор if
- •3.2. Операции отношения
- •3.3. Логические операции
- •3.4. Операция запятая
- •3.5. Операция условия ?:
- •3.6. Оператор безусловного перехода goto
- •3.7. Оператор switch
- •`` ` `3.8. Операторы цикла
- •3.8.1. Оператор for
- •3.8.2. Оператор while
- •3.8.3. Оператор do...While
- •3.9. Оператор break
- •3.10. Оператор continue
- •4. Массивы и указатели
- •4.1. Одномерные массивы и их инициализация
- •4.2. Многомерные массивы и их инициализация
- •4.3. Объявление указателей
- •4.4. Операции над указателями
- •1) Взятие адреса
- •2) Косвенная адресация или разыменование указателя
- •3) Увеличение или уменьшение значения указателя на целое число
- •4) Разность указателей
- •5) Сравнение указателей
- •6) Присваивание указателей друг другу
- •4.6. Связь между указателями и массивами
- •4.7. Динамическое распределение памяти
- •4.8. Массивы указателей
- •5. Функции
- •5.1. Общие сведения
- •5.2. Область видимости переменных
- •5.2.1. Локальные переменные
- •5.2.2. Глобальные переменные
- •5.3. Передача параметров в функцию
- •5.4. Рекурсивные функции
- •5.5. Использование функций в качестве параметров функций
- •5.6. Указатели на функции
- •5.7. Структура программы на Си
- •5.8. Передача параметров в функцию main()
- •6. Строки
- •7. Классы хранения и видимость переменных
- •7.1. Общие сведения
- •7.2. Автоматический класс хранения (auto)
- •7.3. Регистровый класс хранения (register)
- •7.4. Статический класс хранения (static)
- •7.5. Внешний класс хранения (extern)
- •7.6. Заключение
- •8. Структуры, объединения и перечисления
- •8.1. Общие сведения
- •8.2. Инициализация структурных переменных
- •8.3. Вложенные структуры
- •8.4. Указатели на структуры
- •8.5. Массивы структурных переменных
- •8.6. Передача функциям структурных переменных
- •8.7. Оператор typedef
- •8.8. Поля битов в структурах
- •8.9. Объединения
- •8.10. Перечисления
- •9. Динамические структуры данных
- •9.1. Общие сведения
- •9.2. Связные списки
- •9.2.1. Односвязные списки
- •9.2.2. Двусвязные списки
- •9.2.3. Циклические списки
- •9.3. Стеки
- •9.4. Очереди
- •9.5. Деревья
- •9.5.1. Понятие графа
- •9.5.2. Бинарные деревья
- •10. Файлы
- •10.1. Общие сведения
- •10.2. Открытие и закрытие файлов
- •10.3. Функции ввода-вывода для работы с текстовыми файлами
- •10.4. Произвольный доступ к файлу
- •10.5. Функции ввода-вывода для работы с бинарными файлами
- •11. Директивы препроцессора
- •11.1. Основные понятия
- •11.2. Директива #include
- •11.3. Директивы препроцессора #define и #undef
- •11.3.1. Символические константы
- •11.3.2. Макросы с параметрами
- •11.3.3. Директива #undef
- •11.4. Условная компиляция
- •11.5. Директивы # и ##
- •12. Модульное программирование
- •13. Введение в объектно-ориентированное программирование
- •13.1. Постановка задачи
- •13.2. Решение задачи средствами Си
- •13.5. Наследование
- •13.6. Перегрузка
- •13.7. Ссылочный тип
- •Литература
- •Приложение 1. Рекомендации по оформлению текстов программ
- •Тесты к теоретическому разделу Вопросы к разделу 1. Основные типы данных
- •Вопросы к разделу 2. Операции и выражения
- •Вопросы к разделу 3. Операторы управления вычислительным процессом
- •Вопросы к разделу 4. Массивы и указатели
- •Вопросы к разделу 5. Функции
- •Вопросы к разделу 6. Строки
- •Вопросы к разделу 7. Классы хранения и видимость переменных
- •Вопросы к разделу 8. Структуры, объединения и перечисления
- •Вопросы к разделу 9. Динамические структуры данных
- •Вопросы к разделу 10. Файлы
- •Вопросы к разделу 11. Директивы препроцессора
- •Вопросы к разделу 12. Модульное программирование
- •Вопросы к разделу 13. Введение в ооп
- •Правильные ответы на вопросы тестов к теоретическому разделу
- •Вопросы к теоретическому зачету
- •Варианты индивидуальных заданий
- •Контрольная работа №2
- •Варианты индивидуальных заданий
- •Индивидуальные практические работы Указания к выбору варианта индивидуальных практических работ
- •Индивидуальная практическая работа № 1. Массивы и строки
- •Варианты индивидуальных заданий
- •Индивидуальная практическая работа № 2. Динамические структуры данных
- •Варианты индивидуальных заданий
Вопросы к разделу 12. Модульное программирование
1. На какие стадии разделяется процесс преобразования исходного кода программы на Си в исполняемый файл?
а) Обработка препроцессором и компиляция.
б) Обработка препроцессором и трансляция.
в) Трансляция, обработка препроцессором и связывание.
г) Обработка препроцессором, компиляция и связывание.
2. На какой из стадий процесса преобразования исходного кода программы на Си в исполняемый файл обнаруживаются ошибки типа «неопределенная функция»?
а) Обработка исходного текста препроцессором.
б) Трансляция.
в) Компиляция.
г) Связывание.
3. На какой из стадий процесса преобразования исходного кода программы на Си в исполняемый файл обрабатываются заголовочные файлы?
а) Обработка исходного текста препроцессором.
б) Трансляция.
в) Компиляция.
г) Связывание.
4. Выполняется ли на стадии компиляции проверка типов параметров, передаваемых функции?
а) Да, выполняется всегда.
б) Нет, не выполняется никогда.
в) Выполняется, если включена соответствующая опция компилятора.
г) Выполняется, если перед обращением к функции, был определен ее прототип.
5. Что не следует помещать в заголовочные файлы?
а) Прототипы функций.
б) Определения констант.
в) Директивы препроцессора.
г) Определения функций.
6. Для чего следует включать заголовочный файл в модуль, в котором определены прототипы функций, содержащихся в этом заголовочном файле?
а) Для того, чтобы исключить возможность появления неверного объявления в заголовочном файле.
б) Чтобы избежать повторной компиляции кода.
в) Директивы препроцессора.
г) Среди ответов нет правильного.
7. При помощи каких средств языка Си, можно избежать повторной компиляции заголовочных файлов?
а) Прототипы функций.
б) Включение заголовочного файла в модуль, в котором определены прототипы функций, содержащихся в этом заголовочном файле.
в) Директивы препроцессора.
г) Среди ответов нет правильного.
8. Пусть некоторая функция определена в модуле «main.c», вызывается в модуле «first.c», и используется для передачи в качестве аргумента другой функции в «second.c». В какие модули следует включить заголовочный файл, с прототипом этой функции?
а) «first.c» и «second.c».
б) «first.c», «second.c», «main.c».
в) «first.c».
г) «second.c», «main.c».
9. Пусть в некотором модуле «first.c», определена функция function:
void* function(int*)
{
static void (*variablie) (int);
// ...
}
Какую строку должен содержать заголовочный файл, чтобы к переменной variable можно было обращаться из других модулей?
а) extern variable;
б) extern void (*variablie) (int);
в) extern static void (*variablie) (int);
г) среди ответов а) – в) нет правильного.
Вопросы к разделу 13. Введение в ооп
1. Заданы прототипы перегруженной функции:
I void print(int a);
II void print(char c);
III void print(char* s);
Какие функции будут вызваны в следующем примере?
void f(double a, char c, int* s)
{
print(a);
print(c);
print(s);
}
а) на стадии компиляции будут обнаружены ошибки;
б) I, II и III соответственно;
в) II, I и III соответственно;
г) I, II и III или I соответственно;
д) I или II, II и III соответственно.
2. Какие синтаксические ошибки есть в следующем определении класса?
class complex
{
function();
private
void complex();
public
int nonfunction(int);
private
void bigfunction(int a);
};
а) нарушены правила оформления отступов;
б) неправильно объявлена функция function();
в) неправильно объявлен конструктор;
г) отсутствует деструктор;
д) пропущены двоеточия;
е) дважды встречается директива private;
ж) ответы в), д), б) и одновременно;
з) ответы в) и д) одновременно.
3. Какие из приведенных ниже примеров являются определениями (в отличие от объявлений)?
class abcdef: public ghijkllm { abcdef(); }; // 1
int function(int) {}; // 2
int data(int) {};// 3
а) определений нет;
б) 1, 2, 3;
в) 1, 2;
г) 2, 3;
д) 1, 3;
е) 1;
ж) 2;
з) 3.
4. Сколько байтов памяти будет выделено для массива complex *mas[10] в следующем примере?
class complex
{
char* function(char *);
char mas [200];
};
char* complex::function(char* a)
{
char mas;
// ...
}
complex* mas [10];
а) 2010;
б) 200 + 10*sizeof(complex *);
в) 200;
г) 10*sizeof(complex *);
д) 201 +10*sizeof(complex *);
е) 2000.
5. Укажите ошибки (если они есть) в данном примере:
class iStack
{
public:
~iStack();
void push(int a);
int pop();
private:
iStack(int);
int init();
int *top;
};
iStack::iStack(int a)
{
*top = init(); // Точка 1
}
void f(int a)
{
iStack stack (a); // Точка 2
*top = pop(); // Точка 3
}
а) ошибок НЕТ;
б) ошибки в точках 1, 2, 3;
в) ошибки в точках 1, 2;
г) ошибки в точках 2, 3;
д) ошибки в точках 1, 3;
е) ошибки в точке 1;
ж) ошибки в точке 2;
з) ошибки в точке 3.
6. Какие из членов класса myclass являются открытыми?
struct myclass
{
int mymember; // 1
public:
int myfunction(); // 2
private:
myclass(); // 3
};
а) открытых членов у класса myclass нет;
б) 1, 2, 3;
в) 1, 2;
г) 2, 3;
д) 1, 3;
е) 1;
ж) 2;
з) 3.
7. Укажите ошибки (если они есть) в данном примере:
class Date
{
int dd, mm, yy;
public:
Date();
Date* change_day(int);
Date& change_month(int);
Date& change_year(int);
};
void somefunction(Date date, Date dt)
{
// 1
date.change_day(12).change_month(12).change_year(12);
// 2
date.change_day(12).change_month(12).change_year(12) = dt;
// 3
date.change_day(12)->change_month(12)->change_year(12);
}
а) ошибок НЕТ;
б) ошибки в точках 1, 2, 3;
в) ошибки в точках 1, 2;
г) ошибки в точках 2, 3;
д) ошибки в точках 1, 3;
е) ошибки в точках 1;
ж) ошибки в точке 2;
з) ошибки в точке 3.
8. Укажите ошибки (если они есть) в данном примере (объявление iStack см. в вопросе 5):
class Stack : public iStack // iStack из прошлого вопроса
{
public:
Stack(int a);
};
Stack::Stack(int a)
{
*top = pop(); // Точка 1
}
int f(int a)
{
Stack stack (a); // Точка 2
*top = pop(); // Точка 3
}
а) ошибок НЕТ;
б) ошибки в точках 1, 2, 3;
в) ошибки в точках 1, 2;
г) ошибки в точках 2, 3;
д) ошибки в точках 1, 3;
е) ошибки в точке 1;
ж) ошибки в точке 2;
з) ошибки в точке 3;
9. Какие термины соответствуют следующим определениям:
— способность классов скрывать детали реализации;
— механизм позволяющий получить новый тип данных из существующего;
— возможность одинаково обращаться к родственным классам.
а) инкапсуляция, наследование, полиморфизм соответственно;
б) инкапсуляция, полиморфизм, наследование соответственно;
в) наследование, полиморфизм, инкапсуляция соответственно;
г) наследование, инкапсуляция, полиморфизм соответственно;
д) полиморфизм, наследование, инкапсуляция соответственно;
е) полиморфизм, инкапсуляция, наследование, соответственно.
10. В каких случаях можно указать заранее, что будет выведено на экран (первые числа в ответе), и в каких случаях есть синтаксические ошибки (вторые числа в ответе):
void f(void)
{
int a = 1, b = 3, &c = a, *d = &b;
printf("%d", a + b*c**d); // 1
printf("%d", a + b**c*d); // 2
printf("%d", a + b*&c*d); // 3
printf("%d", a + b*&c**d); // 4
}
а) {1, 2}, {4};
б) {1}, {2, 3, 4};
в) {}, {1, 2, 3, 4};
г) {1, 3}, {4};
д) {1, 3}, {2, 4};
е) {1, 4}, {3};
ж) {1, 2}, {};
з) {3, 4}, {1, 3}.
11. Данные какого типа может возвращать функция-конструктор класса?
а) Функция конструктор не имеет типа возвращаемого значения.
б) Любого.
в) int.
г) int*.
д) Любого целочисленного.
е) void.
ж) void*.
12. Развитием каких из базовых идей ООП можно считать перегрузку функций?
а) Инкапсуляция.
б) Инкапсуляция и наследование.
в) Наследование и полиморфизм.
г) Наследование, инкапсуляция и полиморфизм.
д) Полиморфизм.
е) Наследование.
13. Данные какого типа может возвращать функция-деструктор класса?
а) Функция-деструктор не имеет типа возвращаемого значения.
б) Любого.
в) int.
г) int*.
д) Любого целочисленного.
е) void.
ж) void*.
14. Сколько параметров будет помещено в стек при вызове функции:
sometype &sometype::somefunction(sometype* b, sometype& c) {};
// ...
sometype someobject;
someobject = someobject->somefunction(b, c);
// ...
а) 1;
б) 2;
в) 3;
г) 4;
д) 5.
15. Каким будет результат функции f()?
struct someclass
{
someclass();
~someclass();
};
someclass::someclass() { printf(“1”); }
someclass::~someclass() { printf(“2”); }
void f()
{
someclass a;
int b = 5;
{
someclass a;
}
b++;
printf(“%d”, b);
}
а) “”;
б) “12126”;
в) “21216”;
г) “11262”;
д) “22611”;
е) в примере есть синтаксические ошибки;
ж) нет правильного ответа.