C语言的问题,这道题怎么做啊? 50

求详细解答... 求详细解答 展开
 我来答
听不清啊
高粉答主

2019-09-08 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

这个题,就是选择答案D。

图中,if(n/2)其实就是等价于if(n/2!=0),考虑到n是正数,它也就等价于if(n>1)

总之,

第一次调用,就满足条件,进行递归调用:fun(5)…………

具体见图所示(一个红框,就是一次函数调用):

依输出的先后次序,总的输出就是:1010

自我编程
2019-09-08 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

打印1010。

这是递归函数每次执行到调用自己的时候,要等调用的那个执行完才会返回继续执行下一条语句。

也就是说

if(n/2)fun(n/2);//每一次调用自己的这一句执行结束,才会执行下面的打印。

 printf("%d",n%2);

所以每一层都会打印自己的变量n%2的值。而最先执行打印的是最里一层的调用,整个执行过程分别是fun(10)->fun(5)->fun(2)->fun(1)。

既打印1%2,2%2,5%2,10%2,也就是1010。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chinaboyzyq
2019-09-07 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:3204万
展开全部
考你递归的用法:
10送入fun(10)
void fun(int n)
{
if(n/2)fun(n/2);//自身调用部分

printf("%d",n%2);//压栈部分
}

n/2=5,条件为真,调用函数fun(5),printf("%d",10%2);被压栈
n/2=2,条件为真,调用函数fun(2),printf("%d",5%2);被压栈
n/2=1,条件为真,调用函数fun(1),printf("%d",2%2);被压栈
n/2=0,条件为假,打印printf("%d",1%2);也就是1
由于栈是先进后出的,所以反相出栈,打印printf("%d",2%2);也就是0
然后打印printf("%d",5%2);也就是1
然后打印printf("%d",10%2);也就是0
所以结果为:1010
更多追问追答
追问
printf语句是不会被执行的吧?因为调用啊,执行到fun时,就转去调用,所以直到条件为假时,printf才会被执行啊
难道不是这么做的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夏天的小红花

2019-09-08 · TA获得超过4810个赞
知道大有可为答主
回答量:1万
采纳率:83%
帮助的人:694万
展开全部
这是一个把十进制数n转换为二进制数的程序,选择答案d。程序的运行是这样的,里面判断语句的功能就是说,如果n除以2的值大于0,就进行递归调用。这个语句也可以写成为如果n大于1就进行递归调用。等到递归调用返回时,再输出这个n除以2的余数,但是这个操作是要等递归调用返回后才输出的,所以是最后一次调用的时候的输出是最靠前的。这样就实现了反向除二取余数的功能,也就是说把n转换为二进制进行输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琴旧可1
2019-09-06 · TA获得超过3620个赞
知道大有可为答主
回答量:4881
采纳率:85%
帮助的人:222万
展开全部
四题选项B和D明显是相反条件啊,你只要判断出D是等价的,B肯定就是不等价的啊。
再说题意,while( E ) 就是说只有E的值为0的时候,条件判断结果为:false
D选项中 ( E != 0 ),当 E 的值为 0 的时候,条件判断为假:false----等价
B选项中 ( E == 0 ), 当 E 的值为 0 的时候,条件判断为真:true----不等价
综上,选B
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式