Рубрики

ВОРОТА | Gate IT 2008 | Вопрос 49

Рассмотрим программу на C, приведенную ниже. Что это печатает?

#include <stdio.h>

int main ()

{

        int i, j;

        int a [8] = {1, 2, 3, 4, 5, 6, 7, 8};

        for(i = 0; i < 3; i++) {

             a[i] = a[i] + 1;

             i++;

        }

        i--;

        for (j = 7; j > 4; j--) {

              int i = j/2;

              a[i] = a[i] - 1;

        }

        printf ("%d, %d", i, a[i]);

}

 / * Добавить код здесь. Удалите эти строки, если не пишете код * / 

(А) 2, 3
(Б) 2, 4
(С) 3, 2
(D) 3, 3

Ответ: (с)
Пояснение: будьте осторожны в области I,
есть две переменные с именем: i, с различной областью действия.

Есть 2 основных момента, которые следует учитывать при решении этого вопроса. Область действия переменной i и целочисленное деление.
Первый цикл for будет выполняться для i = 0, 2 и 4, поскольку i увеличивается внутри цикла дважды, и результирующий массив будет иметь вид a = 2, 2, 4, 4, 5, 6, 7, 8 (цикл завершится при i = 4 )
После этого значение i равно 3, так как после цикла for выполняется операция уменьшения.
Следующий цикл for выполняется для j = 7, 6 и 5, и соответствующие значения i, которые являются локальной переменной внутри цикла for, будут 3 (7/2), 3 (6/2) и 2 (5/2). Массив после этого для цикла будет
а = 2, 2, 3, 2, 5, 6, 7, 8
После цикла for текущее значение i равно 3, а элемент равен a [3] = 2.

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

ВОРОТА | Gate IT 2008 | Вопрос 49

0.00 (0%) 0 votes