GESP 二级 · GESP 202312 C++ 二级 第 12 题

选择题 · 答案 D

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

题目

下面的 C++ 代码用于实现如下左图所示的效果,应在以下右图 C++ 代码中填入

![](https://cdn.luogu.com.cn/upload/image_hosting/j15m3ylx.png)

cin >> N;
for (i = 0; i < N; i++) {
    nowNum = 0;
    for (j = 0; j < i + 1; j++) {
        cout << nowNum << " ";
        nowNum += 1;
        if (nowNum == 10)
            nowNum = 0;
    }
}
答案:D

解题思维

这题本质是看嵌套循环的‘生命周期’。外层循环负责换行,内层循环负责打印数字,关键就在内层循环彻底结束、外层准备开始下一轮的那一瞬间,必须补一个换行符,否则所有数字会挤成一行。

常见错误

很多考生只盯着内层循环里的数字重置逻辑,觉得只要把 nowNum 归零就行,完全忽略了输出格式。还有人看到 10 这个数字,下意识想加个判断或者多输出一行,结果把代码逻辑搞乱了。最致命的错误是位置感缺失,把 endl 放到了内层循环中间,导致每行数字还没打完就换行了,或者放到了外层循环开头,导致每行开头多出一个空行,完全破坏了题目要求的金字塔形状。

详细解析(节选)

这道题考查的是嵌套循环的执行顺序与输出格式控制,属于 GESP 二级算法模块的基础内容。命题人特意设计了一个数字从 0 到 9 循环打印的效果,核心在于外层循环控制行数,内层循环控制每行打印的数字个数,而换行符必须精准地出现在每一行打印结束、下一行开始前。如果换行放错了地方,整个输出就会变成一团乱码或者错误的形状。拿到题先想什么?看整体结构,外层循环 i 从 0 到 N-1,内层循环 j 从 0 到 i,每轮内层循环都会打印 i+1 个数字,并且通过 nowNum 的累加和重置(等于 10 时归零)实现了 0-9 的循环。那么,换行符应该放在哪里?显然应该放在内层循环结束后,外层循环的下一步之前,也就是第 9 行。这样每行打印完 i+1 个数字后,立刻换行,下一行再打印 i+2 个数字,形成金字塔效果。如果放在第 8 行,那就是在内层循环还没结束时就换行了,导致每行数字数量不足;如果放在第 7 行,那是内层循环的中间,更会破坏数字序列;如果放在第 2 行,那就是外层循环的开头,每行开头就会多出一个空行,完全不符合题意。所以答案只能是 D,在第 9 行填入 cout << endl;。避坑方面,最容易错的是把 endl 当成内层循环的一部分,或者误以为需要重置 nowNum 时才换行,其实 nowNum 的重置已经由 if 语句处理了,换行符是独立的格式控制。考频趋势来看,基础语法在题库中占比最高,2023 年有 287 题,2024 年有 413 题,2025 年有 401 题,循环结构在 2025 年有 158 题,2026 年有 161 题,控制结构在 2025 年有 160 题,2026 年有 45 题,这些数据说明这类题目在近年考试中非常频繁,尤其是 GESP 二级和三级,循环嵌套与输出格式是高频考点。预测未来可能怎么考?结合数据,这类题目在 2026 年仍有 161 题,说明命题人会继续在循环嵌套、输出格式、状态重置等细节上挖坑,可能会把数字重置条件改成其他数值,或者把换行符的位置稍微偏移,比如放在内层循环的中间,或者外层循环的开头,考察学生对循环执行顺序的精准把握。暂无足够依据预测更具体的变体,但可以确定的是,这类题目将继续作为基础中的基础,重点考察学生对代码执行流程的理解。

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