一个简单的累加问题,各位c++高手请指教

来源:百度知道 编辑:UC知道 时间:2024/09/21 09:31:49
#include<iostream>

using namespace std;
int main()
{
for(int i=1,b=0;i<=5;){
b+=i;
i++;
}
cout<<b<<'\n';
}
结果是15这个我理解,可是我很好奇的把b+=i 和i++顺序相颠倒,得出的结果却是20,这是为什么呢,请各位高手指教,详细解释一下,谢谢了!!以下是颠倒后的程序:
#include<iostream>

using namespace std;
int main()
{
for(int i=1,b=0;i<=5;){
i++;
b+=i;
}
cout<<b<<'\n';
}

for(int i=1,b=0;i<=5;){
i++;
b+=i;
}

一步一步来看
1. 先是i++ i=2 然后b+=i b=2
2. 先是i++ i=3 然后b+=i b=5
3. 先是i++ i=4 然后b+=i b=9
4. 先是i++ i=5 然后b+=i b=14 i<=5所以还会做多一步运算
5. 先是i++ i=6 然后b+=i b=20


for(int i=1,b=0;i<=5;){
b+=i;
i++;
}
是先做b+=i的运算
1. 先是b+=i b=1 然后i++ i=2
2. 先是b+=i b=3 然后i++ i=3
3. 先是b+=i b=6 然后i++ i=4
4. 先是b+=i b=10 然后i++ i=5
5. 先是b+=i b=15 然后i++ i=6

你颠倒过来就成了先将i自增,然后再与b相加,五次循环就相当于:
b = 0 + 2;
b = 2 + 3;
b = 5 + 4;
b = 9 + 5;
b = 14 + 6;
最后的结果当然为20了

很简单,以第一步当i=1,b=0为例,原来b+=i 应该等于1,再i++,
但倒转后,i=1,b=0,i++后,i=2了,b+=i 变成等于2,以此类推,最后就等于20了,但这是错的。

通常人们写成这样避免出现以上错误:
#include<iostream>

using namespace std;
int main()
{
int b=0;
for(int i=1;i<=5;i++){
b+=i;
}
cout<<b<<'\n';
}

很简单啊
因为第一次的时候,i++,所以第一次