
- •Часть 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. Динамические структуры данных
- •Варианты индивидуальных заданий
Вопросы к разделу 5. Функции
1. Если функция не возвращает значения, как должен выглядеть прототип этой функции?
а) void myFunction ();
б) float myFunction (int, int);
в) myFunction (int, int).
2. Если не объявить тип возвращаемого функцией значения, то какой тип будет принят по умолчанию для возвращаемого значения?
а) int;
б) long;
в) unsigned long.
3. Что должно соответствовать в прототипе и в определении одной и той же функции?
а) имя функции и список формальных параметров;
б) тип возвращаемого значения и имя функции;
в) тип возвращаемого значения, имя функции и список формальных параметров.
4. Может ли изменить функция значение глобальной переменной, если передать указатель на эту переменную в качестве параметра функции?
а) нет;
б) да;
в) значение глобальной переменной нельзя изменить.
5. Что такое рекурсия?
а) способность функции вызывать другую функцию;
б) способность функции в качестве параметра использовать другую функцию;
в) способность функции вызывать саму себя.
6. Какое объявление указателя на функцию является правильным?
а) int (*funcPtr) (int);
б) long *funcPtr (int);
в) оба правильные.
7. Что будет объявлять выражение long *func (int)?
а) указатель на функцию, возвращающую значение типа long и принимающую в качестве параметра данные типа int;
б) функцию, возвращающую указатель на данные типа long и принимающую в качестве параметра данные типа int;
в) так объявлять нельзя.
8. Правильно ли задана функция MyFunc()?
#include <stdio.h>
void MyFunc(int b);
main()
{
int a, c;
c = MyFunc(a);
printf(“%d”, c);
return 0;
}
void MyFunc(int b)
{
return (4 * b);
}
а) неправильно передан параметр в функцию;
б) функция не может возвращать значение;
в) всё правильно.
9. При передаче указателя в параметр функции копируется:
а) значение;
б) и значение, и адрес;
в) адрес.
10. Должны ли имена параметров, указанные в прототипе, определении и вызове функции, соответствовать друг другу?
а) должны;
б) не должны;
в) имена указателей должны, а переменных не должны.
Вопросы к разделу 6. Строки
1. Как правильно ввести две строки, и получить в переменной str их конкатенацию?
а)
char str[80];
scanf("%s", str);
scanf("%s", str + strlen(str));
б)
char str1[40], str2[40], str[80];
scanf("%s", str1);
scanf("%s", str2);
str = str1 + str2;
в)
char str[40], str1[40];
scanf("%s", &str);
scanf("%s", &str1);
str = strcat(str, str1);
г) ни один из ответов а) – в) не является правильным;
д) несколько ответов из а) – в) являются правильными.
2. Как правильно создать временную копию строки str1 в str2?
а)
char str1[40], str2[30];
str2 = strdup(str1);
б)
char str1[40], str2[30];
str2 = strdup(str1 + 10);
в)
char str1[40], *str2;
str2 = strdup(str1);
г) ни один из ответов а) – в) не является правильным;
д) несколько ответов из а) – в) являются правильными.
3. Как правильно скопировать строку из str2 в str1?
а)
char str1[40], str2[30];
str1 = str2;
б)
char str1[40], str2[30];
str1 = str2 + 10;
в)
char str1[40], *str2;
strcpy(&str2, str1);
г) ни один из ответов а) – в) не является правильным;
д) несколько ответов из а) – в) являются правильными.
4. Как правильно создать в str2 строку, являющуюся конкатенацией str1 и str2?
а)
char str1[40], str2[30];
int j;
for (j = 0; str1[j] || *str2[j]; j++)
{
str2[j + strlen(str2)] = str2[j];
str2[j] = str1[j]
}
б)
char str1[40], str2[30];
strcat(str1, str2);
strcpy(str2, str1);
в)
char str1[40], *str2;
str2 = str1 + str2;
г) ни один из ответов а) – в) не является правильным;
д) несколько ответов из а) – в) являются правильными.
5. Как правильно объявить массив array из 20 строк?
а)
typedef char *string;
string array[20];
б)
const char *array[20];
в)
char array [20];
г) ни один из ответов а) – в) не является правильным
д) несколько ответов из а) – в) являются правильными
6. Функции передан массив строк: function(char **sa). Как правильно получить в переменной res пятый символ третьей строки?
а)
char res;
res = sa[5][3];
б)
char res;
res = *(sa +5) + 3;
в)
char res;
res = *(*sa +5) + 3;
г) ни один из ответов а) – в) не является правильным;
д) несколько ответов из а) – в) являются правильными.
7. Как правильно вывести на экран все символы строки, начиная с пятого?
а)
char* str;
puts (str[5]);
б)
char* str;
puts (&str[5]);
в)
char* str;
puts (str + 5);
г) ни один из ответов а) – в) не является правильным.
8. Сколько байт в памяти займет строка str2 после последнего присваивания?
char *str2 = "first";
str2 = strdup(str2, "second");
а) 11;
б) 12;
в) в примере есть ошибки;
г) ни один из ответов а) – в) не является правильным.
9. Сколько байт в памяти займет строка str1 после последнего вызова функции?
char str1[] = "first", str1[] = "second";
str2 = strcpy(str1, str2);
а) 5;
б) 6;
в) 7;
г) в примере есть ошибки;
д) ни один из ответов а) – г) не является правильным.
10. Какую максимальную длину может иметь Си-строка (DOS)?
а) 255;
б) 256;
в) 65535;
г) неограниченную;
д) ни один из ответов а) – г) не является правильным.