Главная / Программирование /
Основы программирования - обучения основам / Тест 11
Основы программирования - обучения основам - тест 11
Упражнение 1:
Номер 1
Какая структура данных обычно используется
для сохранения состояния прерванного задания?
Ответ:
 (1)
Стек.
 
 (2)
Очередь.
 
Номер 2
Какая структура данных обычно используется
при передаче параметров подпрограммам и функциям?
Ответ:
 (1)
Стек.
 
 (2)
Очередь.
 
Номер 3
Какая структура данных обычно используется
для передачи заданий драйверу операционной системы?
Ответ:
 (1)
Стек.
 
 (2)
Очередь.
 
Упражнение 2:
Номер 1
Обозначим через push
и pop
команды добавления
элемента в стек и извлечения элемента из стека.
Рассмотрим фрагмент программы на псевдокоде:
push x;
push y;
pop x;
pop y;
Что происходит с переменными x
и y
в результате
его выполнения?
Ответ:
 (1)
Значения переменных не изменяются.
 
 (2)
Переменные x
и y
обмениваются своими значениями.
 
Номер 2
Пусть даны очередь и стек.
Рассмотрим фрагмент программы на псевдокоде:
сделать стек пустым;
цикл пока очередь непуста
| x := взять элемент из начала очереди;
| добавить (вход: x) в стек;
конец цикла
цикл пока стек непуст
| x := взять элемент из стека;
| добавить (вход: x) в конец очереди;
конец цикла
Что произойдет с очередью в результате
его выполнения?
Ответ:
 (1)
Очередь не изменится.
 
 (2)
Порядок элементов очереди изменится на противоположный.
 
Номер 3
Даны очередь и стек элементов одного и того же типа. Можно ли
написать программу, которая удаляет из очереди предпоследний
элемент и не меняет порядка остальных элементов? При этом
разрешается использовать стек как вспомогательную структуру данных;
другими структурами (за исключением простых переменных)
пользоваться запрещено.
Ответ:
 (1)
Можно.
 
 (2)
Нельзя.
 
Упражнение 3:
Номер 1
Выражение записано с использованием обратной польской
записи:
1, 2, 3, +, *, 4, 5, *, -
Чему равняется его значение?
Ответ:
 (1)
Значение выражения равно -15.
 
 (2)
Значение выражения равно -11.
 
 (3)
Значение выражения равно 15.
 
 (4)
Значение выражения равно 29.
 
Номер 2
Выражение записано с использованием обратной польской
записи:
0, 1, *, 2, -, 3, 4, *, 5, +, 6, *, +
Чему равняется его значение?
Ответ:
 (1)
Значение выражения равно 25.
 
 (2)
Значение выражения равно 100.
 
 (3)
Значение выражения равно 104.
 
 (4)
Значение выражения равно 136.
 
Номер 3
Выражение записано с использованием обратной польской
записи:
1, 2, 3, +, *, 4, *, 5, *
Чему равняется его значение?
Ответ:
 (1)
Значение выражения равно 100.
 
 (2)
Значение выражения равно 140.
 
 (3)
Значение выражения равно 160.
 
 (4)
Значение выражения равно 180.
 
Упражнение 4:
Номер 1
Рассмотрим фрагмент программы на языке PostScript:
10 10 moveto
20 30 lineto
30 10 lineto
15 20 moveto
25 20 lineto
stroke
Что будет нарисовано в результате его выполнения?
Ответ:
 (1)
Буква K.
 
 (2)
Буква A.
 
 (3)
Трапеция.
 
Номер 2
Рассмотрим фрагмент программы на языке PostScript:
10 10 moveto
20 30 lineto
10 50 lineto
30 50 moveto
20 30 lineto
30 10 lineto
stroke
Что будет нарисовано в результате его выполнения?
Ответ:
 (1)
Буква A.
 
 (2)
Буква M.
 
 (3)
Буква X.
 
Номер 3
Рассмотрим фрагмент программы на языке PostScript:
10 10 moveto
10 40 lineto
10 20 moveto
30 40 lineto
15 25 moveto
30 10 lineto
stroke
Что будет нарисовано в результате его выполнения?
Ответ:
 (1)
Буква A.
 
 (2)
Буква K.
 
 (3)
Буква X.
 
Упражнение 5:
Номер 1
Рассмотрим следующую реализацию функции onDiv
,
которая исполняет команду деления в проекте
«Стековый калькулятор»:
static void onDiv() {
double y, x;
if (st_size() < 2) {
printf("Stack depth < 2.\n");
return;
}
y = st_pop();
x = st_pop();
assert(y != 0.0); // утв: y отлично от нуля
st_push(x / y);
display();
}
Правильно ли здесь используется конструкция «утверждение»,
которая в Си реализуется функцией assert
?
Ответ:
 (1)
Правильно, поскольку деление на ноль невозможно, следовательно,
выполнение программы должно быть прекращено.
 
 (2)
Неправильно, поскольку прекращение выполнения программы
при невыполнении утверждения должно происходить в результате
ошибки в программе, а не из-за некорректных входных данных.
 
Номер 2
Рассмотрим следующую реализацию функции onMul
,
которая исполняет команду умножения в проекте
«Стековый калькулятор»:
static void onMul() {
double y, x;
assert(st_size() >= 2); // утв: глубина стека
// не меньше двух
y = st_pop();
x = st_pop();
st_push(x * y);
display();
}
Правильно ли здесь используется конструкция «утверждение»,
которая в Си реализуется функцией assert
?
Ответ:
 (1)
Правильно, поскольку выполнение любой бинарной операции,
в частности, умножения, возможно лишь, когда в стеке
не меньше двух элементов. Следовательно,
выполнение программы должно быть прекращено.
 
 (2)
Неправильно, поскольку прекращение выполнения программы
при невыполнении утверждения должно происходить в результате
ошибки в программе, а не из-за некорректных входных данных.
 
Номер 3
Рассмотрим следующую реализацию функции onSqrt
,
которая исполняет команду извлечения квадратного корня в проекте
«Стековый калькулятор»:
static void onSqrt() {
double x;
if (st_empty()) {
printf("Stack empty.\n");
return;
}
x = st_pop();
assert(x >= 0.0); // утв: x неотрицательно
st_push(sqrt(x));
display();
}
Правильно ли здесь используется конструкция «утверждение»,
которая в Си реализуется функцией assert
?
Ответ:
 (1)
Правильно, поскольку невозможно извлечь квадратный корень
из отрицательного числа. Следовательно, если x < 0,
то выполнение программы должно быть прекращено.
 
 (2)
Неправильно, поскольку прекращение выполнения программы
при невыполнении утверждения должно происходить в результате
ошибки в программе, а не из-за некорректных входных данных.
 
Упражнение 6:
Номер 1
Выражение содержит числа, переменные, круглые скобки и знаки
четырех арифметических операций. Его можно
преобразовывать, пользуясь известными свойствами
арифметических операций. Значения переменных сообщаются
только после того, как выражение преобразовано в удобную для
вычисления форму. Какой максимальной глубины стека достаточно,
чтобы вычислить значение любого такого выражения с помощью
стекового калькулятора (записывать промежуточные результаты
на бумаге запрещено)?
Ответ:
 (1)
Достаточно стека максимальной глубины 3.
 
 (2)
Достаточно стека максимальной глубины 4.
 
 (3)
Достаточно стека максимальной глубины 5.
 
 (4)
Достаточно стека максимальной глубины 6.
 
Номер 2
Выражение содержит числа, переменную x
и знаки трех
арифметических операций +, -, × (нет операции деления);
переменная x
может использоваться многократно.
Выражение можно преобразовывать, пользуясь известными
свойствами арифметических операций. Значение переменной x
сообщается только после того, как выражение преобразовано в
удобную для вычисления форму. Какой максимальной глубины
стека достаточно, чтобы вычислить значение любого такого
выражения с помощью стекового калькулятора (записывать
промежуточные результаты на бумаге запрещено)?
Ответ:
 (1)
Достаточно стека максимальной глубины 2.
 
 (2)
Достаточно стека максимальной глубины 3.
 
 (3)
Достаточно стека максимальной глубины 4.
 
 (4)
Достаточно стека максимальной глубины 5.
 
Номер 3
Выражение содержит числа, переменную x
и знаки четырех
арифметических операций (переменная x
может
использоваться многократно). Выражение можно преобразовывать,
пользуясь известными свойствами арифметических операций.
Значение переменной x
сообщается только после того,
как выражение преобразовано в удобную для вычисления форму.
Какой максимальной глубины стека достаточно, чтобы вычислить
значение любого такого выражения с помощью стекового
калькулятора (записывать промежуточные результаты на бумаге
запрещено)?
Ответ:
 (1)
Достаточно стека максимальной глубины 2.
 
 (2)
Достаточно стека максимальной глубины 3.
 
 (3)
Достаточно стека максимальной глубины 4.
 
 (4)
Достаточно стека максимальной глубины 5.