GESP 一级 · GESP 202606 C++ 一级 第 23 题

判断题 · 答案 B

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

题目

下面的 C++ 代码执行后将输出 $24$。

int total;
for (int n = 1; n <= 4; n++) {
    total *= n;
}
cout << total;
答案:B

解题思维

答案B。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。

常见错误

逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。

详细解析(节选)

【考点】变量初始化|循环乘法|未定义行为

🎯 考纲定位:GESP 一级 C++ 语法模块,重点考查变量声明与初始化的区别。命题人设陷阱在变量初始化——int total; 声明未赋值,内存中残留值随机,可能为零、负数或任何整数。许多考生误以为声明即初始化,忽略了未定义行为,卡住对语法细节的精确理解。

🧠 解题思维:先模拟循环——total 初始为垃圾值,每轮 total *= n。n=1 时 total=垃圾值×1;n=2 时 total=垃圾值×2;n=3 时 total=垃圾值×6;n=4 时 total=垃圾值×24。最终值完全取决于垃圾值,绝非 24。需警惕"声明即初始化"的直觉错误。

🪤 陷阱拆解:选项 A 的诱惑在于 4! 的确等于 24,命题人利用"阶乘直觉"掩盖变量未初始化漏洞。更阴险的是,部分考生会误以为 total 自动为 1(像 total = 1 那样),从而选 A。许多初学者会混淆'声明'与'赋值'——int total; 只是分配内存,未写入任何值,这与 total = 0; 或 total = 1; 有本质区别。若只背"循环乘积=阶乘",忽略声明细节,必掉进这个语义陷阱。

🔄 反命题思维:若把 int total; 改成 int total = 1;,答案立刻翻转为 A。刷到类似题时,先问自己"变量是否显式初始化",这是区分语法盲点的关键。所有未初始化变量在 C++ 中都是未定义行为,考试必考细节。

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