Контрольная работа по C++
Время: 1 час
Сложность: средняя
Темы: указатели, ссылки, массивы, строки, std::string, функции, структуры,
рекурсия, перегрузка, область видимости, static, const
Часть I. Тестовые задания (выберите один правильный ответ)
1. Что выведет программа?
int a = 10;
int* p = &a;
*p = 20;
cout << a;
а) 10
б) 20
в) ошибка
г) адрес a
2. Что произойдёт при попытке разыменовать nullptr?
а) ничего
б) программа завершится ошибкой
в) выведется 0
г) создастся новый объект
3. Чем отличается & при объявлении ссылки и при взятии адреса?
а) в первом случае — ссылка, во втором — адресная операция
б) они одинаковы
в) первая — логическая операция
г) синтаксическая ошибка
4. Как создать строку C-style и std::string?
а) char s[] = "Hello";
б) char* s = Hello;
в) string s = "Hello";
г) оба а) и в)
5. Что делает const в параметре функции: void print(const string& s)?
а) запрещает изменять s
б) делает копию s
в) освобождает память
г) ничего
6. Что выведет программа?
void f() {
static int x = 0; x++; cout << x; }
int main() { f(); f(); f(); }
а) 111
б) 123
в) 012
г) ошибка
7. Как получить доступ к полю структуры через указатель?
а) p.x
б) p->x
в) (*p).x
г) оба б) и в)
8. Что означает перегрузка функции?
а) дублирование кода
б) функции с одинаковым именем, но разными параметрами
в) наследование
г) вызов функции внутри другой
9. Что вычисляет рекурсивная функция:
int f(int n){ if(n==0) return 1; return n*f(n-1);}?
а) сумму чисел
б) факториал
в) Фибоначчи
г) произведение чисел от 1 до n
10. Что означает nullptr?
а) указатель на первый элемент
б) нулевой указатель
в) пустая строка
г) ошибка компиляции
Часть II. Задачи на решение
1. Используя указатели, поменяйте местами значения двух переменных a
и b.
2. Считать строку (char[]) и найти её длину без использования strlen.
3. Написать функцию, которая принимает число по ссылке и заменяет его
квадратом.
4. Создать структуру Student (имя, возраст, средний балл) и вывести данные
о студенте с наивысшим средним баллом.
5. Используя рекурсию, вывести строку в обратном порядке.