两道C语言看程序谢结果题不会,哪位高手能帮忙解释一下,直接给答案就算了,我是新手。

1.
#include<stdio.h>
void f(int x)
{ if(x)
{ putchar(x%10+'0');
f(x/10);
}

}
main()
{ f(12340); }

2.
main()
{ int i = 3, j = 2, k;
k=i+k;

{ int k=8;
if(i=4)

printf("%d",k);
else

printf("%d%d",j);

}

printf("%d%d",i,k)

}

第一题:
输出结果: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个回答  2013-02-25
1 f函数为递归函数, putchar(x%10+'0'); 为取x的个位字符并输出。
f(x/10) /10以后再递归。也就是将12340输出到屏幕。

2考的是变量作用域问题。
但代码不正确,如i=4 应为i==4,
printf("%d%d",j);中少一变量。
k未初始化,debug与release 结果会不同。本回答被提问者采纳
第2个回答  2013-02-25
第一题是讲输入的12340反向打印出来,即屏幕上显示的结果为04321.
putchar(x%10+'0')是将x除以十之后的余数以字符的形式打印出来,即后面加'0'的意义。
第二题代码有问题,请仔细查看题目后再提问。
第3个回答  2013-02-25
孩子 自己上机运行不就解决了
第4个回答  2013-02-25
第一道题:04321
第二道题感觉有点问题
相似回答