![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
c语言编程问题
2个回答
展开全部
我解释下递归函数吧:f(6)中有f(6/2)即f(3)和printf函数,但要等f(3)执行完后才执行printf函数(输出6),f(3)中有f(3/2)即f(1)和printf函数,但要等f(1)执行完后才执行printf函数(输出3)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是个递归问题,fun()函数在函数体内部又调用了自己。
具体解法可以这样理解:
1、执行if(x/2>0)
2、若结果为真,执行fun(x/2);,后面那句printf("%d",x);暂时不执行
3、当执行完fun(x/2)[里面可能还包含了fun()这样的调用],再执行第2步中未执行的printf("%d",x);
举例:fun(6);
1、执行if(6/2>0)
2、由于6/2=3,所以,执行fun(6/2),即fun(3),这时,printf("%d",x=6)这句暂时不执行,等fun(3)执行完了再执行。
3、执行fun(3),这又是一个fun()函数,所以,仍然先判断if(3/2>0),
4、显然,3/2=1,大于0,这时,先执行fun(1/2),printf("%d",x=3)暂不执行,等fun(1/2)执行完了再执行
5、1/2=0,所以,不符合要求,执行printf("%d",x=1);
6、这时,fun(1/2)便执行完了,接着,需要执行刚才未执行的printf("%d",x=3)
7、printf("%d",x=3)也执行完了,需要执行刚才未执行的printf("%d",x=6)
最后,得到的结果就是136
对于
main0
{
int
x=20;
printf("%d“,0<x<20);
printf("%d",0<x&&x<20);}
这个是一个判断条件的问题。关键是要看这几个符号的结合顺序。
0<x<20);自左向右结合,首先是判断0<x,由于x=20,显然,这个是真,结果是1,接着,1<20,这个也是真,所以,整个表达式的结果是1
0<x&&x<20,等价于(0<x)&&
(x<20),左边是真,右边是假,&&要两边是真,结果才是真,所以,这个表达式的结果是假,即0
具体解法可以这样理解:
1、执行if(x/2>0)
2、若结果为真,执行fun(x/2);,后面那句printf("%d",x);暂时不执行
3、当执行完fun(x/2)[里面可能还包含了fun()这样的调用],再执行第2步中未执行的printf("%d",x);
举例:fun(6);
1、执行if(6/2>0)
2、由于6/2=3,所以,执行fun(6/2),即fun(3),这时,printf("%d",x=6)这句暂时不执行,等fun(3)执行完了再执行。
3、执行fun(3),这又是一个fun()函数,所以,仍然先判断if(3/2>0),
4、显然,3/2=1,大于0,这时,先执行fun(1/2),printf("%d",x=3)暂不执行,等fun(1/2)执行完了再执行
5、1/2=0,所以,不符合要求,执行printf("%d",x=1);
6、这时,fun(1/2)便执行完了,接着,需要执行刚才未执行的printf("%d",x=3)
7、printf("%d",x=3)也执行完了,需要执行刚才未执行的printf("%d",x=6)
最后,得到的结果就是136
对于
main0
{
int
x=20;
printf("%d“,0<x<20);
printf("%d",0<x&&x<20);}
这个是一个判断条件的问题。关键是要看这几个符号的结合顺序。
0<x<20);自左向右结合,首先是判断0<x,由于x=20,显然,这个是真,结果是1,接着,1<20,这个也是真,所以,整个表达式的结果是1
0<x&&x<20,等价于(0<x)&&
(x<20),左边是真,右边是假,&&要两边是真,结果才是真,所以,这个表达式的结果是假,即0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询