以下问题已在 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 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。