GESP 二级 · GESP 202509 C++ 二级 第 18 题

判断题 · 答案 B · 考点:运算符优先级

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

题目

下列 C++ 代码执行后将输出 $1$,因为 $a$ 确实小于 $20$ 和 $10$。( )

a = 5;
cout << (a < 10 and 20);
答案:B

考点

运算符优先级

解题思维

答案B。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。

常见错误

整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。

详细解析(节选)

【考点】C++运算符优先级|逻辑运算符短路|输出流行为

命题人专攻C++二级考生对运算符优先级理解模糊的痛点,用<与and的优先级错位制造陷阱。C++规定关系运算符<优先级(6)高于逻辑and(11),因此a < 10 and 20实际按(a < 10) and 20结合,而非a < (10 and 20)。

看到题先想运算符优先级,C++中关系运算符<优先级高于逻辑运算符and,所以(a < 10 and 20)等价于(a < 10) and 20。a < 10为true,true and 20按位与结果为20,输出20而非1。

错误选项B声称输出1,命题人利用考生对and的误解,误以为and是逻辑与且20会自动判断为true,或以为a < 20 and 10才成立。题目中a确实小于20和10,但表达式是a < 10 and 20,不是a < 20 and a < 10。

如果把20改成true,(a < 10 and true)输出1;如果把and改成&&,(a < 10 && 20)输出20。刷到类似题时,先问自己"运算符优先级真的是这样吗"。

同考点真题

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