GESP 二级 · GESP202609 C++ 二级 第 5 题

选择题 · 答案 A · 考点:运算符优先级

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

题目

判断年份 N 是否为闰年的规则是:能被 4 整除但不能被 100 整除,或者能被 400 整除。以下 C++ 表达 式中,能正确判断 N 是否为闰年的是(  )。

答案:A

考点

运算符优先级

解题思维

闰年规则直接翻译为取模与逻辑组合:(N % 4 == 0 && N % 100 != 0) || (N % 400 == 0)。核心是记住 && 优先级高于 ||,括号不可省略,否则逻辑分组会错。

常见错误

A 选项正确;B 选项漏括号导致优先级错误;C 选项用除法代替取模,N / 4 == 0 仅当 N 为 0 或负数;D 选项将 || 错写为 &&,要求同时满足两个条件。题目中"能被 4 整除但不能被 100 整除,或者能被 400 整除"是典型的或关系陷阱,很多考生会忽略括号或误用与运算。

详细解析(节选)

考纲定位

GESP 二级"基本运算"模块,命题人用这道题卡住的是对运算符优先级和逻辑表达式的理解。这是基础语法里最容易被忽略的"优先级陷阱"——学生往往看到逻辑条件就乱写,完全没考虑 C++ 中 && 比 || 先结合,导致括号缺失时表达式会被错误解析。

解题思维

看到闰年规则,先想取模判断整除关系:N % 4 == 0 表示能被 4 整除。再想"但不能被 100 整除",就是 N % 100 != 0。这两个条件必须同时满足,用 && 连接。"或者能被 400 整除"是独立的另一种情况,用 || 连接。因为 && 优先级高于 ||,所以必须加括号把前半部分包起来,否则表达式会变成:N % 4 == 0 && (N % 100 != 0 || N % 400 == 0),逻辑完全错了。

陷阱拆解

选项 A:完全正确,括号分组和运算符都匹配规则。

选项 B:N % 4 == 0 && N % 100 == 0 || N % 400 == 0。命题人故意漏掉第一个括号,利用考生对优先级的无知。&& 先结合,变成 (N % 4 == 0 && N % 100 == 0) || N % 400 == 0。这要求年份必须同时被 4 和 100 整除,或者被 400 整除——这根本不是闰年规则!比如 2000 年:N % 4 == 0 为真,N % 100 == 0 也为真,所以前半部分为真,整个表达式为真。但 2004 年:N % 4 == 0 为真,N % 100 == 0 为假,前半部分为假,N % 400 == 0 也为假,整个表达式为假——2004 明明是闰年却判错。这是典型的"优先级陷阱"。

选项 C:用除法代替取模,N / 4 == 0 意味着 N 必须小于 4,N / 100 != 0 意味着 N 必须大于等于 100,这两个条件永远不可能同时为真。命题人用这个选项卡住的是那些"看到整除就想除法"的惯性思维——除法求商,取模求余,完全不同。

选项 D:把 || 错写为 &&,变成 (N % 4 == 0 && N % 100 != 0) && (N % 400 == 0)。这要求年份必须同时满足"能被 4 整除但不能被 100 整除"和"能被 400 整除"——但能被 400 整除的年份必然也能被 100 整除,所以 N % 100 != 0 永远为假,整个表达式永远为假。命题人利用的是"或关系被误读为与关系"的常见错误。

反命题思维

如果把题目改成"能被 4 整除且能被 100 整除且能被 400 整除",答案会立刻变成 C 选项——命题人换一种考法,把"或"换成"且",整个逻辑就翻了个面。

如果把 || 换成 &&,答案会变成 D 选项——这是最直接的变式,考察考生是否真正理解闰年规则是"或"关系。

如果把"能被 4 整除但不能被 100 整除"改为"能被 4 整除且能被 100 整除",答案会变成 B 选项——命题人利用考生对括号和优先级的双重疏忽。

甚至可以把年份范围缩小到 2000-2100,考察边界年份 2000 和 2100 是否符合规则,这时候只有 A 选项能正确判断 2000 是闰年而 2100 不是。这些变式都指向同一个核心:括号和运算符优先级的正确分组。命题人出这道题不是为了考闰年知识本身,而是考你写逻辑表达式时会不会掉坑——这是 GESP 二级"基本运算"模块里最经典的命题套路。

同考点真题

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