下列 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。运算符是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…,对应斐波那契从第二项开始。刷到类似题时,先问自己:"命题人想考我变量更新顺序还是循环边界?"