📜  C语言 | 8套

📅  最后修改于: 2021-09-28 10:01:42             🧑  作者: Mango

以下问题已在 GATE CS 2011 考试中提出。

1) 下面的 C 程序片段打印了什么?

char c[] = "GATE2011";
char *p =c;
printf("%s", p + p[3] - p[1]) ;

(一) GATE2011
(B) E2011
(三) 2011
(四) 011

答案:(C)
请参阅注释以获取解释。

char c[] = "GATE2011";
 
 // p now has the base address string "GATE2011"
char *p =c; 
 
// p[3] is 'E' and p[1] is 'A'.  
// p[3] - p[1] = ASCII value of 'E' - ASCII value of 'A' = 4
// So the expression  p + p[3] - p[1] becomes p + 4 which is 
// base address of string "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
(四) 2

答案:(D)
foo(513, 2) 将返回 1 + foo(256, 2)。除了最后一次调用 foo(1, 2) 之外,所有后续的递归调用(包括 foo(256, 2))都将返回 0 + foo(n/2, 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
(四) 3

答案:(乙)
调用 foo(345, 10) 返回数字 n 中十进制数字的总和(因为 r 是 10)。 345 的数字总和是 3 + 4 + 5 = 12。

请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。