执行下面 C++ 代码后输出是( )。
cnt = 0;
for (i = 10; i > 3; i -= 3)
cnt = cnt + i;
cout << cnt;这题核心就是模拟循环,别被'for'吓到,直接按代码顺序:先设初值i=10,然后看条件i>3是否成立,成立就执行累加,再把i减3,直到条件不成立为止。
很多同学习惯看到循环就下意识想'从1加到n'或者'加三次',完全忽略了题目里i初始就是10这个设定。还有人会把循环次数算错,以为i=10,7,4,1都满足条件,其实i=1时已经不满足i>3了。另外,累加时容易把cnt的初始值0和第一次加的10搞混,或者把最后一步漏掉,导致算出27或49这种错误答案。关键是必须老老实实一步一步模拟变量变化,不能跳步。
这道题考查的是C++中的循环结构,具体是for循环的语法、循环变量的初始化、循环条件的判断以及循环体的执行流程。对于初学者来说,这类题目最忌讳的就是‘想当然’,以为循环一定从1开始或者执行固定次数,必须严格按照代码中的实际数值来模拟。命题人专门喜欢在这种基础题里挖坑,比如把循环变量的初值设得比较大(这里是10),步长设得不寻常(这里是-3),或者在循环条件里用大于号而不是大于等于号,目的就是考察学生是否真正读懂了代码的每一行,而不是靠死记硬背。拿到这种题,正确的思考心法是:先明确循环变量的初值是多少,再看循环条件是什么,接着看循环体里做了什么操作,最后看循环变量的更新方式。然后,像过电影一样,在脑子里或者纸上把每一轮循环的状态列出来:初值是什么?条件满足吗?如果满足,执行后cnt变成了多少?i减了多少?然后进入下一轮,重复这个过程,直到条件不满足为止。这种‘逐行追踪’的方法虽然笨,但是最稳妥,也是最不容易出错的方法。
现在我们来具体模拟这道题的执行过程。代码首先执行cnt = 0;,把计数器cnt初始化为0。然后进入for循环,循环变量i的初值是10,循环条件是i > 3,循环体是cnt = cnt + i;,循环变量的更新是i -= 3;(即i减去3)。我们一步一步来:
第一轮:i的初值是10,判断10 > 3,条件成立,进入循环体。执行cnt = cnt + i,也就是cnt = 0 + 10,cnt变成了10。执行完循环体后,进行更新i -= 3,i变成了10 - 3 = 7。
第二轮:现在i是7,判断7 > 3,条件仍然成立,进入循环体。执行cnt = cnt + i,也就是cnt = 10 + 7,cnt变成了17。执行完循环体后,进行更新i -= 3,i变成了7 - 3 = 4。
第三轮:现在i是4,判断4 > 3,条件依然成立,进入循环体。执行cnt = cnt + i,也就是cnt = 17 + 4,cnt变成了21。执行完循环体后,进行更新i -= 3,i变成了4 - 3 = 1。
第四轮:现在i是1,判断1 > 3,条件不成立,循环终止,不再执行循环体。此时cnt的值停留在21。
循环结束后,执行cout << cnt;,输出cnt的值,也就是21。所以正确答案是B选项。
在分析过程中,我们可以看到命题人设置的几个典型陷阱。首先,初值i=10很容易被忽略,很多同学会习惯性地认为循环是从1开始或者从0开始,导致第一轮就错了。其次,循环次数也容易算错,i从10开始,每次减3,序列是10, 7, 4, 1,其中1已经不满足条件了,所以实际上只执行了3次循环,而不是4次。如果误以为执行了4次,就会把i=1也加进去,cnt就会变成21+1=22,但这道题里没有这个选项,说明命题人可能还设置了其他干扰项。再看选项,A选项3显然是把cnt初始值搞错了,或者只加了最后一次;C选项27可能是把i=1也加进去了(21+1=22也不对,也许是其他错误路径);D选项49则可能是把初值10当成了cnt的初始值,然后加了10+7+4=21,再加上原来的10,变成31,也不对,49这个数比较奇怪,可能是把循环变量当成累加器,或者步长理解错了。无论如何,只要老老实实模拟,就能避开这些坑。
从考频和趋势来看,‘循环结构’是GESP一级考试中的高频考点,在题库中总共考过609题,覆盖12个考试级别。逐年分布上,2023年考了77题,2024年考了128题,2025年考了158题,2026年考了161题,可以看出这个考点在近几年的考试中非常受命题人青睐,尤其是GESP一级、二级和三级考试中,循环结构题目占比很大。分赛事来看,GESP一级考了139题,GESP二级考了172题,GESP三级考了89题,说明这个知识点在不同级别的考试中都有出现,但一级考试中循环结构题目数量相对较多,可能是因为一级考试更侧重于基础语法的掌握,而循环结构是基础语法中的重点内容。基于这个趋势,我们可以预测,在未来的GESP一级考试中,循环结构题目仍然会是必考内容,而且命题人可能会继续在这个基础上进行变化,比如增加循环嵌套、改变循环变量的更新方式、或者在循环条件中加入更复杂的逻辑判断,来考察学生的综合思维能力。因此,同学们在学习循环结构时,不仅要掌握基本的for、while循环语法,还要学会如何模拟循环过程,如何分析循环变量的变化规律,以及如何识别命题人设置的陷阱。只有这样,才能在考试中从容应对各种类型的循环题目。
总之,这道题虽然看起来简单,但背后考查的是对循环结构的深入理解和模拟能力。同学们在做这类题目时,一定要养成‘逐行追踪’的习惯,不要想当然,不要跳步,老老实实把每一轮循环的状态列出来,这样才能确保答案的正确性。同时,也要学会识别命题人设置的陷阱,比如初值、循环次数、循环条件等,这些都是常见的考点。希望同学们通过这道题,能够真正掌握循环结构的精髓,为未来的考试打下坚实基础。