GESP 二级 · GESP 202512 C++ 二级 第 7 题

选择题 · 答案 A

← 整套速查表 GESP 二级 全部真题

题目

下面的 C++ 代码执行后的输出是( )。

for (int i = -2; i < 2; i++)
    if (i % 2)
        printf("%d#", i);
答案:A

解题思维

答案A。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。

常见错误

整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。

详细解析(节选)

【考点】C语言for循环|取模运算特性|条件表达式求值

GESP二级算法与程序设计,循环控制与条件判断。命题人卡住考生对取模运算"负奇数余数仍非零"的认知盲区,以及非零即真的布尔规则。

遍历i=-2到1,取模判定奇偶性:-2%2=0跳过,-1%2=-1输出,0%2=0跳过,1%2=1输出。注意C语言中负奇数取模结果仍为负非零,满足if条件。

选项B是"零误判"陷阱:考生误以为0%2≠0;选项C是"起始值误判"陷阱:忽略-2%2=0;选项D是"终止值误判"陷阱:把循环上限i<2误读为i≤2。绝对化表述"所有偶数都不输出"是最大语义陷阱。

若将i++改为i+=2,循环仅执行两次(-2,0),输出变为0#;若改为i--,则反向遍历但条件仍只触发奇数。刷到循环取模题,先问"边界值是否被正确判定"而非背结论。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断