for(k=0;k<5;k++)printf("%d",a[k]);
答案:4 悬赏:60 手机版
解决时间 2021-03-18 06:01
- 提问者网友:送舟行
- 2021-03-17 20:11
for(k=0;k<5;k++)printf("%d",a[k]);
最佳答案
- 五星知识达人网友:罪歌
- 2021-03-17 20:38
你好,原因是程序里循环了两次。在fun函数里用do while实现了a[0] a[1]元素的叠加。for(k=1;k<3;k++)又循环了一次,
所以for(k=1;k<3;k++)fun(a);就不需要了。改成fun(a);就好了。追问这是书中的题目,为何答案是35745追答额,。。。。居然被推荐鸟。。。仔细看了下,确实答案是35745
重点在于static int j上,j是静态变量,fun函数中调用导致j值的变化被保存,并影响下一次运行。
现在分析一下:for(k=1;k<3;k++)fun(a);
k = 1时,调用fun(a);
第一次循环:j等于0,a[0] = a[0] + a[1]; a值变为32345;
第二次循环,j等于1,a[1] = a[1] + a[2]; a值变为35345
然后++j,j等于2,++j<2不成立,退出循环,退出fun函数
k = 2,调用fun(a);
第一次循环;因为j保存了上次运行的值,j = 2; do while结构先循环。
a[2] = a[2] + a[3]; a值变为35745
然后++j = 3,,++j<2不成立,退出循环,退出fun函数
k = 3, for循环退出。
所以最后a值变为35745
所以for(k=1;k<3;k++)fun(a);就不需要了。改成fun(a);就好了。追问这是书中的题目,为何答案是35745追答额,。。。。居然被推荐鸟。。。仔细看了下,确实答案是35745
重点在于static int j上,j是静态变量,fun函数中调用导致j值的变化被保存,并影响下一次运行。
现在分析一下:for(k=1;k<3;k++)fun(a);
k = 1时,调用fun(a);
第一次循环:j等于0,a[0] = a[0] + a[1]; a值变为32345;
第二次循环,j等于1,a[1] = a[1] + a[2]; a值变为35345
然后++j,j等于2,++j<2不成立,退出循环,退出fun函数
k = 2,调用fun(a);
第一次循环;因为j保存了上次运行的值,j = 2; do while结构先循环。
a[2] = a[2] + a[3]; a值变为35745
然后++j = 3,,++j<2不成立,退出循环,退出fun函数
k = 3, for循环退出。
所以最后a值变为35745
全部回答
- 1楼网友:有你哪都是故乡
- 2021-03-17 22:19
v刹
- 2楼网友:动情书生
- 2021-03-17 22:11
请说明此段代码要做什么?追问这是书中的题目,为何答案是35745
- 3楼网友:醉吻情书
- 2021-03-17 21:51
第一次循环结果:35345
第二次循环结果:35745
解释:看清static int j=0说明t循环第一次后保留值为t=2,由于是do while 因此要执行一次s[j]+=s[j+1];也就是s[2]+=s[3],得结果如上
第二次循环结果:35745
解释:看清static int j=0说明t循环第一次后保留值为t=2,由于是do while 因此要执行一次s[j]+=s[j+1];也就是s[2]+=s[3],得结果如上
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯