一道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 呢 展开
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 呢 展开
6个回答
展开全部
我们来分析下:
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函数。
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吗
展开全部
在函数迭代过程把上一次的s1提升一个位数(乘以10)再与这一次的s2的个位数相加(s2%10),当s2已经是个位数的时候,迭代就开始返回了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个递归 只看fun函数很容易发现它的作用是把s2倒叙加在s1后面 所以该题选A 4321
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这明显是一个排序问题,SI和S2比较以后,取大的,所以先取到的是4,依次是3,2,1如此排序,C语言教科书上就经典的冒泡排序法,你可以看看哇!记得选我哟
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询