如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断 “a 等于 0 且 b 等于 0” 的是( )
这题核心就是看表达式求值的规则。拿到题先别急着读选项,脑子里过一遍C++里==、&&、!、+这些符谁的优先级高,特别是连续写==到底怎么结合,这是解题唯一突破口。
最容易栽跟头就是觉得a==b==0一眼看上去就是“a等于0且b等于0”,其实连续==是左结合的,先算a==b,再把结果和0比,逻辑全偏了。还有人会误以为非运算符!直接作用于变量名,其实!a就是a!=0,必须转成逻辑非再想。另外把关系运算结果当普通数去加的时候,容易忽略bool转int是1还是0,导致D选项算错。
【考点】运算符优先级与结合性|逻辑与表达式|关系运算求值规则
命题人挖坑的意图很明确:用“连续等于”这种数学上看起来顺眼的写法,卡住那些只凭直觉做题的考生。在C++里,==是左结合的,所以a==b==0等价于(a==b)==0。先判断a和b是否相等,得到一个布尔值,再把这个布尔值跟0比。比如a=0,b=1时,(0==1)==0就是false==0,结果为true,但此时b明明不等于0,完全违背题意。这就是B项错的根本原因。
再看其他选项:A项(a==0)&&(b==0)是最标准的写法,优先级没问题;C项(!a)&&(!b)利用了非运算等价于判断是否不等于0,逻辑上完全正确;D项(a==0)+(b==0)==2把两个关系运算的结果当成整数相加,bool转int时true是1,false是0,加起来等于2说明两个都为true,也能正确判断。所以只有B项不能正确表达“a等于0且b等于0”。
思考过程可以这样走:先锁定目标语义“a=0且b=0”,然后逐个选项代入规则验证。遇到连续==立刻转成左结合形式,遇到!先转成!=0再想。这样就不会被视觉误导。
易错点再强调一遍:别把关系运算结果当普通数去加,也别以为连续==就是逻辑与。这些坑在GESP一级里反复出现,必须形成肌肉记忆。
【考频与趋势】 “运算符与表达式”这一大类在题库里共考过261题,覆盖9个级别,从2007年到2026年都有分布。逐年来看,2023年考了91题,2024年41题,2025年61题,2026年14题,其余年份较少。分赛事看,GESP一级占了72题,是出现频率最高的级别,其次是二级70题、三级47题。这说明这类题目在入门阶段非常常见,命题人喜欢用简单的表达式考优先级和结合性。
基于数据预测:未来几年GESP一级和二级仍会高频出现“运算符优先级”类题目,尤其是涉及==、&&、!、+的组合。形式上可能会继续用连续==、逻辑非嵌套、关系运算转整数等方式挖坑。暂无足够依据预测具体年份或新题型,但可确定的是,只要掌握“左结合”和“bool转int”这两条铁律,这类题基本稳拿分。