如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a是大写字母”?( )
这题考字符范围判断和逻辑运算符。拿到题先想ASCII表里大写字母是连续区间,C++不支持Python那种链式比较,必须拆成两个条件用&&连起来,括号不能省。
最容易栽跟头的是选B,把C++当Python用,以为能写'A'<=a<='Z',编译器会报错或者逻辑全乱;其次是A,只看了差值非负没意识到'a'比'A'大得多也会满足条件;还有C这种纯常量比较,完全没用到变量a,命题人就是拿这个坑那些不看题干的。
这道题考查的是字符类型的比较运算以及逻辑运算符的使用。命题人喜欢把简单概念包装成陷阱,特别是针对Python转C++的选手,故意放一个看着很像对的链式写法(B项),其实C++里<=不支持三目链式,会被解析成('A'<=a)<= 'Z',类型都不对,编译都过不了。A项则是利用差值非负的直觉误区,没考虑'a'比'A'大得多也会满足条件。C项更阴险,纯常量比较,跟变量a没关系,永远返回false。所以正确答案只能是D,用&&把两个单条件连起来。
看到“大写字母”先想ASCII表里'A'到'Z'是连续区间,然后回忆C++不支持链式比较,必须用逻辑运算符拼接两个单条件。正确思路是:既要判断a≥'A',又要判断a≤'Z',两者缺一不可,用&&连接。因为<=优先级比&&高,理论上不加括号也能先算比较再逻辑与,但命题人故意把带括号的正确写法放在D,让你先怀疑自己,再确认括号必要性——这是典型的“先制造认知冲突”的命题套路,考的就是你对运算符优先级和逻辑组合的敏感度。