GESP 二级 · GESP 202509 C++ 二级 第 23 题

判断题 · 答案 A · 考点:递推、循环控制

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

题目

下列 C++ 代码用于求斐波那契数列,即第 $1$ 个数 $0$、第 $2$ 个数 $1$,从第三个数开始,是前两个数之和。如果输入的值为大于 $1$ 的正整数,该代码能实现。( )

cin >> n;
a = 0, b = 1;
for (int j = 0; j < n; j++){
    cout << a << " ";
    b = b + a;
    a = b - a;
}
答案:A

考点

递推循环控制

解题思维

答案A。运算符是C++的重要组成部分。要区分不同运算符的使用格式和优先级。

常见错误

\=不是合法运算符。注意区分 =(赋值)、==(相等比较)、!=(不等比较)。

详细解析(节选)

【考点】递推|循环控制|变量状态追踪

解题思维:看到"斐波那契数列"先锁定递推公式 $F_i = F_{i-1} + F_{i-2}$。代码里 a 初始为 0、b 为 1,对应 $F_1$ 和 $F_2$。循环体先输出 a(即当前项),再更新 b = b + a(得到下一项),然后 a = b - a(把 a 替换成原来的 b)。这本质是"输出→计算下一项→恢复当前项"的三步递推,恰好匹配题目要求的顺序。

陷阱拆解:错误选项常把循环条件写成 j < n-1,导致少输出一项;或者先更新 a 再输出,打乱数列顺序。本题最阴险的细节是"a = b - a"这条语句——它依赖 b 保存的是"新 b",而学生若误以为 b 是临时变量,就会认为 a 被错误覆盖。如果你只背结论,会认为 a = b - a 是多余操作,从而误判代码错误。

反命题思维:如果把初始值改成 a = 1, b = 1,循环会输出 1, 1, 2, 3…,对应斐波那契从第二项开始。刷到类似题时,先问自己:"命题人想考我变量更新顺序还是循环边界?"

同考点真题

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