下面 C++ 代码执行后其输出是( )。
int tnt = 0;
for (int i = 0; i < 10; i ++)
if (i % 3)
tnt += 1;
else
tnt += 2;
cout << tnt;答案D。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】GESP 二级循环控制|条件判断逻辑|取模运算
考纲定位:GESP 二级“循环与条件”模块。命题人专门选 i%3 这种非零即真判断,卡住 80% 考生把 i%3==0 和 i%3 混为一谈,导致分支统计全错。
解题思维:循环 i 从 0 到 9 共 10 次,其中 0、3、6、9 四个数能被 3 整除(i%3==0),其余 6 个数 i%3≠0。整除分支执行 tnt+=2,非整除分支执行 tnt+=1,总计 4×2+6×1=14。
陷阱拆解:选项 A/B/C 都是把分支计数算反或漏算。最阴险的是 if(i%3) 这个条件——在 C++ 里非零即真,等于 if(i%3!=0);很多考生下意识写成 if(i%3==0) 去统计整除数,结果把整除和非整除的权重搞反,整除应加 2 却只加 1。
反命题思维:若把 i%3 换成 i%2,整除数变成 5 个,答案会变成 5×2+5×1=15;若把 else 的+=2 改成+=3,答案变成 4×3+6×1=18,正好是陷阱 A 的数值。刷到类似题先问"分支权重是否被偷换"。