NOIP 普及组初赛 · NOIP 2007 普及组初赛试题 第 15 题

选择题 · 答案 B · 考点:逻辑代数、运算符与表达式

← 整套速查表 NOIP 普及组初赛 全部真题

题目

在 C++ 语言中,判断 $a$ 等于 $0$ 或 $b$ 等于 $0$ 或 $c$ 等于 $0$ 的正确的条件表达式是(  )。

答案:B

考点

逻辑代数运算符与表达式

解题思维

这道题考的是逻辑表达式的等价转换。拿到题先别急着写代码,把题意翻译成数学语言:‘a、b、c 中至少有一个等于 0’。然后利用德摩根定律,把‘至少有一个等于 0’反过来想成‘三个都不等于 0’的否定,这样就能一眼看出答案。

常见错误

最容易掉进两个坑:一是把‘或’看成‘且’,误选 A,以为三个数都得是 0 才对;二是分不清赋值和比较,看到 a=0 就以为是对的,其实那是把 0 赋给 a,不是判断相等,C++ 里判断相等必须用 ==。德摩根定律用反了也是重灾区,记住口诀:and 的否定变 or,or 的否定变 and。

详细解析(节选)

考点与概念

这道题考查的是 C++ 逻辑表达式与德摩根定律的应用。核心概念很简单:

德摩根定律:

赋值与比较:

命题人的小心思

命题人特别喜欢在‘或’和‘且’的否定上挖坑。题目问的是‘a 等于 0 或 b 等于 0 或 c 等于 0’,直接写 a==0||b==0||c==0 当然没错,但选项里没有这个朴素形式。命题人想考的是你是否掌握德摩根定律:能不能把‘至少有一个等于 0’转化为‘三个都不等于 0’的否定。

同考点真题

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