下面的 C++ 代码执行后其输出是( )。
int i, Sum = 0;
for (i = 1; i < 10; i++) {
Sum += i;
if(i % 2) continue;
if(i % 7) break;
}
cout << Sum;答案C。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】for 循环控制|continue 语句|break 语句
解题思维:手动模拟执行流程。i=1 时 Sum=1,i%2=1 触发 continue 跳过剩余语句;i=2 时 Sum=3,i%2=0 不跳过,接着判断 i%7=2≠0 成立,立即 break 退出循环,最终输出 3。
陷阱拆解:选项 A(45)是 1~9 累加结果,对应把 continue 误当成"跳过本循环但不影响后续";选项 B(28)是 1~7 累加,对应把 if(i%7) 读反成"i 是 7 的倍数才 break";选项 D(0)是误以为 continue 会中断整个循环。最阴险的是 if(i%7) 这个条件——它等价于"i 不是 7 的倍数",命题人特意反用取模逻辑制造认知冲突,且 break 触发时机在 i=2 而非 i=7,很多考生一眼看到 7 就默认循环到 7 再 break。
反命题思维:若将 if(i%2) 改为 if(i%2==0),continue 条件反转,循环会继续处理偶数;若将 if(i%7) 改为 if(i%7==0),break 会触发在 i=7 处,Sum 变成 28。刷到此类题先问:条件表达式到底是"等于"还是"不等于"?continue/break 作用域是否被视觉误导?