此C程序将获取存储在变量a中的值并逐个打印。
#include <stdio.h>
void foo(int n, int sum)
{
int k = 0, j = 0;
if (n == 0)
return;
k = n % 10;
j = n / 10;
sum = sum + k;
foo (j, sum);
printf ("%d, ", k);
}
int main ()
{
int a = 2048, sum = 0;
foo (a, sum);
printf("\n");
return 0;
}
输出:
2, 0, 4, 8,
当函数foo执行时:
1)第一次:n = 2048, k = 8 ,j = 204,sum = 8
2)第二次:n = 204, k = 4 ,j = 20,sum = 12
3)第三次:n = 20, k = 0 ,j = 2,sum = 12
4)第四次:n = 2, k = 2 ,j = 0,sum = 14
如果我替换了该行(存在于foo函数中):
printf ("%d, ", k);
用这个:
printf ("%d | %d, ", k, sum);
输出:
2 | 14, 0 | 12, 4 | 12, 8 | 8,
有人可以解释一下这个程序是如何运作的:
1)它的打印值如何存储在 a ?
中2)按此顺序:2,0,4,8,?
3)当我们打印 k 的值时,为什么 sum 的值会发生变化?
4)当 n 变为0时会发生什么?
答案 0 :(得分:1)
foo
上调用a
函数。printf
中致电foo
之前将通话移至foo
,看看是否有任何不同。sum
正在发生变化,因为您正在执行sum = sum + k
并将其传递给以后的所有电话。n
由于重复分割而最终变为0
时,对foo
的最后一次调用开始返回并跟随它们之后所有先前的调用都会在打印出使用{提取的数字后开始返回{1}}