На экзамене GATE 2012 были заданы следующие вопросы.
1. Каким будет выход следующего сегмента программы на С?
|
(А) Нет выбора
(Б) Выбор А
(С) Выбор А
Вариант Б Нет выбора
(D) Программа не выдает результатов, поскольку она ошибочна
Ответ (С)
В случае «А» нет оператора разрыва. Если кейс выполнен и не содержит break, то все последующие кейсы выполняются до тех пор, пока не будет найден оператор break. Вот почему все внутри коммутатора печатается.
Попробуйте следующую программу в качестве упражнения.
|
2. Рассмотрим следующую C-программу
|
Какой вывод будет сгенерирован данным сегментом кода?
(А) 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 | Набор 10
- Язык C | Комплект 8
- Язык C | Набор 7
- Язык C | Комплект 6
- Язык C | Комплект 5
- Язык C | Набор 4
- Язык C | Набор 3
- Язык C | Набор 2
- Язык C | Комплект 1
- DFA для принятия языка L = {a n b m | п + т = нечетные}
- DFA для принятия языка L = {a n b m | n + m = четный}
- NPDA для принятия языка L = {a n b n c m | м, п> = 1}
- NPDA для принятия языка L = {a m b n c p d q | m + n = p + q; т, п, р, д> = 1}
- NPDA для принятия языка L = {a m b (2m) | м> = 1}
- NPDA для принятия языка L = {a n b n | п> = 1}
0.00 (0%) 0 votes