一道C语言题目,求大神给答案~输出是多少?

#include<stdio.h>intfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=s;i++... #include<stdio.h>
int fun()
{
static int x=1;
x+=1;return x;
}
main()
{
int i,s=1;
for(i=1;i<=s;i++) s+=fun();
printf("%d\n",s);
}
展开
 我来答
百度网友e67036324
2012-09-18 · 超过12用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:40.2万
展开全部
在这个程序中主要看哪个static这是静态的意思 也就是说 当fun()函数运算完也不释放x的值 直到mian()函数执行完才释放x的值,这个程序的运行顺序就是,先进入到mian()函数,做循环,s=s+fun()到这句的时候会去调用fun()函数 这是返回x=x+1=2 s=1+2 这时s=3 for循环中i的值自增后
i=2 这时s=3还是满足条件,这样一直循环下去,这个程序感觉不对,这样就死循环了,因为fun()函数中的x值一直没有被释放 第二次执行的时候就变为x=2+1=3了。。这样 主要就是static的作用
naeux
2012-09-19 · TA获得超过765个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:74.3万
展开全部
static int x =1; //这句说明了x是个 静态变量,每次调用函数修改的时候,会影响下次访问时的值。所以有:
第一次调用fun()函数的时候,x = 1+1 =2;
第二次调用fun()函数的时候,x = 2+1 =3;
第三次调用fun()函数的时候,x = 3+1 =4;
.....

因此,main()中for循环
i=1时, s = 1+fun() = 1 + 2 =3;
i=2时, s = 3+fun() = 3 + 3 = 6;
i=3时, s = 6+fun() = 6 + 4 = 10;
........
由于 在循环中,i 是自加1 的,而s 也是增长的,而且增长的速度比 i 增长的快,所以始终有i<=s;
因此,这个程序会陷入死循环中~~根本就执行部了printf("%d\n",s);这条语句,因为程序一直在执行上面的循环语句....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友084be23
2012-09-18 · TA获得超过102个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:98.6万
展开全部
只执行一次 随后输出3
追问
可是答案不是3啊。。。。
追答

饿 

才发现i是小等于S

会无限循环,直到s的值溢出后才能终止

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式