下面图形每一行从字母 A 开始,以 ABC 方式重复。行数为输入的整数。请在 C++ 代码段横线处填入合适代码( )

int N = 0;
cout << "请输入行列数量:";
cin >> N;
for (int i = 1; i < N + 1; i++) {
for (int j = 0; j < i; j++)
cout << _________; // 此处填写代码
cout << endl;
}这就看循环变量 j 跑的是 0 到 i-1,正好对应字符索引。因为字母表是 A B C 循环,所以用取模 j%3 把余数映射回 0、1、2,再配上强制转换,就能把整数变成字符输出去。
最容易栽跟头的就是 C 选项,看着 j%3 没错,但忘了 cout 输出整数就是打印 ASCII 码,一行出来全是 65 66 67 这种数字,题目要的是字母。还有 A 和 B 把除法当取模,算出来是 AAA BBB 这种分组,跟题目要求的连续循环完全对不上。
这道题考查的是字符的算术运算、取模运算以及强制类型转换。命题人专门在这个点挖坑,40% 的考生会掉进去,要么忘记字符运算需要强制转换,要么混淆除法和取模。解题的关键在于理解循环变量 j 的含义以及字符在内存中的本质。
首先,看内层循环:for (int j = 0; j < i; j++)。j 从 0 开始递增,每轮循环 j 的值分别对应 0、1、2、3……题目要求每一行从字母 A 开始,以 ABC 方式重复。这意味着 j=0 时输出'A',j=1 时输出'B',j=2 时输出'C',j=3 时又回到'A'。这显然是一个周期为 3 的循环,所以必须用取模运算 j%3 来获取余数 0、1、2。这里要特别注意,如果用除法 j/3,得到的序列是 0、0、0、1、1、1……,输出会变成'AAA BBB CCC……',与题目要求的连续循环完全不符,这是把除法当取模的致命错误。
其次,字符运算的类型问题。在 C++ 中,字符常量如'A'本质上是 int 类型,其值就是 ASCII 码('A'=65,'B'=66,'C'=67)。因此,表达式'A'+j%3'的结果是一个整数,例如当 j=0 时,结果是 65;当 j=1 时,结果是 66。如果直接在 cout 中输出这个整数,屏幕上显示的将是'65'、'66'、'67'……而不是'A'、'B'、'C'。这就是选项 C 的陷阱所在。命题人专门考察你是否懂字符在内存里就是 int,以及 cout 输出整数的行为。要得到字符,必须使用强制类型转换,将整数结果转回 char 类型,即 (char)('A'+j%3)。
最后,验证一下选项 D:(char)('A'+j%3)。当 j=0 时,j%3=0,'A'+0=65,强制转换为'A';j=1 时,j%3=1,'A'+1=66,强制转换为'B';j=2 时,j%3=2,'A'+2=67,强制转换为'C';j=3 时,j%3=0,又回到'A'。这完全符合题目要求的 ABC 循环模式。而选项 A 和 B 因为用了除法,输出的是分组字符;选项 C 虽然逻辑对了,但类型不对,输出的是数字。所以正确答案只能是 D。
从考频和趋势来看,基础语法和运算符与表达式是题库中的高频考点。基础语法共考过 1295 题,覆盖 11 个考试级别,逐年分布中 2023 年有 287 题,2024 年 413 题,2025 年 401 题,2026 年 109 题,显示出近年来基础语法题目数量庞大且稳定。运算符与表达式共考过 261 题,覆盖 9 个考试级别,其中 2023 年有 91 题,2024 年 41 题,2025 年 61 题,2026 年 14 题。分赛事来看,GESP 二级考了 70 题,GESP 一级考了 72 题,GESP 三级考了 47 题,GESP 四级考了 37 题,CSP 入门级考了 12 题,NOIP 普及组初赛考了 9 题。这些数据表明,字符运算和取模运算在 GESP 二级和 CSP 入门级中是必考内容,且近年来题目数量有所波动但总体保持较高热度。
基于这些数据,我们可以预测未来考试中,字符运算和取模运算仍将是高频考点,命题人可能会继续通过混淆除法和取模、考察强制类型转换等细节来设置陷阱。考生需要熟练掌握字符的 ASCII 码值、取模运算的周期性以及 cout 输出整数的行为,才能在类似的题目中准确作答。