下面 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。考点: 循环结构——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的宽度控制符,还是想考我左对齐与右对齐的区别?