GESP 一级 · GESP 202309 C++ 一级 第 9 题

选择题 · 答案 A · 考点:整数与整除

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

题目

下面 C++ 代码执行后的输出是( )。

int m = 7;
if (m / 5 || m / 3)
    cout << 0;
else if (m / 3)
    cout << 1;
else if (m / 5)
    cout << 2;
else
    cout << 3;
答案:A

考点

整数与整除

解题思维

这道题考的是 C++ 中整数除法的取整规则以及逻辑运算符 || 的短路求值特性。拿到题先别急着算结果,要盯着 if 条件里的两个除法表达式:m/5 和 m/3。因为 m=7,这两个除法在 C++ 里都是整数运算,商分别是 1 和 2,都是非零值。逻辑或 || 只要有一个操作数为真,整个条件就为真,所以程序会直接进第一个分支输出 0。

常见错误

最大的坑在于对整数除法的误解。很多初学者看到 7 除以 5,脑子里浮现出 1.4,误以为结果是 0 或者小数,从而判断条件为假。实际上 C++ 的整数除法直接截断小数部分,7/5 就是 1,非零即真。其次是把逻辑或 || 看成了逻辑与 &&,或者把 || 理解成‘两个都要满足’,导致误入 else 分支。还有一种情况是忽略了短路特性,虽然这题不影响结果,但养成习惯很重要。

详细解析(节选)

【考点定位】 这道题属于 GESP 一级典型的‘控制程序流程’与‘基本运算’交叉点。命题人把整数除法的非零值伪装成逻辑真值,专卡初学者对 C 语言真值判断的模糊认知——能算出结果却不敢断定真假。这类题在题库中属于高频考点,历年 GESP 一级相关题目占比很高,特别是涉及条件判断和整数运算结合的题型。

【核心概念拆解】 要解对这道题,必须守住两个底线: 第一,C++ 中整数除法(/)的结果永远是整数,会自动丢弃小数部分。7 除以 5 不是 1.4,而是 1;7 除以 3 不是 2.333,而是 2。 第二,逻辑运算符 ||(或)的短路特性。只要左边为真,右边根本不会执行;只要有一个为真,整体就为真。在 C++ 里,非零整数视为逻辑真(true),零视为逻辑假(false)。

【命题人视角】 命题人为什么这么出?很简单,7 这个数选得极妙。7 除以 5 看似除不尽,容易让人产生‘商是 0’的错觉;7 除以 3 也除不尽,让人犹豫。但整数除法的规则是‘向下取整’,所以两个商都是正数。再配合 || 运算符,命题人就是想让你判断‘只要有一个能整除(或者商非零)’的情况。这种‘看得见的除不尽’与‘看得见的真值’之间的认知断层,正是 GESP 一级喜欢挖的坑。

【思考心法与推演】 拿到题,按顺序走一遍代码: 1. 初始化:int m = 7; 变量 m 的值确定为 7。 2. 进入第一个 if:条件表达式是 (m / 5 || m / 3)。 - 先算 m / 5:7 除以 5,整数除法得 1。 - 1 是非零数,在逻辑判断中等价于 true。 - 因为 || 是短路或,左边已经为真,整个条件直接判定为 true,右边的 m / 3 根本不用算。 - 结论:if 条件成立。 3. 执行 if 分支:cout << 0; 输出字符 '0'。 4. 后续 else if 和 else 全部跳过。

所以最终输出就是 0。

【避坑指南】 最容易错的选项是 B(1)、C(2)和 D(3)。

【考频与趋势】 从题库数据统计来看,基础语法类题目(含 if 语句、运算符)在 GESP 一级中占比极高,历年相关题目数量庞大,且近年(2023-2026)呈上升趋势,说明这类考察基本运算规则与逻辑判断的题目是必考内容。整数与整除相关题目虽然总数不多,但精准打击了‘非零即真’这一核心概念,是区分度极高的考点。

【未来预测】 基于现有数据和命题习惯,未来 GESP 一级及二级考试中,类似‘整数除法结果作为逻辑条件’的题目仍会高频出现,且可能会增加运算符优先级(如 || 与 && 混用)或结合自增/自减运算符的复合条件判断,以进一步考察学生对 C++ 运行时行为的理解。暂无足够依据预测具体年份或题型变化,但‘非零即真’这一核心规则不会变。

同考点真题

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