NOIP 普及组初赛 · NOIP 2014 普及组初赛试题 第 14 题

选择题 · 答案 C

← 整套速查表 NOIP 普及组初赛 全部真题

题目

设变量 $x$ 为 float 型且已赋值,则以下语句中能将 $x$ 中的数值保留到小数点后两位,并将第三位四舍五入的是( )。

答案:C

解题思维

这题考的是浮点数四舍五入的底层逻辑。拿到题别急着套公式,先想:怎么把小数位挪到整数位去凑整?核心就是‘乘100→加0.5→取整→除100’这四步顺序不能乱,C选项正是这个流程。

常见错误

最容易掉进的坑是漏了(int)强制转换,或者把加0.5的位置放错。比如A选项写成x*100+0.5/100.0,因为除法优先级高,0.5/100.0变成了0.005,完全没起到四舍五入的作用;D选项先除后乘,相当于把小数点往左移再往右移,数值没变但精度逻辑全乱;B选项虽然加了(int)但没先乘100,直接对原数取整,结果精度直接丢到个位去了。这些错误选项都看似有理,实则顺序或运算优先级错了。

详细解析(节选)

考点与命题视角

这道题考查的是浮点数四舍五入的底层逻辑,属于CSP-J/S初赛里必考的‘基础运算与数据类型’范畴。命题人特别喜欢在这里挖坑:给你几个长得像模像样的表达式,让你凭感觉选,但只有严格按‘移小数→凑整→取整→还原’顺序写的才正确。

人话讲概念

float在计算机里是近似值,比如3.456存进去可能变成3.45599999…,这时候直接截断或者加0.5再截断,结果都会偏。正确的四舍五入套路是: 1. 先把小数点向右移两位(乘100),把要保留的最后一位变成个位; 2. 加0.5,让四舍五入的‘凑整’自然发生; 3. 用(int)强制取整,把小数部分直接扔了; 4. 再除以100.0,把小数点移回去。

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