以下问题已在 GATE CS 2010 考试中提出。
1. 下面的程序打印什么?
#include
void f(int *p, int *q)
{
p = q;
*p = 2;
}
int i = 0, j = 1;
int main()
{
f(&i, &j);
printf("%d %d \n", i, j);
getchar();
return 0;
}
(一) 2 2
(乙) 2 1
(C) 0 1
(D) 0 2
答案 (D)
请参阅下面的 f() 和注释以获取解释。
/* p points to i and q points to j */
void f(int *p, int *q)
{
p = q; /* p also points to j now */
*p = 2; /* Value of j is changed to 2 now */
}
2、下面的C程序打印出来的值是多少?
#include
int f(int *a, int n)
{
if(n <= 0) return 0;
else if(*a % 2 == 0) return *a + f(a+1, n-1);
else return *a - f(a+1, n-1);
}
int main()
{
int a[] = {12, 7, 13, 4, 11, 6};
printf("%d", f(a, 6));
getchar();
return 0;
}
(一)-9
(乙) 5
(三) 15
(四) 19
答案 (C)
f() 是一个递归函数,如果 *a 是偶数,它会将 f(a+1, n-1) 添加到 *a。如果 *a 是奇数,则 f() 从 *a 中减去 f(a+1, n-1)。请参阅下面的递归树以执行 f(a, 6)。
.
f(add(12), 6) /*Since 12 is first element. a contains address of 12 */
|
|
12 + f(add(7), 5) /* Since 7 is the next element, a+1 contains address of 7 */
|
|
7 - f(add(13), 4)
|
|
13 - f(add(4), 3)
|
|
4 + f(add(11), 2)
|
|
11 - f(add(6), 1)
|
|
6 + 0
所以,最终的返回值是 12 + (7 – (13 – (4 + (11 – (6 + 0))))) = 15
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。