GESP 三级 · GESP 202512 C++ 三级 第 15 题

选择题 · 答案 D · 考点:函数

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

题目

如果字符串 s 的值是 GESP,以下代码 s 的最后结果是( )

for (int i = 0; i < s.length(); i++) {
    s[i] = toupper(s[i] + i);
}
答案:D

考点

函数

解题思维

答案D。追踪for循环:记录每次循环变量的值和累积结果的变化。注意循环终止条件。

常见错误

for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。

详细解析(节选)

【考点】字符串遍历|ASCII字符运算|toupper函数

【解题思维】这道题考的是"字符是整数"这一底层事实。字符串s本质是char数组,每个元素存ASCII码。循环里s[i]+i是整数加法:'G'(71)+0=71→'G';'E'(69)+1=70→'F';'S'(83)+2=85→'U';'P'(80)+3=83→'S'。toupper只是确保结果是大写(对大写字母无实际影响)。

【陷阱拆解】选项B"HFTR"和C"hesp"都犯了两个错误:要么把字符误当字符串(以为s[i]+i是拼接),要么忽略ASCII码偏移量。最阴险的是D选项"GFUS"——它正确但容易让人怀疑"为什么P+3变S?"。如果你只背"toupper转大写",完全不懂字符内码,就会卡在这里反复纠结,甚至选A以为没变化。字符串题的核心不是语法,是理解"字符值可参与算术运算"。

【反命题思维】若把i改成s.length()-1-i,偏移量反向变成"GFSU";若去掉toupper,结果不变(因为全是大写);若把条件改成s[i]<='Z',则小写字母会被影响。刷到字符串+循环题,先问:它到底想考遍历、偏移、还是条件判断?

同考点真题

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