执行以下 C++ 代码后,变量 sum 的值是( )。
int sum = 0;
for (int i = 1; i <= 5; i += 2) {
sum += i;
int sum=0;
}答案B。追踪for循环:记录每次循环变量的值和累积结果的变化。注意循环终止条件。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】循环控制|变量作用域|赋值语句
本题考查 C++ 三级《循环结构》中变量作用域与循环控制两条核心规则。命题人专盯"循环体内重复赋值"这一高频失分点,90% 考生会忽略局部变量覆盖效应,误以为内层赋值能重置外层累加器。
关键观察是内层 int sum=0; 声明的是局部变量,与外层 sum 同名但不同作用域,内层赋值不影响外层累加。按 i 序列 1,3,5 依次执行 sum+=i,外层 sum 最终为 1+3+5=9。注意循环条件 i<=5 与步长 i+=2 确保遍历恰好三次。
错项 A(6) 源于误以为每次循环 sum 被重置后只累加前两个 i;错项 C(15) 是忽略内层变量覆盖,直接累加 1+3+5+... 到 9 后继续;错项 D 则把 int sum=0; 当成语句而非变量声明,误判为死循环。最阴险处在内层"int sum=0;"看似重置却实际不作用,背结论必栽。
若将内层改为 sum=0;(去掉类型),则外层 sum 会被清零,结果变 5;若删除内层语句,sum 将为 9 仍正确。刷到类似题先问"这个赋值到底影响哪一层变量",避免被变量名迷惑。