下面 C++ 代码执行后,将输出能被 2 整除且除以 7 余数为 2 的数。下列选项不能实现的是( )。
for (int i = 0; i < 100; i++)
if _______________________
cout << i << " ";答案C。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】逻辑运算符|取模运算|条件等价转换
🎯 考纲定位:本题位于 GESP 二级“基础语法”模块,核心考察逻辑运算符 ! 与 && 的语义理解。命题人特意设置此题,是因为绝大多数考生会忽视 ! 在取模运算中的“等价转换”陷阱——误以为 !(i % 2) 是“不整除 2",实则它等价于 i % 2 == 0。这是二级考生最容易栽跟头的逻辑盲区。
🧠 解题思维:先明确目标条件——能被 2 整除且除以 7 余 2,即 i % 2 == 0 && i % 7 == 2。依次检验各选项:A 直接匹配;B 中 !(i % 2) 等价于 i % 2 == 0,符合目标;C 中 !(i % 7) 表示 i % 7 == 0,意味着“能被 7 整除”,与题目要求的“余 2"完全矛盾;D 中 i % 2 != 1 等价于 i % 2 == 0,亦符合。因此,C 是唯一不能实现目标条件的选项。
🪤 陷阱拆解:命题人设计 C 选项的意图极其阴险——它输出的数满足“能被 2 整除且能被 7 整除”(即 14 的倍数),完全偏离了题目要求的“除以 7 余 2"。最阴险的细节在于题目问的是“不能实现的是”,若考生只检查各条件是否“为真”,极易误判 C 为“能实现”(因为它确实能输出数,只是输出的数不对)。此外,B 和 D 都利用了对取模运算的逆向思考(!(i % 2) 与 i % 2 != 1),若考生不熟悉逻辑非与不等式的等价关系,也会陷入犹豫。
🔄 反命题思维:若将题目改为“能被 7 整除且能被 2 整除”,则 C 将成为正确选项;若改为“能实现输出条件的选项”,则 A、B、D 均为正确答案。教练提醒:刷到此类题,先问自己“命题人想考我什么”——是考逻辑运算符的语义,还是考对取模运算的逆向理解?本题显然考的是前者。