执行以下 C++ 代码后,最终的输出结果是( )。
int total, i, j;
total = 0;
i = 1;
while (i <= 3) {
for (j = 1; j < i + 1; j++)
total += i * j;
i += 1;
}
cout << total;看到嵌套循环先想循环次数,外层 while 控制 i 从 1 到 3,内层 for 让 j 从 1 到 i,每轮把 i×j 累加到 total。这类题通法是逐轮模拟:先算 i=1 时 j 跑几趟、加多少;再算 i=2 时 j 跑几趟、加多少;依此类推,最后把各轮结果相加。关键不是背公式,而是能准确数出内层循环的迭代次数(j < i+1 等价于 j 从 1 到 i)。
选项 A 9 是只算了 i=3 那轮(3×1+3×2+3×3=18)的一半,可能误以为内层只加到 i-1;选项 B 11 是把每轮 i 的值直接相加(1+2+3=6)再乘以某个系数,混淆了乘法与加法;选项 C 23 是只算了前两轮(1+7=8)加上第三轮的部分(18),漏掉了 j=3 时的 9。最阴险的是内层条件 j < i+1,很多人会误读成 j ≤ i,导致少算一轮,或者把 j 的起始值当成 0。
本题考查 GESP 二级《算法与程序设计》模块中的循环结构。命题人放这道题,就是要卡住考生对嵌套循环迭代次数的数数能力——内层 for 的终止条件 j < i+1 等价于 j 从 1 到 i,很多人会误读成 j ≤ i 或 j 从 0 开始,导致少算一轮或多算一轮。
完整思考链:先确定外层 while 的 i 取值(1,2,3),再对每个 i 数内层 for 的 j 取值(1 到 i),然后计算 i×j 并累加。逐轮推演:i=1 时 j=1,total+=1×1=1;i=2 时 j=1,2,total+=2×1+2×2=7;i=3 时 j=1,2,3,total+=3×1+3×2+3×3=25。最终输出 25。这一类题的通法是逐轮模拟,关键是准确数出内层循环的迭代次数(j < i+1 等价于 j 从 1 到 i)。
选项 A 9 是只算了 i=3 那轮(3×1+3×2+3×3=18)的一半,可能误以为内层只加到 i-1;选项 B 11 是把每轮 i 的值直接相加(1+2+3=6)再乘以某个系数,混淆了乘法与加法;选项 C 23 是只算了前两轮(1+7=8)加上第三轮的部分(18),漏掉了 j=3 时的 9。最阴险的是内层条件 j < i+1,很多人会误读成 j ≤ i,导致少算一轮,或者把 j 的起始值当成 0。
站在命题人视角,如果把 while 条件改成 i <= 4,答案会变成 25 + 4×1+4×2+4×3 = 25 + 24 = 49;如果把内层改成 j <= i,i=3 那轮会多算 j=4 时的 12,total 变成 37。这类变式题常用来区分考生是否真正理解循环边界,而不是机械记忆。