在下列代码的横线处填写( ),可以使得输出是 GESP IS INTERESTING。
int main()
{
string str = "gEsP is Interesting";
int x = str.length();
for (int i = 0; i < x; i++)
if ((str[i] >= 'a') && (str[i] <= 'z'))
___________________;
cout << str << endl;
cout << endl;
return 0;
}这题核心就是利用ASCII码中'a'和'A'的固定差值来批量改大小写。拿到题先别急着选,心里默念:'a'转'A'是减32,那代码里就得加上一个负数。看看选项,哪个能算出-32?选C。
学生最容易栽在两个坑上:一是分不清位运算符(&)和逻辑运算符(&&),虽然这题没考位运算,但很多孩子看到&就慌,以为要按位异或;二是死记硬背“小写变大写要减32”,结果看到代码里是+=就慌了神,以为要加32,顺手选了A。其实+=加一个负数,效果跟直接减一样,命题人就是拿A选项来测试孩子会不会真正去算数值,而不是只会背口诀。
【考点】ASCII码值运算|字符串遍历修改
这题考的是字符在计算机里的本质——ASCII码。在C++里,字符就是整数,'a'对应97,'A'对应65。题目给了一段代码,遍历字符串,只要遇到小写字母(str[i] >= 'a' && str[i] <= 'z'),就要把它变成大写。输出要求是GESP IS INTERESTING,原字符串是gEsP is Interesting,明显是把所有小写转成大写。
【解题思维】拿到题先想:怎么把小写变大写?常识告诉我们,'a'和'A'在ASCII表里是紧挨着的,'a'比'A'大32。所以要把小写变大写,得减去32。代码里用的是str[i] += ...,那括号里必须填一个负数,而且这个负数的大小得等于'A'-'a'。
我们直接算一下:'A' - 'a' = 65 - 97 = -32。所以str[i] += 'A' - 'a'就是str[i] += -32,等价于str[i] = str[i] - 32,完美把小写转成大写。这就是C选项。
【陷阱拆解】A选项str[i] += 'a' - 'A','a' - 'A' = 32,这会把小写变成比'z'大32的值(比如'a'+32=129),输出就是乱码,完全不对。B选项固定加20,毫无依据,命题人就是拿一个看起来像“数字”的选项来迷惑只凭直觉的考生。D选项“无法实现”更是典型的反向陷阱——只要会ASCII运算,显然能改,D就是用来骗那些不敢动手算的孩子。
【反命题思维】这类题的通用通法是:先判断字符是否在目标区间,再用区间差值做加减。如果题目改成“若为大写则转小写”,答案就是str[i] += 'a' - 'A',本质仍是字符ASCII码运算。刷到类似题,先问自己“命题人想考我ASCII差值还是字符串函数?”,别被选项吓住。
【考频与趋势】“基础语法”是GESP的压舱石,题库共考过1295题,覆盖2008到2026年所有级别。从分布看,2023年287题、2024年413题、2025年401题,近三年爆发式增长,说明命题人越来越喜欢用“补全代码”这种形式考基础。在“运算符与表达式”这一大类下,共261题,其中GESP三级就占了47题,占比接近20%,属于高频考点。历年来看,2024年单年41题,2025年61题,2026年14题,虽然2026年数据略低,但结合2023-2025的上升趋势,可以判断这类“ASCII差值补全”的题型在未来GESP三级乃至更高阶别中仍会保持高热度,命题人可能会在条件判断上稍微复杂化,比如增加“遇到数字跳过”或“遇到空格不处理”等干扰项,但核心仍是考察对ASCII差值的理解。
【预测】基于现有数据,未来GESP三级继续高频考察“字符ASCII运算”是大概率事件。命题人可能会在题目中增加干扰条件,例如“若字符为空格则跳过”或“若字符为数字则保持不变”,但核心解题思路依然是计算两个字符的差值并做加减。暂无足够依据预测具体年份的考题形式,但可以肯定的是,只要孩子掌握了“小写转大写=-32,大写转小写=+32”这一基本结论,并能灵活应用到+=或=这种赋值语句中,这类题基本不会丢分。
总结一下:这题就是考你会不会算'A'-'a'=-32,以及会不会把负数放进+=里。选C,别被A的“32”迷惑,更别信D的“无法实现”。