二级C语言的问题 int f() { static int i=0; int s=1; s+=i; i++; return s; }

main(){inti,a=0;for(i=0;i<5;i++)a+=f();printf("%d\n",a)}... main() { int i,a=0; for(i=0;i <5;i++) a+=f(); printf("%d\n",a) } 展开
 我来答
就是这样的夜
2011-08-16 · TA获得超过838个赞
知道小有建树答主
回答量:820
采纳率:0%
帮助的人:514万
展开全部
static int i=0是静态变量,也就是说在程序整个生命周期里都是稳定存在的。因此每调用一次f(),由于i++而增加1;s是局部变量,每次调用都重新分配而初始化为0
因此f()返回是1,2,3,4,5……,每次调用都加1
了解这点,问题就好解决了。
百度网友0b84527
2018-12-30
知道答主
回答量:2
采纳率:0%
帮助的人:1131
展开全部
我就不用专业术语来回答了(因为我不太懂)static int i=0 如果出现在函数的内部的话,i就是是变的(每次用都是i上一次的值),如果以 static int i=0 f(){ }这种形式出现的话就是不可变的(每次用都是0)。这道题中 static int i=0在函数内部,而函数最后有i++,所以i每次循环i都加1,而s每次都是1(前面没有 static)比如当i=2时s=1+2=3。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
2009011317
2011-08-16 · TA获得超过104个赞
知道答主
回答量:176
采纳率:0%
帮助的人:84万
展开全部
第1次:s=1 ;i=0;return 1;
第2次:s=2;i=2;return 2;
第3次:s=4 ;i=3;return 4;
第4次:s=7 ;i=4;return 7;
第5次:s=11 ;i=5;return 11;
a=1+2+4+7+11=25
楼上错,i为static
追问
答案是15.你算错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0548924
2018-07-09
知道答主
回答量:5
采纳率:0%
帮助的人:4103
展开全部
函数f中变量i为静态变量,函数f调用结束后变量i所占据的存储单元不会释放,而在主函数中f被调用5次,具体过程如下: 第1次调s=s+i=1+0=1,i=i+1=1,主函数中a=a+f()=0+1=1 第2次调用f:s=s+i=1+1=2,i=i+1=2,主函数中a=a+f()=1+2=3 第3次调用f:s=s+i=1+2=3,i=i+1=3,主函数中a=a+f()=3+3=6 第4次调用f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10 第5次调用f:s=s+i=1+4=5,i=i+4=5,主函数中a=a+f()=10+5=15 所以printf语句的输出结果为15。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoalyg
推荐于2017-09-09 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2375万
展开全部
主函数5次调用函数f(),下面列出每次调用前后的变量s,i,a的值。
1次: s = 1,i = 1,a = 1
2次: s = 2,i = 2,a = 3
3次: s = 3,i = 3,a = 6
4次: s = 4,i = 4,a = 10
5次: s = 5,i = 5,a = 15
故最后的打印结果是: 15
追问
3Q...真的是太感謝你了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式