下面的 C++ 代码执行后的输出是( )。
for (int i = -2; i < 2; i++)
if (i % 2)
printf("%d#", i);答案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--,则反向遍历但条件仍只触发奇数。刷到循环取模题,先问"边界值是否被正确判定"而非背结论。