Главная / Программирование /
Язык программирования C++ / Тест 9
Язык программирования C++ - тест 9
Упражнение 1:
Номер 1
Что из себя представляет динамическое выделение памяти?
Ответ:
 (1) память под объект (переменную) выделяется каждый раз при обращении к переменной 
 (2) память под объект (переменную) может выделяться не сразу, а в процессе работы программы, освобождение памяти производится автоматически после завершения программы 
 (3) память под объект (переменную) может выделяться не сразу, а в процессе работы программы, освобождение памяти производится вручную 
Номер 2
Какое из приведенных выражений верно?
Ответ:
 (1) int a; a = new int[20];
 
 (2) int a; a = new int(20);
 
 (3) int *a; a = new int[20];
 
 (4) int *a; a = new 20;
 
 (5) int *a; a = new sizeof(int*20);
 
 (6) int a; a = new sizeof(int*20);
 
Номер 3
Что нужно сделать для освобождения памяти после выполнения такого кода ?
char *a; a = new char[20];
Ответ:
 (1) delete [] a;
 
 (2) delete a[];
 
 (3) delete a;
 
Номер 4
Какое выражение верно с точки зрения целесообразности использования динамического распределения памяти?
Ответ:
 (1) char* c = new char[5]; c = "aabb";
 
 (2) char* c = "aabb";
 
 (3) char c; c = new string("aabb");
 
Упражнение 2:
Номер 2
Какой будет результат ?
int f(int& x) {
static int a = 0; if (!a) a = ++x; return a;}
int y = 6; f(y); cout << f(y) << y;
Ответ:
 (1) 77
 
 (2) 78
 
 (3) 70
 
 (4) 79
 
Номер 3
Какой будет результат вывода?
static int a; a = 9;
{
static int a = 8;
}
cout << a;
Ответ:
 (1) 9
 
 (2) 8
 
 (3) 0
 
Упражнение 3:
Номер 1
Что будет напечатано в результате выполнения следующего кода?
int x=39, *p = &x;
cout << p << "__" << *p ;
Ответ:
 (1) ошибка компиляции 
 (2) не определено 
 (3) адрес в памяти__39 
 (4) 39_адрес в памяти 
Номер 2
Что будет напечатано в результате выполнения следующего кода?
char x[] = "Hello, world";
char* p = x; p += 4; cout << *p;
Ответ:
 (1) o
 
 (2) o, world
 
 (3) Hello, world
 
Номер 3
Что будет выведено в результате выполнения следующего кода?
int a[4] = { 1,2,3,4};
int* p = a; cout << (*p+2) + *p;
Ответ:
 (1) 4
 
 (2) 6
 
 (3) адрес памяти 
 (4) 10
 
Упражнение 4:
Номер 1
Что выполняет операция "delete [] v;" в данном ниже коде:
class MyClass
{
int sz; // число элементов
int * v; // указатель на целые
public:
MyClass ( int );
~MyClass ();
int&operator [] ( int index ); // операция индексации
};
…
MyClass::~ MyClass()
{
delete [] v;
}
Ответ:
 (1) удаляет первый элемент из массива "v" 
 (2) удаляет последний элемент из массива "v" 
 (3) удаляет весь массив "v", освобождая память 
 (4) удаляет указатель на массив "v" из памяти 
Номер 2
Что произойдёт при использовании неправильного адреса в операции delete
?
Ответ:
 (1) произойдёт аварийное завершение программы 
 (2) программа выдаст сообщение,что память освобождается по неправильному адресу 
 (3) результат непредсказуем 
Номер 3
Что произойдёт если операция выделения памяти new
завершится неудачно?
Ответ:
 (1) произойдёт аварийное завершение программы 
 (2) программа выдаст сообщение о невозможности выделения памяти под данный объект и вернёт ненулевой указатель 
 (3) выделение памяти под объект не произойдёт, и операция new
вернёт нулевой указатель или будет сгенерировано исключение 
Упражнение 5:
Номер 1
Какой будет результат у данного выражения?
int *i = new int;
...
i = new int;
...
delete i;
Ответ:
 (1) ошибка компиляции 
 (2) утечка памяти 
 (3) выделение памяти под переменную не произойдёт 
Номер 3
Какой будет результат у данного выражения?
long *L = new long;
*L = 4;
delete L;
cout << *L;
Ответ:
 (1) 4
 
 (2) 5
 
 (3) ошибка компиляции 
 (4) непредсказуемое поведение программы, возможно, случайное число 
Упражнение 6:
Номер 1
Что описывает данная строка программы: float mas=new int[3][2]
?
Ответ:
 (1) создание двумерного динамического массива размерности 3*2
 
 (2) создание одномерного динамического массива из 3
элементов 
 (3) создание одномерного динамического массива из 2
элементов 
 (4) данная строка представляет собой ошибочную запись и работать не будет 
Номер 2
Определите результат выполнения следующего кода:
float *thingPtr = new float (3.14159)
Ответ:
 (1) возникнет ошибка компиляции, поскольку нельзя задавать значение переменной в процессе её создания 
 (2) возникнет ошибка компиляции, поскольку при создании объекта не указан размер выделяемой памяти 
 (3) данная строка задает значение объекту типа float
 
Номер 3
В чём заключаются недостатки при использовании передачи аргумента в функцию по значению?
Ответ:
 (1) затраты времени на копирование значений и затраты памяти для хранения копии при передаче больших объёмов данных 
 (2) невозможность изменения данных в их источнике 
 (3) невозможность передачи больших объёмов данных 
Упражнение 7:
Номер 2
Какой будет результат у данного выражения?
int f1(int & x1, int *x2) { return ++x1 + ++(*x2); }
int main()
{ int a = 7, k = 1;
k = f1(a, &k);
cout << a << " " << k;
}
Ответ:
 (1) 7 10 
 (2) 8 1 
 (3) 8 10 
Номер 3
Что будет выведено в результате выполнения данного кода?
int f1(int x1, int &x2) { return ++x1 + (++x2); }
int main()
{ int a = 7, k = 1;
k = f1(a, k);
cout << a << " " << k;
}
Ответ:
 (1) 7 1
 
 (2) 8 10
 
 (3) 7 10
 
Упражнение 8:
Номер 1
Что будет выведено на экран в результате выполнения данного кода?
int main()
{
......
float a1 = 7, a2 = 8;
{
float p=4;
float p1=5;
p1+=5;
}
if (a2) a1+=a2+p1++;
cout << a1;
.....
}
Ответ:
 (1) 25
 
 (2) 24
 
 (3) ничего из-за ошибки компиляции 
Номер 2
В какой строке(строках) ошибка?
1 int f1() {
2 char ch, ch1='a', ch2='b', ch3='c';
3 ch=ch1+ch2+ch3;
4 f1=int(ch);
5 return f1;
6 }
Ответ:
 (1) 1 и 3 
 (2) 1, 3, 4 и 5 
 (3) 4 и 5 
Номер 3
Что будет выведено на экран, если вызвать данную функцию последовательно три раза?
void f1() {
static int flag=0;
if (!flag) {
cout << "false ";
flag=5;
}
else {
cout <<"true ";
flag=0;
}
}
Ответ:
 (1) false false false
 
 (2) false true false
 
 (3) true false true