第一题:
输出结果:04321
执行过程:从 main() 函数开始执行,执行到 f(12340),进入函数 f(int x) 中,此时参数 x 的值为12340 不等于 0 ,进入 if (x) 语句,执行 putchar (x % 10 + '0'),此时,x % 10 的值为 0 , 0 + '0' 为 '0' (因为字符 '0' ~'9' 的 ASCII 码是连续的,故 0 + '0' 为 '0', 1 + '0' 为 '1',2 + '0' 为 2,以此类推),故输出 0 ,然后执行到 f (x / 10) (注意传入参数的值为 x / 10,即1234),再次调用 f (int x) 函数,内存中将会有一个新的 f (int x) 函数被创建,此时 x 的值为 1234,同上面的情况,将输出 4 ,然后再调用 f (int x) 函数,传入的参数为 123, 将会输出 3, ……最后输出 1 ,之后再调用 f 函数的时候,传入的参数为 0 (1 / 10 的值为 0 ),情况发生了变化,if (x) 内的语句将不会被执行,这个 f 函数结束,返回调用它的地方,即上一个 f 函数,返回之后,if 语句正好执行完,这个 f 函数又结束,返回调用它的地方,……最终返回到 main 函数,返回之后没有其他语句,main 函数结束,整个程序结束。
1 f函数为递归函数, putchar(x%10+'0'); 为取x的个位字符并输出。
f(x/10) /10以后再递归。也就是将12340输出到屏幕。
2考的是变量作用域问题。
但代码不正确,如i=4 应为i==4,
printf("%d%d",j);中少一变量。
k未初始化,debug与release 结果会不同。
第一题是讲输入的12340反向打印出来,即屏幕上显示的结果为04321.
putchar(x%10+'0')是将x除以十之后的余数以字符的形式打印出来,即后面加'0'的意义。
第二题代码有问题,请仔细查看题目后再提问。
孩子 自己上机运行不就解决了