下面 C++ 代码用于输出 0-100 之前(包含 100)能被 7 整除但不能被 3 整除的数,横线处不能填入的代码是( )。
for (i=0; i<100; i++)
if(______________)
cout << i << endl;答案C。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。
代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。
【考点】循环结构|取模运算|逻辑运算
题目要求输出"能被7整除且不能被3整除"的数,核心条件就是 i%7==0 && i%3!=0。A选项直接命中题意;B选项用 !(i%7) 表示取余为0,等价于能被7整除;D选项用 !(i%3==0) 表示不能被3整除,二者逻辑完全一致。C选项写成 i%7 && i%3,在C++中只要余数非零就为真,因此它筛选的是"不能被7整除且不能被3整除"的数,恰好是题目要求的反面。
命题人把"取余"的概念偷换成"整除"的直觉:很多考生只看到"i%7"就以为是"能被7整除",忽略了取模运算的返回值是余数而非整除关系。更阴险的是,C选项在语法上完全合法,逻辑上也通顺——只是方向反了。这种"非真即假"的二值陷阱在二级考试中很常见,专门卡住那些只背条件公式而不理解运算符本质的学生。
若把题目改为"能被7或3整除",C选项会变成 i%7==0 || i%3==0,而原题的"不能被7且不能被3"对应 i%7!=0 && i%3!=0。刷到此类题先问自己:"命题人想考我取模的返回值还是整除关系?"