题目:要求获得50到100的累加结果
1.想一下以下几种代码有什么区别,并分析错误原因
1.1 第一种(正确):在while语句的statement中使用递增运算符
int sum = 0, val = 50;
while (val <= 100){
sum += val;
val++;
}
std::cout << "50到100总和:" << sum << std::endl;
结果:
50到100总和:3825
计算方式
sum=50+51+52+…+100
1.2第二种(正确):在while语句的condition中使用后缀递增预算符
int sum = 0, val = 49;
while (val++ < 100) {
sum += val;
}
std::cout << "50到100总和:" << sum << std::endl;
结果:
50到100总和:3825
计算方式
sum=50+51+52+…+100
1.3第三种(错误):在while语句的condition中使用后缀递增运算符
int sum = 0, val = 50;
while (val++ <= 100) {
sum += val;
}
std::cout << "50到100总和:" << sum << std::endl;
结果:
50到100总和:3876
计算方式
sum=51+52+…+100+101 少了最开始的50,多了最后的101
1.4 第四种(错误):在while语句的condition中使用前缀递增运算符
int sum = 0, val = 50;
while (++val <= 100) {
sum += val;
}
std::cout << "50到100总和:" << sum << std::endl;
结果:
50到100总和:3775
计算方式:
sum=51+52+…+100 少了最开始的50
2.分析
2.1 while语句
while(condition){
statement;
}
只要condition为真,statement就会被执行。当执行完statement,会再次检测condition。
- 如果condition仍为真,statement再次被执行。
- 如果condition为假,循环停止,执行循环语句后下一条语句。
这里condition中的语句被多执行了一次
2.2 i++与++i
- i++ :先引用后增加,先在i所在的表达式中使用i的当前值,后让i加1
- ++i :先增加后引用,让i先加1,然后在i所在的表达式中使用i的新值
2.3 总结
- 第三种方式解析
刚开始执行时,使用50经过了条件判断,然后+1变成51,进行运算后使得sum第一次结果为51。 快结束时,使用100经过了条件判断,然后+1变成了101,经过运算使得程序多加了101。 - 第四种方式解析
刚开始执行时,使用51经过了条件判断,然后经过运算使得sum第一次结果为51。 快结束时,使用100经过了判断,最后一个数据100加到sum上后,再执行判断语句,此时val为101不符合条件,跳出循环。
|