下面 C++ 代码用于实现图示的九九乘法表。相关说法错误的是( )。
/*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
*/for (int Hang=1; Hang<10; Hang++){
for (int Lie=1; Lie<Hang+1; Lie++){
if (Lie * Hang > 9)
printf("%d*%d=%d ", Lie, Hang, Lie*Hang);
else
printf("%d*%d=%d ", Lie, Hang, Lie*Hang);
// L2
}
printf("\n"); // L1
}
答案A。if-else语句中else与最近的if配对。花括号可以改变匹配关系。
if(a=b)合法但往往不是本意!它执行赋值后判断b的值是否为0。
【考点】嵌套循环|条件控制|输出控制
1. 考纲定位:本题出自 GESP 二级"循环结构"模块,核心考查嵌套循环与条件语句的协同控制能力。命题人特意将"换行输出"置于内层循环后,正是为了检验考生是否真正理解"行"与"列"的层级关系——很多初学者会把换行误作普通输出,导致格式错乱。
2. 解题思维:逐条分析选项。A 项把 printf("\n") 移到内层循环,意味着每计算一个乘法就换行,彻底破坏表格结构;B 项 print("%c", '\n') 本质仍是输出换行符,效果不变;C 项 Lie * Hang > 9 与 >= 10 对整数运算完全等价;D 项乘法交换律使条件不变。因此只有 A 错误。
3. 陷阱拆解:A 项是最阴险的"位置陷阱"——考生容易只看到"换行"二字,却忽略它必须紧跟在 for (Hang++) 之后。命题人利用"换行即结束当前行"的直觉,诱使考生误以为任何位置放换行都行。另外,C、D 项看似改变条件,实则只是写法差异,若考生死记">9"的结论而不理解等价性,也会掉入陷阱。
4. 反命题思维:若把题目改为"将 printf("\n") 移至外层循环",则 A 项变为正确,其余项需重新评估。刷到类似题时,先问自己:"这个输出语句到底控制的是'行'还是'列'?"——这是破题关键。