GESP 一级 · GESP 一级样题(C++ 组) 第 8 题

选择题 · 答案 D

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

题目

如果用两个 int 类型的变量 a 和 b 分别表达直角三角形两条直角边的长度,则下列哪个表达式可以用来计算三角形的面积?( )

答案:D

解题思维

这题表面考面积公式,实则考C++整数运算的坑。拿到题先想:a和b是int,直接除会丢小数。所以千万别写a * b / 2,必须引入浮点常量0.5来强制类型提升,这样算出来的才是带小数的面积。

常见错误

最容易栽跟头的是选A,觉得公式没错,却忘了int相除直接截断小数;还有人会选B,以为先除后乘和先乘后除一样,其实a是奇数时a/2已经丢精度了;最阴险的是C,1/2在int运算里直接等于0,整题结果全是0。记住,C++里写数学公式,常量一定要用0.5这种浮点形式,别偷懒用1/2。

详细解析(节选)

【考点】整数除法与浮点常量

GESP一级C++组专门卡住那些"以为数学公式直接就能用"的考生:直角三角形面积公式确实是a×b÷2,但C++里两个int相除会直接丢弃小数,这才是绝大多数人栽跟头的地方。

【解题思维】 公式是a × b ÷ 2,但a、b都是int,运算顺序从左到右:

所以A(a * b / 2)在a×b为奇数时直接错;B(a / 2 * b)更离谱,先除a就丢了a的小数部分;C的1/2在int里等于0,整题变0;只有D用浮点常量0.5,强制把运算提升为浮点,结果正确。

【陷阱拆解】

【反命题思维】 如果a、b改成double,那A就正确了(浮点除法保留小数);如果问的是任意三角形面积,就得用海伦公式;如果问的是圆面积,π必须用浮点常量3.14159…

记住:C++里写数学公式,常量用0.5不用1/2,类型决定一切。

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