Рубрики

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

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

1) Что печатает следующий фрагмент C-программы?

char c[] = "GATE2011";

char *p =c;

printf("%s", p + p[3] - p[1]) ;

(A) GATE2011
(B) E2011
(С) 2011
(D) 011

Ответ: (с)
Смотрите комментарии для объяснения.

char c[] = "GATE2011";

 

 // p теперь имеет строку базового адреса "GATE2011"

char *p =c; 

 
// p [3] - это «E», а p [1] - это «A».
// p [3] - p [1] = ASCII-значение «E» - ASCII-значение «A» = 4
// Таким образом, выражение p + p [3] - p [1] становится p + 4, которое
// базовый адрес строки "2011"

printf("%s", p + p[3] - p[1]) ; 

2) Рассмотрим следующую рекурсивную функцию C, которая принимает два аргумента

unsigned int foo(unsigned int n, unsigned int r) {

  if (n  > 0) return (n%r +  foo (n/r, r ));

  else return 0;

}

Каково возвращаемое значение функции foo, когда она вызывается как foo (513, 2)?
(А) 9
(Б) 8
(С) 5
(D) 2

Ответ: (Д)
foo (513, 2) вернет 1 + foo (256, 2). Все последующие рекурсивные вызовы (включая foo (256, 2)) вернут 0 + foo (n / 2, 2), кроме последнего вызова foo (1, 2). Последний вызов foo (1, 2) возвращает 1. Итак, значение, возвращаемое foo (513, 2), равно 1 + 0 + 0…. + 0 + 1.
Функция foo (n, 2) в основном возвращает сумму битов (или количество установленных бит) в числе n.


3) Каково возвращаемое значение функции foo, когда она вызывается как foo (345, 10)?

(А) 345
(Б) 12
(С) 5
(D) 3

Ответ: (Б)
Вызов foo (345, 10) возвращает сумму десятичных цифр (потому что r равно 10) в числе n. Сумма цифр для 345 составляет 3 + 4 + 5 = 12.

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

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

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

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

0.00 (0%) 0 votes