игра брюс 2048
Главная / Программирование / Основы программирования - обучения основам / Тест 9

Основы программирования - обучения основам - тест 9

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

    int i = 10;
    while (i <= 1000) {
        i *= 2;
    }


Ответ:

 (1) Значение i равно 512. 

 (2) Значение i равно 640. 

 (3) Значение i равно 1024. 

 (4) Значение i равно 1280. 


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

    int n = 1000;
    while (n > 100) {
        n /= 2;
    }


Ответ:

 (1) Значение n равно 50.  

 (2) Значение n равно 56.  

 (3) Значение n равно 62.  


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

    int n = 3, k = 5;
    while (n != k) {
        n = (n * 2) % 11;
        k = (k * 7) % 11;
    }


Ответ:

 (1) Значение n равно 2.  

 (2) Значение n равно 3.  

 (3) Значение n равно 4.  

 (4) Значение n равно 10.  


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

    int n = 0;
    int i = 2;
    switch (i) {
        case 2:
            n += 2;
        case 4:
            n += 2;
            break;
        default:
            n += 6;
    }


Ответ:

 (1) Значение n равно 2.  

 (2) Значение n равно 4.  

 (3) Значение n равно 6.  

 (4) Значение n равно 10.  


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

    int n = 33;
    switch (n % 4) {
        case 1:
            n += 3;
        case 2:
            n += 2;
        case 3:
            ++n;
            break;
        default:
            ++n;
    }


Ответ:

 (1) Значение n равно 34.  

 (2) Значение n равно 36.  

 (3) Значение n равно 39.  

 (4) Значение n равно 40.  


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

    int n = 1;
    int i = 3;
    switch (i) {
        case 4:
            n *= 7;
        case 3:
            n *= 5;
        case 2:
            n *= 3;
        case 1:
            n *= 2;
            break;
        default:
            n = (-1);
    }


Ответ:

 (1) Значение n равно 3.  

 (2) Значение n равно 5.  

 (3) Значение n равно 7.  

 (4) Значение n равно 15.  

 (5) Значение n равно 30.  


Упражнение 3:
Номер 1
Где располагаются переменные, описанные внутри
функции, в описании которых отсутствуют модификаторы типа?

Ответ:

 (1) В статической памяти.  

 (2) В динамической памяти.  

 (3) В стеке.  


Номер 2
Где располагаются глобальные переменные?

Ответ:

 (1) В статической памяти.  

 (2) В динамической памяти.  

 (3) В стеке.  


Номер 3
Рассмотрим следующий фрагмент программы на Си:

    static int *p = 0;
    . . .
    p = (int *) malloc(sizeof(int));
    *p = 123;

Где хранится значение выражения "*p" (т.е.
число 123)?

Ответ:

 (1) В статической памяти.  

 (2) В динамической памяти.  

 (3) В стеке.  


Упражнение 4:
Номер 1
Прототип функции, которая вычисляет сумму элементов массива a
длины n, выглядит следующим образом:

    double sum(const double *a, int n);

Можно ли в описании этой функции и ее прототипа опустить слово const?
(Могут ли при этом в корректной программе возникнуть
ошибки или предупреждения на стадии компиляции?)

Ответ:

 (1) Нельзя (могут возникнуть ошибки компиляции или предупреждения в корректной программе).  

 (2) Можно (ошибки компиляции или предупреждения при таком изменении в корректной программе не возникнут).  


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

    double power(const double a, const double n);

Можно ли в описании этой функции и ее прототипа опустить слова const?
(Могут ли при этом в корректной программе возникнуть
ошибки или предупреждения на стадии компиляции?)

Ответ:

 (1) Нельзя (могут возникнуть ошибки компиляции или предупреждения в корректной программе).  

 (2) Можно (ошибки компиляции или предупреждения при таком изменении в корректной программе не возникнут).  


Номер 3
Прототип функции, которая ищет вхождение строки
s2 в строку s1,
выглядит следующим образом:

    int find(char *s1, char *s2);

функция возвращает смещение подстроки
s2 относительно начала строки s1
в случае успеха или (-1) в случае неудачи.
Можно ли воспользоваться функцией find в приведенном ниже
фрагменте программы
(будут ли выданы сообщения об ошибках или предупреждения
при компиляции этого фрагмента)?

    void f(char s[1024], const char p[64]) {
        int pos = find(s, p);
        . . .
    }


Ответ:

 (1) Нельзя (при компиляции этого фрагмента будут выданы сообщения об ошибках или предупреждения).  

 (2) Можно (при компиляции этого фрагмента сообщений об ошибках или предупреждений не будет).  


Упражнение 5:
Номер 1
Пусть описана структура

    struct List {
        struct List *next;
        void *value;
    };

и переменые

    struct List e, *p;
    int m;

Укажите все корректные выражения языка Си среди перечисленных
ниже:

Ответ:

 (1) e = *p  

 (2) m = *(int*) p->next->value  

 (3) m = e->value  

 (4) m = *(e.value)  


Номер 2
Пусть описана структура

    struct Tree {
        struct Tree *left;
        struct Tree *right;
        void *value;
    };

и переменые

    struct Tree *t1, *t2;
    int m;

Укажите все корректные выражения языка Си среди перечисленных
ниже:

Ответ:

 (1) t1 = t2  

 (2) *t1 = *t2  

 (3) t1 = t2->left  

 (4) *t1 = t2->right  

 (5) m = *(int*) t1->left->right->value  


Номер 3
Пусть описана структура

    struct Line {
        int len;
        char *str;
    };

и переменые

    struct Line s1, *s2;
    int n; char c;

Укажите все корректные выражения языка Си среди перечисленных
ниже:

Ответ:

 (1) s1 == *s2  

 (2) s1 = *s2  

 (3) n = s1.len  

 (4) c = s2->str[2]  


Упражнение 6:
Номер 1
Пусть описан тип R2Vector, представляющий вектор
на плоскости с вещественными координатами:

    typedef struct {
        double x;
        double y;
    } R2Vector;

также описаны три переменные u, v и
w типа вектор и вещественная переменная s:

    R2Vector u, v, w;
    double s;

при этом известно, что переменные u и v
содержат два конкретных
вектора единичной длины.
Пусть в результате выполнения следующего фрагмента программы
значение переменной s приблизительно равно 0.7071,
т.е. корню из двух, деленному пополам:

    w.x = (-u.y); w.y = u.x;
    s = v.x * w.x + v.y * w.y;
    // s == 0.7071

На какой угол надо повернуть вектор u,
чтобы получить вектор v?

Ответ:

 (1) На угол 30 градусов по часовой стрелке.  

 (2) На угол 30 градусов против часовой стрелке.  

 (3) На угол 45 градусов по часовой стрелке.  

 (4) На угол 45 градусов против часовой стрелки.  


Номер 2
Пусть описан тип R2Vector, представляющий вектор
на плоскости с вещественными координатами:

    typedef struct {
        double x;
        double y;
    } R2Vector;

также описаны три переменные u, v и w
типа вектор и вещественная переменная s:

    R2Vector u, v, w;
    double s;

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

    v.x = (-u.y);
    v.y = u.x;
    w.x = u.x + v.x;
    w.y = u.y + v.y;
    s = sqrt(w.x * w.x + w.y * w.y);

(функция sqrt извлекает квадратный корень из вещественного
числа).

Ответ:

 (1) Значение s приблизительно равно 1.  

 (2) Значение s приблизительно равно 0.5.  

 (3) Значение s приблизительно равно 1.41421 (корню из двух).  

 (4) Значение s приблизительно равно 0.866 (корню из трех пополам).  


Номер 3
Пусть описан тип R2Vector, представляющий вектор
на плоскости с вещественными координатами,

    typedef struct {
        double x;
        double y;
    } R2Vector;

также описаны три переменные
u, v и w типа вектор
и вещественная переменная s:

    R2Vector u, v, w;
    double s;

при этом переменная u содержат конкретный вектор
единичной длины, а вектор v получается из
u вращением на 30 градусов по часовой
стрелке. Указать, чему будет приблизительно равно
значение вещественной переменной s в результате
выполнения следующего фрагмента программы:

    w.x = (-u.y); w.y = u.x;
    s = v.x * w.x + v.y * w.y;


Ответ:

 (1) Значение s приблизительно равно 0.5.  

 (2) Значение s приблизительно равно -0.5.  

 (3) Значение s приблизительно равно 0.866 (корню из трех пополам).  

 (4) Значение s приблизительно равно -0.866 (минус корню из трех пополам).  




Главная / Программирование / Основы программирования - обучения основам / Тест 9