Рубрики

ВОРОТА | GATE IT 2006 | Вопрос 50

Какой из приведенных ниже вариантов будет напечатан при выполнении следующей программы?

#include

void swap (int *x, int *y)

{

    static int *temp;

    temp = x;

    x = y;

    y = temp;

}

void printab ()

{

    static int i, a = -3, b = -6;

    i = 0;

    while (i <= 4)

    {

        if ((i++)%2 == 1) continue;

        a = a + i;

        b = b + i;

    }

    swap (&a, &b);

    printf("a =  %d, b = %d\n", a, b);

}
main()
{

    printab();

    printab();

(А) а = 0, б = 3
а = 0, б = 3
(B) a = 3, b = 0
а = 12, б = 9
(С) а = 3, б = 6
а = 3, б = 6
(D) a = 6, b = 3
а = 15, б = 12

Ответ: (D)
Объяснение:

Что нужно обдумать:

функция swap на самом деле не меняет местами две переменные, а просто меняет их адреса в локальных переменных x и y — что фактически ничего не значит, когда функция swap возвращает

функция printab добавляет 9 к статическим переменным a и b. Число 9 исходит из того факта, что цикл while выполняет эти арифметические операторы только тогда, когда i = 1, 3, 5.

Следовательно, когда printab вызывается в первый раз, это значения локальной переменной: a = −3 + 9 и b = −6 + 9. Во второй раз a = −3 + 9 + 9 и b = −6 + 9 + 9 — желаемые значения.
Следовательно, правильный ответ будет (D) a = 6, b = 3; а = 15, б = 12.

Это решение предоставлено Винет Пурсвани .
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE IT 2006 | Вопрос 50

0.00 (0%) 0 votes