下面的 C++ 代码之后的输出是( )。
int tot = 0, i;
for (i = -5; i < 5; i++)
if (not(i % 3 != 0))
tot += 1;
cout << tot;看到循环先确定边界:i 从 -5 到 4 共 10 次。核心判断 not(i % 3 != 0) 等价于 i % 3 == 0,即统计能被 3 整除的整数。逐个验证:-5%3=-2, -4%3=-1, -3%3=0 ✓, -2%3=1, -1%3=2, 0%3=0 ✓, 1%3=1, 2%3=2, 3%3=0 ✓, 4%3=1。满足条件的只有 -3、0、3,共 3 个,故 tot 为 3。通法是:先化简逻辑表达式,再枚举循环变量验证条件,最后计数。
选项 A(2) 漏了 -3;C(7) 误把全部 10 个数都当成满足条件;D(9) 可能是把 i 当成从 -4 开始或漏掉 0。最阴险的细节是 not(i % 3 != 0) 的双重否定——不少考生会直接看成 i % 3 != 0,完全忽略 not 的作用。边界条件 i < 5 也容易让人误以为包含 5,导致循环次数或判断值出错。
本题考查《GESP 二级 信息科技》大纲中「循环控制与计数」知识点。命题人设此题卡住的是考生对嵌套逻辑表达式的理解力——看到 not(i % 3 != 0) 时,很多人会忽略双重否定,误判为 i % 3 != 0,从而漏掉 -3 或 0 这两个关键值。
看到循环先确定边界:i 从 -5 到 4 共 10 次。核心判断 not(i % 3 != 0) 等价于 i % 3 == 0,即统计能被 3 整除的整数。逐个验证:-5%3=-2, -4%3=-1, -3%3=0 ✓, -2%3=1, -1%3=2, 0%3=0 ✓, 1%3=1, 2%3=2, 3%3=0 ✓, 4%3=1。满足条件的只有 -3、0、3,共 3 个,故 tot 为 3。通法是:先化简逻辑表达式,再枚举循环变量验证条件,最后计数。
选项 A(2) 漏了 -3,说明只看到了正负对称却忽略零;C(7) 误把全部 10 个数都当成满足条件,显然没做判断;D(9) 可能是把 i 当成从 -4 开始或漏掉 0。最阴险的细节是 not(i % 3 != 0) 的双重否定——不少考生会直接看成 i % 3 != 0,完全忽略 not 的作用。边界条件 i < 5 也容易让人误以为包含 5,导致循环次数或判断值出错。
若把 not 去掉,条件变成 i % 3 != 0,满足的数从 3 个变成 7 个,答案选 C;若把条件改为 i % 3 == 0 && i > 0,则只有 3 一个满足,答案变 A;若循环改为 i <= 5,多一次迭代 i=5,5%3=2 不满足,答案仍为 3。这些变式都能检验考生是否真正理解逻辑表达式与循环边界的耦合关系。