下面 C++ 代码执行后,将输出不能被 3 整除且除以 5 余数为 2 的数。下列选项不能实现的是( )。
int i, j;
for(i = 0; i < 100; i++)
if(__________________)
cout << i << endl;答案D。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】取模运算|逻辑运算符
GESP二级 控制结构模块,考查将自然语言条件转化为C++表达式的能力。命题人卡住"非整除"与"余数"的精确表述,大量考生会把"不能被3整除"误写成 i%3!=0 或漏掉 && 连接条件。
解题链条:先抓两个独立条件——"不能被3整除"即 i%3!=0,"除以5余2"即 i%5==2,再用逻辑与组合。A选项(i%3!=0)&&(i%5==2)完全匹配;B选项i%3在逻辑判断中等价于i%3!=0;C选项双重否定!(i%5!=2)简化后仍为i%5==2;D选项!(i%3)却把"非整除"翻转成"整除",与题意背道而驰。
陷阱拆解:B选项利用"非零即真"的隐式转换,易让粗心者忽略!=0显式写法;C选项双重否定嵌套,增加认知负荷,部分考生会误判优先级;D选项最阴险——绝对化否定第一条件,且边界值i=0恰好是3的倍数,导致输出非法值。只背结论、不通读语义,必踩D坑。
反命题视角:若将"不能被3整除"改为"能被3整除",正确条件变为i%3==0 && i%5==2;若循环上限改为100,输出集合不变;若问"能被3整除且除以5余2",答案将指向与D相反的表达。
刷到类似题,先问"命题人想考我什么"。