{int k,j,m;for(k=5;k>=1;k--){m=0;for(j=k;j<=5;j++)m=m+k*j;}printf("%d\n",m);}答案是15,我的迷惑:m一直在第二个for里面循环,当j<=5不成立时,跳到第一个for,可是这个for没有m啊?怎么输出m的值的?有人给我说最后是1+2+3+4+5=15,这是在求和,不懂!!!】高手讲一下吧,小弟,刚刚自学,什么都不懂!
2 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
第一次
k = 5
然后m=0
然后第二重for循环
do something
然后第二次
k=4
然后m=0
然后第二重循环
do something
。。。。
到最后一次
k=1
然后m=0
然后第二重for循环
m=0+1*1 //m=1
m=1+1*2 //m=3
m=3+1*3 //m=6
m=6+1*4 //m=10
m=10+1*5 //m=15
所以最后输出15
关键在于你的m=0放在了第一个for循环里面
每次m都被重新赋值为0
慕村225694
TA贡献1880条经验 获得超4个赞
答案确实是:15
当k取5,4,3,2的时候,虽然第二个for循环会执行,但是在第二个for循环不满足条件的时候,会跳到外层循环中,执行外层循环的时候,m首先被赋值为:0,所以当k=1时,m开始值为0,执行第二个循环的过程是:j=k=1 时:m=0+1*1 j++
j=2 时: m=1+1*2 j++
j=3 时: m=3+1*3 j++
j=4 时: m=6+1*4 j++
j=5 时: m=10+1*5 j++
j=6时:不满足条件跳出内层循环 同时k=k-1
k=0不满足循环条件,跳出外层循环,所以最后输出m的值:15
其实这个程序可以简化为:
{
int k,j,m;
m=0;
for(j=1;j<=5;j++){
m=m+j;
}
printf("%d\n",m);
}
添加回答
举报
0/150
提交
取消