GESP 三级 · GESP 202312 C++ 三级 第 9 题

选择题 · 答案 C

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

题目

下面 C++ 代码用于统计每种字符出现的次数,当输出为 $3$ 时,横线上不能填入的代码是()。

string str="GESP is a good programming test!";
int x=0;
for(int i=0;i<str.length();i++)
{
    if(_________)
    {
        x++;
    }
}
cout<<x<<endl;
答案:C

解题思维

这道题本质就是数数,看哪个字符在字符串里出现了 3 次。把每个选项都翻译成对应的字符,或者把字符翻译成 ASCII 码,然后一行行扫过去数个数,哪个数出来是 3 就选它。

常见错误

很多学生看到 115 就条件反射觉得是 s,看到 111 就觉得是 o,其实数字本身在 if 里就是和字符的 ASCII 码比,不用管它长什么样。还有人会把'a'+14 这种‘绕弯子’的写法当成新东西,其实加法就是算 ASCII 码,'a' 是 97,加 14 就是 111,也就是 o。最危险的坑是数错了 s 的个数,字符串里只有 2 个 s,不是 3 个,所以选 C 肯定错。

详细解析(节选)

【考点定位】 这道题属于 GESP 三级‘字符与字符串’模块,核心是考察字符常量与 ASCII 码数值的等价转换关系,以及字符串遍历中条件判断的准确性。命题人之所以在此处设坑,是因为绝大多数考生习惯只认字符常量(如'o'),一看到数字就慌神,要么凭直觉乱选,要么死记硬背'115 是某个字符’,却忘了数字本身在 if 条件里就是和字符逐个 ASCII 码比较。这道题就是专门卡住这种‘只背结论、不验本质’的考生。

【解题思维】 拿到题先想:横线上填什么条件,能让 x 恰好累加 3 次?关键观察:字符串里'o'出现了 3 次(good 里 2 个 + programming 里 1 个),其他字符如'a'、't' 等都不对。推理依据:C++ 里字符常量'o'与整数 111 等价('o' 的 ASCII 码就是 111),同理's'是 115。通法:遇到‘字符比较’题,先数目标字符出现次数,再检查选项中哪个条件等价于该字符。记住:字符常量、ASCII 码、整数比较三者互通,别被数字吓住。

【陷阱拆解】 逐个选项拆解:

阴险细节:命题人用'a'+14 这种‘绕弯子’写法,考察你是否真的理解 ASCII 码与字符常量的等价关系;用 115 这个数值直接写,则利用考生对数字与字符的混淆——很多人看到 115 会下意识想到's',却不知'o'才是 111。如果你只背结论,就会误选 C。

【反命题思维】 站在命题人角度:如果把条件改成 str[i]=='t',因为't' 出现 3 次('test' 两个't' 和'programming' 一个't'),输出仍为 3,那么 C 选项就会变成正确答案。一句话提醒:刷到类似题时,先问自己‘命题人想考我什么’——是字符比较、ASCII 码转换,还是字符串遍历的细节?别只看表面数字。

【考频与趋势】 从题库数据看,字符比较与 ASCII 码转换是高频考点:基础语法模块共考过 1295 题,其中 GESP 三级就占了 215 题,说明这是三级考生的必考内容。运算符与表达式模块共 261 题,GESP 三级考了 47 题,占比约 18%,可见这类题目在三级考试中非常普遍。从年份分布看,2023 年考了 287 题,2024 年 413 题,2025 年 401 题,虽然近年总量巨大,但具体到‘字符与字符串’这类细分考点,题目数量相对稳定,没有出现断崖式下跌,说明命题人仍在持续考察这一基础能力。

【未来预测】 基于现有数据,GESP 三级在未来几年仍会高频出现字符比较、ASCII 码转换、字符串遍历等题目,形式上可能会继续用数字代替字符(如 111、115),或者用运算表达式(如'a'+14)来增加迷惑性。暂无足够依据预测具体年份的考题变化,但可以确定的是,这类题目不会消失,反而可能因为基础语法模块的持续存在而保持稳定考频。

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