如果 a 和 b 均为 int 类型的变量,下列表达式能够正确判断 “a 是 b 的倍数” 的是( )
判断倍数核心就是看余数是否为0,但选项里没直接给取模。拿到题先想:数学上a是b倍数等价于a/b无余数,那在整数运算里,a/b算出商再乘b,结果必须严格等于a才成立。
最容易掉进B选项的坑,把比较运算符==看成赋值=,这在C++里是致命错误。D选项则是语义陷阱,把a是b的倍数搞反成b是a的倍数。另外很多人会忽略整数除法的截断特性,以为a/b*b永远等于a,其实只有当a能被b整除时才行。
这道题考查的是整数运算的语义与数学概念的区别,属于GESP二级《基本数据类型与运算》的核心内容。命题人喜欢用‘看似数学成立’的式子来卡住只背结论的考生,特别是整数除法的截断机制和运算符混淆。
首先拆解概念:‘a是b的倍数’在数学上严格等价于a除以b的余数为0,即a % b == 0。但在C++等语言中,整数除法a / b会直接截断小数部分,只保留商。如果a不能被b整除,a / b算出的商乘回b,结果必然小于a;只有当余数为0时,a / b * b才恰好等于a。因此,a / b * b == a 就是 a % b == 0 的代数等价变形,这也是这类‘倍数判断’的通法。
逐项分析选项:A选项语法错误,?是占位符,直接排除。B选项a % b = 0,把比较运算符==偷换成了赋值=,这是C++里最经典的‘符号混淆’陷阱,只背结论的人一眼就选。D选项b % a == 0,把‘a是b的倍数’偷换成‘b是a的倍数’,这是‘语义陷阱’,概念完全颠倒。C选项a / b * b == a,数学逻辑成立,且符合整数截断特性,是唯一能正确判断倍数的表达式。
关于考频趋势:‘运算符与表达式’考点在题库中占比极高,2023年考了91题,2024年41题,2025年61题,2026年14题,GESP二级更是考了70题。‘基本数据类型’考点2026年猛增到119题,说明命题人越来越喜欢结合具体运算场景考概念理解。这类‘倍数判断’属于高频考点,每年必现。
预测未来:基于2026年数据及近年趋势,命题人可能会继续增加‘整数除法截断’与‘浮点精度’的混合陷阱,或者在更复杂的表达式中隐藏‘倍数’判断逻辑。暂无足够依据预测具体形式,但‘符号混淆’和‘语义颠倒’这两类坑,未来大概率还会以新马甲出现。
避坑提醒:刷到这类题先问自己:命题人是不是在考我‘数学等价性’与‘程序语义’的差距?特别是B选项的=和==,以及D选项的a/b与b/a,这两处是90%考生会栽跟头的地方。