игра брюс 2048
Главная / Программирование / Программирование / Тест 34

Программирование - тест 34

Упражнение 1:
Номер 1
Сколько раз будет выполнено тело цикла в алгоритме
Евклида

int gcd(int m, int n) {
    while (n != 0) {
        int r = m % n;
        m = n; n = r;
    }
    return m;
}

при следующих входных значениях аргументов:
m=13, n=17?

Ответ:

 4 


Номер 2
Сколько раз будет выполнено тело цикла в алгоритме
Евклида

int gcd(int m, int n) {
    while (n != 0) {
        int r = m % n;
        m = n; n = r;
    }
    return m;
}

при следующих входных значениях аргументов:
m=24, n=30?

Ответ:

 3 


Номер 3
Сколько раз будет выполнено тело цикла в алгоритме
Евклида

int gcd(int m, int n) {
    while (n != 0) {
        int r = m % n;
        m = n; n = r;
    }
    return m;
}

при следующих входных значениях аргументов:
m=17, n=22?

Ответ:

 5 


Упражнение 2:
Номер 1
Укажите, чему будет равно значение переменной k
в результате выполнения следующего фрагмента программы:

    int n=11, k, *p;
    p = &n; ++*p; k = 4-*p*2+n;


Ответ:

 -8 


Номер 2
Укажите, чему будет равно значение переменной k
в результате выполнения следующего фрагмента программы:

    int n = (-7), k, *p;
    p = &n; ++*p; k = 3-*p*3+n;


Ответ:

 15 


Номер 3
Укажите, чему будет равно значение переменной k
в результате выполнения следующего фрагмента программы:

    int n = (-5), k, *p;
    p = &n; --*p; k = 4-*p*5+n;


Ответ:

 28 


Упражнение 3:
Номер 1
Укажите, чему будет равно значение переменной n
в результате выполнения следующего фрагмента программы:

    double *p = 1000;
    double *q = 2000;
    int n = q - p;


Ответ:

 125 


Номер 2
Укажите, чему будет равно значение переменной n
в результате выполнения следующего фрагмента программы:

    double *p = 1000;
    p += 1000;
    int n = (int) p;


Ответ:

 9000 


Номер 3
Укажите, чему будет равно значение переменной n
в результате выполнения следующего фрагмента программы:

    double *p = 10000;
    p -= 1000;
    int n = (int) p;


Ответ:

 2000 


Упражнение 4:
Номер 1
Пусть переменные p, q, n
описаны следующим образом:

    double *p, *q; int n;

Отметьте, какие из перечисленных ниже выражений языка C/C++
являются корректными:

Ответ:

 (1) p+q  

 (2) p-q  

 (3) 2*p  

 (4) p+n  

 (5) p-n  


Номер 2
Пусть переменные p, q 
описаны следующим образом:

    double *p, q[100];

Отметьте, какие из перечисленных ниже выражений языка C/C++
являются корректными:

Ответ:

 (1) *(p+2)-*q  

 (2) p[10]*q[10]  

 (3) *p-*(q+20)  

 (4) *p+*q[0]  


Номер 3
Пусть переменные p, q, n
описаны следующим образом:

    double *p, q[100], *r; int n;

Отметьте, какие из перечисленных ниже строк программы на C/C++
являются корректными:

Ответ:

 (1) p = q+20;  

 (2) p = &q[10];  

 (3) n = p - q;  

 (4) r = p - n;  

 (5) p = q + r;  


Упражнение 5:
Номер 1
Как подключаются внешние устройства к общей шине компьютера?

Ответ:

 (1) Последовательно.  

 (2) Параллельно.  


Номер 2
Какой из перечисленных ниже регистров процессора содержит
адрес команды, которая будет выполнятся на очередном
шаге работы процессора?

Ответ:

 (1) Регистр FP (в процессоре Intel 80x86 он обозначается как BP).  

 (2) Регистр SP.  

 (3) Регистр флагов.  

 (4) Регистр PC (в процессоре Intel 80x86 он обозначается как IP).  

 (5) Регистр R0 (в процессоре Intel 80x86 он обозначается как AX).  


Номер 3
Что содержит регистр PC (Program Counter - счетчик команд, в
процессоре Intel 80x86 он обозначается как IP - Instruction
Pointer) в момент выполнения процессором очередной команды?

Ответ:

 (1) Адрес выполняемой команды.  

 (2) Адрес команды, которая будет выполняться на следующем шаге.  

 (3) Адрес команды, которая выполнилась на предудущем шаге.  

 (4) Значение 1.  

 (5) Значение 0.  


Упражнение 6:
Номер 1
Пусть процессор имеет 32-разрядную архитектуру
и в некоторый момент его работы регистр SP содержит значение
1000. Укажите, какое значение будет содержаться в SP
после выполнения команды push X.

Ответ:

 (1) 1001  

 (2) 1004  

 (3) 999  

 (4) 996  


Номер 2
Пусть процессор имеет 32-разрядную архитектуру
и в некоторый момент его работы регистр SP содержит значение
1000. Укажите, какое значение будет содержаться в SP
после выполнения команды pop X.

Ответ:

 (1) 1001  

 (2) 1004  

 (3) 999  

 (4) 996  


Номер 3
Пусть процессор имеет 32-разрядную архитектуру
и в некоторый момент его работы регистр SP содержит значение
1000. Укажите, какое значение будет содержаться в SP
после выполнения команды вызова функции call f.

Ответ:

 (1) 1001  

 (2) 1004  

 (3) 999  

 (4) 996  


Номер 4
Пусть процессор имеет 32-разрядную архитектуру
и в некоторый момент его работы регистр SP содержит значение
1000. Укажите, какое значение будет содержаться в SP
после выполнения команды возврата из функции return.

Ответ:

 (1) 1001  

 (2) 1004  

 (3) 999  

 (4) 996  


Упражнение 7:
Номер 1
Отметьте, для каких из перечисленных ниже целей используется
аппаратный стек в языке C/C++.

Ответ:

 (1) Для сохранения адресов возврата из функций.  

 (2) Для передачи фактических параметров функциям.  

 (3) Для возврата значения функции.  

 (4) Для размещения локальных переменных функций.  


Номер 2
Пусть процессор имеет 32-разрядную архитектуру.
Рассмотрим функцию f(x, y) языка C/C++ со
следующим прототипом:

void f(int x, int y);

Чему равен адрес второго фактического аргумента
y функции f относительно регистра
FP (Frame Pointer - указатель кадра) во время выполнения
тела функции?

Ответ:

 (1) FP-4  

 (2) FP-8  

 (3) FP-12  

 (4) FP  

 (5) FP+4  

 (6) FP+8  

 (7) FP+12  


Номер 3
В каком порядке фактические аргументы функции помещаются в стек
при ее вызове в языке C/C++?

Ответ:

 (1) Сначала в стек помещается первый аргумент функции, затем второй и т.д., последний аргумент аргумент функции помещается в стек последним.  

 (2) Сначала в стек помещается последний аргумент функции, затем предпоследний и т.д., первый аргумент функции помещается в стек последним.  

 (3) В произвольном.  


Номер 4
Какие смещения относительно регистра FP
(Frame Pointer - указатель кадра)
имеют адреса локальных переменных, описанных внутри функции,
в языке C/C++?

Ответ:

 (1) Положительные, т.е. адрес любой локальной переменной равен FP+S, где константа S>0.  

 (2) Отрицательные, т.е. адрес любой локальной переменной равен FP-S, где константа S>0.  

 (3) Смещения равны нулю.  


Упражнение 8:
Номер 1
Рассмотрим рекурсивную реализацию алгоритма Евклида:

int gcd1(int m, int n) {
    if (n == 0)
        return m;
    int r = m % n;
    return gcd1(n, r);
}

Укажите, какова будет глубина рекурсии (т.е. какое максимальное
количество кадров локальных переменных функции gcd1
будет размещено одновременно в аппаратном стеке) при следующем
вызове функции:

    int d = gcd1(25, 35);


Ответ:

 (1) 2  

 (2) 3  

 (3) 4  

 (4) 5  


Номер 2
Рассмотрим рекурсивную реализацию алгоритма Евклида:

int gcd1(int m, int n) {
    if (n == 0)
        return m;
    int r = m % n;
    return gcd1(n, r);
}

Укажите, какова будет глубина рекурсии (т.е. какое максимальное
количество кадров локальных переменных функции gcd1
будет размещено одновременно в аппаратном стеке) при следующем
вызове функции:

    int d = gcd1(7, 17);


Ответ:

 (1) 2  

 (2) 3  

 (3) 4  

 (4) 5  


Номер 3
Рассмотрим рекурсивную реализацию алгоритма Евклида:

int gcd1(int m, int n) {
    if (n == 0)
        return m;
    int r = m % n;
    return gcd1(n, r);
}

Укажите, какова будет глубина рекурсии (т.е. какое максимальное
количество кадров локальных переменных функции gcd1
будет размещено одновременно в аппаратном стеке) при следующем
вызове функции:

    int d = gcd1(21, 56);


Ответ:

 (1) 2  

 (2) 3  

 (3) 4  

 (4) 5  




Главная / Программирование / Программирование / Тест 34