下面 C++ 代码执行后因为有 break,将输出 0。( )
int i;
for (i = 0; i < 10; i++){
continue;
break;
}
cout << i;答案B。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】for循环|continue语句|break语句
这种题考的是循环语句执行顺序——学生在for循环里看到break就以为会跳出循环,却忽略了continue会跳过break,导致循环正常执行完10次,i最终等于10,输出10而非0。命题人专门把两个控制流语句放在同一循环体,就是为了检验你对语句执行顺序的理解,而不是死记"break跳出循环"这个结论。
解题核心就一句话:continue优先级高于break,只要遇到continue,break永远到不了。for循环的更新表达式i++会在每次迭代后执行,条件判断i<10控制循环次数,所以i从0递增到10,循环结束后cout输出10。题目说"因为break输出0"完全颠倒了逻辑关系。
陷阱在"因为……所以……"这个因果表述上。A选项把结果归因于break,实际上break根本没执行——如果break被执行,循环会在i=0时立即跳出,输出才是0。命题人用这个反事实条件迷惑考生,让你以为"有break就一定会用break"。记住:break被跳过不代表它不存在,只是执行顺序上它没机会跑。
改题就能看出套路:把continue移到break后面,或者删掉continue,答案全变。这类题刷过一遍就知道,遇到循环里多个控制流语句,先判断执行顺序,再算最终值——命题人就是想考这个优先级认知。