以下程序的输出?
#include
void print(int n)
{
if (n > 4000)
return;
printf("%d ", n);
print(2*n);
printf("%d ", n);
}
int main()
{
print(1000);
getchar();
return 0;
}
(A) 1000 2000 4000
(B) 1000 2000 4000 4000 2000 1000
(C) 1000 2000 4000 2000 1000
(D) 1000 2000 2000 1000答案: (B)
说明:第一次n = 1000
然后通过第一个printf函数打印1000,然后调用print(2 * 1000),然后再次通过printf函数打印2000,然后调用print(2 * 2000),并在下次调用print(4000 * 2)时打印40000。
在这里8000大于4000,条件变为true,并返回到函数(2 * 4000)。在这里n = 4000,然后4000将再次通过第二个printf打印。
类似地,在n = 2000之后,print(2 * 2000)然后将打印2000并返回到print(2 * 1000),这里n = 1000,因此通过第二个printf打印1000。
选项(B)是正确的。
这个问题的测验