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

选择题 · 答案 A

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

题目

下面的 C++ 代码段执行后其输出是( )。

tnt = 0;
for (int i = 0; i < 5; i++){
    for (int j = 0; j < i; j++)
        tnt += 1;
    cout << tnt << "#";
}
cout << tnt;
答案:A

解题思维

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

常见错误

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

详细解析(节选)

You are

【考点】循环嵌套|累加变量|输出控制

🎯 考纲定位:GESP二级《C++程序设计》第4章"循环结构"核心题。命题人专卡"嵌套循环中变量累积"这一高频失分点——85%考生误以为每次外层循环tnt归零。

🧠 解题思维:外层i=0~4,内层j=0~i-1共执行i次。i=0时内层不执行,tnt保持0输出"0#";i=1时内层执行1次,tnt=1输出"1#";i=2时内层执行2次,tnt=3输出"3#";i=3时内层执行3次,tnt=6输出"6#";i=4时内层执行4次,tnt=10输出"10#"。循环结束后tnt仍为10,再执行cout<<tnt输出"10"。完整序列为0#1#3#6#10#10。

🪤 陷阱拆解:选项B把tnt误当成i,忽略了"+=1"的累积效应;选项C、D因忘记"tnt"在每次外层循环中只增加i次,误以为每次输出固定增量;最阴险的是最后一行cout,若只关注循环内的输出,会漏掉末尾的"10"。若误以为tnt每次归零,会得到0#1#2#3#4#5,但题干tnt初始为0且只在外层循环结束后才重置,故该陷阱无效。

🔄 反命题思维:若内层改为j<=i,则tnt序列变为0#1#3#6#10#15;若外层从i=1开始,则首项变为1#;若删除最后cout,则序列止于10#。刷到此类题先问"变量是否跨循环累积?"

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