已知 int 类型的变量 $a$、$b$ 和 $h$ 中分别存储着一个梯形的顶边长、底边长和高,则这个梯形的面积可以通过表达式 (a + b) * h / 2 求得。
别光看公式,先想数据类型!题目里全是 int,整数相乘再整除,小数部分直接没了,这就是坑。
很多人会下意识选 A,觉得梯形面积公式没错啊,数学上完全正确。但编程题考的是计算机怎么算,不是纸上怎么算。如果 a、b、h 都是整数,(a+b)*h 算出来还是整数,再除以 2,C++ 的整数除法会直接截断小数部分,比如 5/2 结果是 2 不是 2.5。题目没说转浮点,也没给 2.0,那就是故意让你踩这个整数除法陷阱。
考点:整数除法截断与浮点精度。
概念:梯形面积公式 S=(a+b)*h/2 在数学上完全正确。但在 C++ 中,运算遵循类型规则:int 与 int 运算,结果仍是 int。整数除法会丢弃小数部分(向下取整),只有参与运算的数至少有一个是浮点类型(float/double),才会触发浮点除法,保留精度。
命题视角:GESP 八级专盯这种“公式对但代码错”的坑。命题人故意给 int 变量,让 (a+b)*h 溢出风险暂时放一边,重点考察你是否意识到整除会丢 0.5。这是基础语法与数学直觉的冲突点,也是区分“背公式”和“懂编程”的分水岭。
思考心法:拿到题先别急着套公式。第一步:看变量类型,全是 int?第二步:看运算顺序,(a+b)*h 肯定先算,结果再 /2。第三步:想极端情况,比如 a=1,b=1,h=1,公式得 1,代码算 (1+1)*1/2 = 2/2 = 1,看似没问题;再试 a=1,b=2,h=1,公式得 1.5,代码算 (1+2)*1/2 = 3/2 = 1,误差 0.5!题目没给具体数值,但要求判断表达式是否“能求得”面积,隐含意思是“对所有合法输入都能精确得到”,显然整数除法做不到。
避坑:最容易错就是忽略类型,只盯着数学公式选 A。记住:在 C++ 里,/ 是整数除法,除非你写成 /2.0 或先把变量转 double。题目没提示转换,就是陷阱。
考频与趋势:图形结构考过 213 题,图的基本概念 281 题,但本题属于“基础数据类型与运算”模块,是 GESP 八级高频考点。历年看,2023 年图形相关题 32 道,2024 年 61 道,2025 年 56 道,2026 年 40 道,呈先升后稳趋势;分赛事看,GESP 八级图形题 73 道,占比最高。整数除法陷阱在八级近年几乎每年必现,尤其是结合几何公式时。
预测:基于数据,未来 GESP 八级仍会高频考“公式 vs 类型”的冲突题,可能换场景(如圆面积、三角形周长)但核心不变:给 int 变量做浮点运算,看你是否主动转类型或强制浮点除法。暂无足够依据预测具体年份题型,但“公式正确但代码错误”这类题在八级至少还会持续 3-5 年。