GESP 二级 · GESP 202603 C++ 二级 第 25 题

判断题 · 答案 A

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

题目

下面 C++ 代码执行后输出如左图所示,将 "%d" 修改为 "%3d" 即可实现右图输出。( )

/*
// 左图
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
*/

// 右图
1   2   3   4   5   6   7   8   9
2   4   6   8  10  12  14  16  18
3   6   9  12  15  18  21  24  27
4   8  12  16  20  24  28  32  36
5  10  15  20  25  30  35  40  45
6  12  18  24  30  36  42  48  54
7  14  21  28  35  42  49  56  63
8  16  24  32  40  48  56  64  72
9  18  27  36  45  54  63  72  81


for (i = 1; i < 10; i++) {
    for (j = 1; j < 10; j++)
        printf("%d", i * j);
    printf("\n");
}
答案:A

解题思维

答案A。考点: 循环结构——for/while的执行与嵌套。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

详细解析(节选)

【考点】printf格式化输出|宽度控制符%Nd

1. 🎯 考纲定位:本题考 GESP C++二级「输入输出」模块中的格式化输出知识点。命题人特意把这道题放在这里,就是卡住那些以为 printf 只会简单打印、不懂格式控制符的学生——二级大纲明确要求掌握%Nd宽度控制,但大量考生只会背"%d"不会改"%3d",这个题就是专门收割这类"只知其一不知其二"的。

2. 🧠 解题思维:看到"%d"与"%3d"的区别,立刻应该意识到这是宽度控制符。printf遇到%3d时,会在数字左侧补空格(右对齐),使每个数字占3字符。原代码未指定宽度,数字宽度随值变化,行内参差不齐;改"%3d"后,1-9都变成两个前导空格,10-99变成一个前导空格,100+无空格,这与右图完全吻合。这一类题的通法是:先识别输出格式字符串中的占位符,再看是否有宽度/对齐/填充符,然后对比左右图找出差异点——本题差异就是"所有数字统一占3位"。

3. 🪤 陷阱拆解:选项B"错误"是命题人精心设计的坑。容易掉进去的误区有三:一是以为%3d是左对齐(其实默认右对齐,左对齐要写%-3d),二是以为%3d会让100+数字变成"100 "(不会,100正好三位无需补),三是误以为空格会在数字右侧(printf宽度控制默认左侧补空格)。题目文字"将% d修改为%3d即可"用的是绝对化表述"即可",暗示唯一性,但若考生只记住结论没理解宽度机制,就会犹豫是否还有其他格式(如%03d)也能达成,从而错判。最阴险的细节是空格数量:右图里1-9前面是两个空格,10-99是一个空格,100+无空格——这恰恰就是%3d的行为特征,谁要是没真正做过printf实验,光凭感觉就会选B。

4. 🔄 反命题思维:如果把%3d改成%03d,输出会在数字左侧补零而非空格,右图就全变"001 002…";如果改成%-3d,空格跑到右侧,右图就全倒过来了。刷到这类题先问自己:命题人想考我printf的宽度控制符,还是想考我左对齐与右对齐的区别?

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