c语言求解

[复制链接]
查看11 | 回复4 | 2010-9-16 22:05:59 | 显示全部楼层 |阅读模式
以下程序的输出结果是【13】。
#include
void fun(int x)
{ if(x/2>0) fun(x/2);
printf(“%d ”,x);
}
main()
{fun(3); printf(“\n”);}
怎么做的啊?

回复

使用道具 举报

千问 | 2010-9-16 22:05:59 | 显示全部楼层
首先要注意fun函数的参数类型是int型,这说明它会对任一个数取整。当参数为3时:x/2=1.5=1>0,再调用函数自身,传进去的参数是1,即这次调用的函数参数x=1,1/2=0.5=0=0,不满足条件,故不执行if语句,直接打印x=1;然后返回第一次调用处,因为形参的改变不影响实参,所以这里的x的值仍为3,再次打印3,返回主函数。输出结果是 1 3 不好意思,刚刚打错了!
回复

使用道具 举报

千问 | 2010-9-16 22:05:59 | 显示全部楼层
做法有不少,有没有一些别的什么条件限制?
回复

使用道具 举报

千问 | 2010-9-16 22:05:59 | 显示全部楼层
fun函数中调用fun(x/2)由于x/2 (整型相除后)等于1, 所以调用fun(1),在其内部 就不在继续进入条件语句调用下一级fun,所以输出 1 后,将执行权交回给第一个fun函数,继续输出开始给的参数 3由于两次输出没有换行符,所以是13/////////////////////// DEV C++ 下调试成功#includ
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行