如果 a 为 char 类型的变量,下列哪个表达式可以正确判断 “a 是数字”?( )
答案a。不同类型混合运算时发生隐式类型转换,向更高精度提升。bool→int→long→float→double。
注意:关系表达式(3==0)结果为bool(false=0)。bool可转为int参与算术运算。
【考点】字符ASCII编码|关系运算符优先级|逻辑与运算
🎯 考纲定位 GESP二级 第3章“基本数据类型与输入输出”,命题人卡住的是:学生常误以为C++支持链式比较(如0≤a≤9),实则编译器会先算(0≤a)再与9比较,导致逻辑错误。
🧠 解题思维 ASCII码中数字'0'~'9'连续,判断需保证:a≥'0'且a≤'9'。C++中字符比较等价于ASCII整数值比较,故正确写法为 '0'<=a&&a<='9'。选项B、D下限大于上限,逻辑恒假;选项C看似简洁,实为陷阱。
🪤 陷阱拆解 C选项"0<=a<=9"是命题人经典坑点:C++不支持三元比较,实际计算为(0<=a)<=9,布尔值再与字符比较,结果完全不可预期。例如当a='z'时,(0<=z)为真,真≤'9'为假,却仍返回假——看似正确,实则逻辑断裂。B、D属于下限>上限,永远不成立,但易被粗心者误选。
🔄 反命题思维 若将条件改为“判断a是否为字母”,正确表达式应为 'a'<=a&&a<='z'或'A'<=a&&a<='Z';再进阶可考isdigit(a)或isalpha(a),但二级不要求。刷到此类题先问“命题人想考我ASCII连续性还是比较语法”——这能避开90%的陷阱。