一道C语言程序题,求解答过程

以下程序运行后的输出结果是()intfun(ints1,ints2){if(s2<10)return(s1*10+s2%10);s1=s1*10+s2%10;s1=fun... 以下程序运行后的输出结果是()
int fun(int s1,int s2)
{
if(s2<10)
return(s1*10+s2%10);
s1=s1*10+s2%10;
s1=fun(s1,s2/10);
return(s1);
}
void main()
{
printf("%d",fun(0,1234));
};
A.4321 B.1234 C.1 D.4
答案选的是A,可我怎么算出的是D 呢
展开
 我来答
种烧饼的怪叔叔
2014-01-04 · TA获得超过2214个赞
知道小有建树答主
回答量:824
采纳率:65%
帮助的人:448万
展开全部
我们来分析下:
1)先传递0和1234给fun函数,因为s2>10,函数往下执行,s1=4,然后把s1和s2/10(123)再次传递给
fun函数。
2)由于s2/10(123)是第二次传递中s2<10判断式中的S2,他还是不能满足条件,函数往下执行。由于s1=s1*10+s2%10;s1变成了43,s2/10就是把123/10=12,把43和12再次传递给fun
3)12依然满足不了if的条件,根据上面的规则,s1变成43*10+12%10就是432,s2变成1
4)s2变成1满足if条件,函数返回s1*10+s2%10的值,其中s1传递过来的是432,s2是1,算出得4321.
更多追问追答
追问
“1)先传递0和1234给fun函数,因为s2>10,函数往下执行,s1=4,然后把s1和s2/10(123)再次传递给fun函数。”
这之后为什么不直接运行return(s1)呢,这个时候不是应该返回s1的值4吗
追答
运行return(s1)必须要有个先决条件: if(s2<10),这时候传递过来的s2的值是123,123小于10吗
詹二娃子
2014-01-04 · 超过21用户采纳过TA的回答
知道答主
回答量:169
采纳率:100%
帮助的人:48.8万
展开全部
在函数迭代过程把上一次的s1提升一个位数(乘以10)再与这一次的s2的个位数相加(s2%10),当s2已经是个位数的时候,迭代就开始返回了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chrx_1102
2014-01-04 · TA获得超过153个赞
知道小有建树答主
回答量:132
采纳率:100%
帮助的人:103万
展开全部
这是一个递归 只看fun函数很容易发现它的作用是把s2倒叙加在s1后面 所以该题选A 4321
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0d30bcd
2014-01-04 · TA获得超过301个赞
知道答主
回答量:39
采纳率:0%
帮助的人:9.8万
展开全部
这明显是一个排序问题,SI和S2比较以后,取大的,所以先取到的是4,依次是3,2,1如此排序,C语言教科书上就经典的冒泡排序法,你可以看看哇!记得选我哟
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
希望它好year
2014-01-04 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:84.4万
展开全部

你的c有问题

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lixu5233
2014-01-04 · 超过12用户采纳过TA的回答
知道答主
回答量:105
采纳率:0%
帮助的人:40.2万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式