Рубрики

Язык C | Комплект 9

На экзамене GATE 2012 были заданы следующие вопросы.

1. Каким будет выход следующего сегмента программы на С?

char inchar = 'A';

switch (inchar)

{

case 'A' :

    printf ("choice A \n") ;

case 'B' :

    printf ("choice B ") ;

case 'C' :

case 'D' :

case 'E' :

default:

    printf ("No Choice") ;

}

(А) Нет выбора
(Б) Выбор А
(С) Выбор А
Вариант Б Нет выбора
(D) Программа не выдает результатов, поскольку она ошибочна

Ответ (С)
В случае «А» нет оператора разрыва. Если кейс выполнен и не содержит break, то все последующие кейсы выполняются до тех пор, пока не будет найден оператор break. Вот почему все внутри коммутатора печатается.
Попробуйте следующую программу в качестве упражнения.

int main()

{

    char inchar = 'A';

    switch (inchar)

    {

    case 'A' :

        printf ("choice A \n") ;

    case 'B' :

    {

        printf ("choice B") ;

        break;

    }

    case 'C' :

    case 'D' :

    case 'E' :

    default:

        printf ("No Choice") ;

    }

}

2. Рассмотрим следующую C-программу

int a, b, c = 0;

void prtFun (void);

int main ()

{

    static int a = 1; /* строка 1 */

    prtFun();

    a += 1;

    prtFun();

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

}

  

void prtFun (void)

{

    static int a = 2; / * строка 2 * /

    int b = 1;

    a += ++b;

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

}

Какой вывод будет сгенерирован данным сегментом кода?
(А) 3 1
4 1
4 2
(Б) 4 2
6 1
6 1
(С) 4 2
6 2
2 0
(D) 3 1
5 2
5 2

Ответ (С)
'a' и 'b' являются глобальной переменной. prtFun () также имеет 'a' и 'b' в качестве локальных переменных. Локальные переменные скрывают глобальные переменные (см. Правила области действия в C ). Когда prtFun () вызывается в первый раз, локальный 'b' становится 2, а локальный 'a' становится 4.
Когда prtFun () вызывается во второй раз, используется тот же экземпляр локальной статической «a» и создается новый экземпляр «b», потому что «a» является статическим, а «b» не является статичным. Таким образом, «b» снова становится 2, а «a» становится 6.
У main () также есть собственная локальная статическая переменная с именем «a», которая скрывает глобальную «a» в main. Оператор printf () в main () обращается к локальному 'a' и печатает его значение. Тот же оператор printf () обращается к глобальному 'b', поскольку в main нет локальной переменной с именем 'b'. Кроме того, значение по умолчанию для статических и глобальных переменных типа int равно 0. Поэтому оператор printf в main () печатает 0 как значение b.

3. Какой вывод будет сгенерирован данным кодом d / сегмента, если:
Строка 1 заменяется на «auto int a = 1;»
Строка 2 заменяется на «регистр int a = 2;»

(А) 3 1
4 1
4 2
(Б) 4 2
6 1
6 1
(С) 4 2
6 2
2 0
(D) 4 2
4 2
2 0

Ответ (D)
Если мы заменим строку 1 на «auto int a = 1;», а строку 2 на «register int a = 2;», то «a» станет нестатичным в prtFun (). Выход первого prtFun () остается тем же. Но выходные данные второго вызова prtFun () изменяются, так как во втором вызове создается новый экземпляр «a». Таким образом, «4 2» печатается снова. Наконец, printf () в main выведет «2 0». Создание 'a' переменной регистра ничего не изменит в выводе.

Пожалуйста, смотрите GATE Corner для всех документов / решений / объяснений предыдущего года, учебных планов, важных дат, заметок и т. Д.

Пожалуйста, пишите комментарии, если вы найдете какие-либо неправильные ответы / объяснения, или вы хотите поделиться дополнительной информацией по темам, обсужденным выше.

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

Язык C | Комплект 9

0.00 (0%) 0 votes