GESP 二级 · GESP 202503 C++ 二级 第 5 题

选择题 · 答案 D · 考点:循环控制

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

题目

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

int tnt = 0;
for (int i = 0; i < 10; i ++)
    if (i % 3)
        tnt += 1;
    else
        tnt += 2;
cout << tnt;
答案:D

考点

循环控制

解题思维

答案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 的数值。刷到类似题先问"分支权重是否被偷换"。

同考点真题

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