GESP 三级 · GESP 202309 C++ 三级 第 14 题

选择题 · 答案 D

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

题目

在下列代码的横线处填写( ),可以使得输出是“120”。

#include <iostream>
using namespace std;

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int res = 0;
    for (int i = 0; i < 5; i++)
        ______; // 在此处填入代码
    cout << res << endl;
    return 0;
}
答案:D

解题思维

看到 res 初值是 0,先别急着想阶乘。0 乘任何数都得 0,所以累乘必死。看选项:累加得 15,赋值最后剩 5,都不对。答案选 D,这是考你对‘初始值决定结果’的敏感度。

常见错误

最大的坑就是看到 120 就下意识选 B 累乘,完全忽略了 res=0 这个致命条件。其次是把累加和赋值的效果搞混:累加是 1+2+3+4+5=15,赋值是每次覆盖,最后只剩 5。学生容易凭数字直觉选,而不是真正模拟循环执行过程。

详细解析(节选)

【考点定位】 本题考查 GESP 三级大纲中“数组基础操作”与“循环结构”的交叉点,核心是区分三种基本语句在循环中的不同效果:累加、累乘、赋值。命题人特意选了 120 这个数字——它恰好是 5! 的结果,但 res 初值为 0,任何累乘都会先乘 0 得 0,这是绝大多数考生会掉进去的坑。

【解题思维】 拿到题先做什么?先看循环范围:i 从 0 到 4,array[i] 依次是 1、2、3、4、5。再看 res 初值是 0。要让最终输出 120,必须让 res 在循环结束后等于 120。三种基本操作:累加得 15、累乘得 0、赋值得 5。因此没有选项能直接得到 120,选 D。

【陷阱拆解】 A 项考察累加与累乘的区别,但 1+2+3+4+5=15 远小于 120;B 项是命题人最阴险的设计——res 初值为 0,任何数乘 0 都得 0,学生若只记“求阶乘用累乘”而不看初始值,必选 B;C 项赋值操作会覆盖之前的值,最后一次 res 被赋成 5;D 项看似简单,实则要求考生真正理解三种操作的效果,而不是机械匹配“120”这个数字。

【反命题思维】 把 res 的初值改成 1,再填 B 就能得 120——这就是 C++ 里求阶乘的标准写法。改题换考法,答案就变了。刷到类似题时,先问自己“res 初值是多少,它在循环里扮演什么角色”,而不是凭感觉选。

【考频与趋势】 基础语法在题库共考过 1295 题,覆盖 11 个考试级别(2008-2026);逐年分布:2008 年 1 题、2011 年 1 题、2019 年 3 题、2023 年 287 题、2024 年 413 题、2025 年 401 题、2026 年 109 题、null 年 80 题;分赛事:GESP 一级 332 题、GESP 二级 283 题、GESP 三级 215 题、GESP 四级 186 题、GESP 七级 91 题、GESP 八级 79 题、GESP 六级 78 题、GESP 五级 23 题、CSP 提高级 3 题、CSP 入门级 3 题、NOIP 提高组 初赛 2 题。运算符与表达式共考过 261 题,覆盖 9 个考试级别(2007-2026);逐年分布:2007 年 4 题、2008 年 1 题、2009 年 4 题、2010 年 5 题、2014 年 1 题、2019 年 3 题、2020 年 2 题、2021 年 1 题、2022 年 1 题、2023 年 91 题、2024 年 41 题、2025 年 61 题、2026 年 14 题、null 年 32 题;分赛事:GESP 一级 72 题、GESP 二级 70 题、GESP 三级 47 题、GESP 四级 37 题、CSP 入门级 12 题、NOIP 普及组 初赛 9 题、CSP 提高级 7 题、NOIP 提高组 初赛 6 题、GESP 五级 1 题。

【预测】 从数据看,2023-2026 年基础语法题量激增(287→413→401→109),说明命题人正加大对此类“细节陷阱”的考查力度。未来 GESP 三级及以下的题目仍会高频出现“初始值决定结果”的变式,比如把 res 初值改成 1 或 -1,或者把数组元素改成负数,看学生是否能正确判断累乘结果。暂无足够依据预测具体年份的题型,但建议重点练习“修改初值后选项是否依然成立”这类反命题题目。

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