CSP-S 提高级 · CSP 2021 提高级第一轮 第 16 题

阅读程序 · 答案 ABDC · 考点:位运算、递归函数、基础算法

← 整套速查表 CSP-S 提高级 全部真题

题目

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √ ,错误填 × ;除特 殊说明外,判断题 $1.5$ 分,选择题 $3$ 分,共计 $40$ 分)

(1)

![](https://ipic.luogu.com.cn/1rorg.png) 假设输入的所有数的绝对值都不超过 $1000$ ,完成下面的判断题和单选题:

判断题

16. 将第 21 行中 t 的类型声明从 int 改为 double, 不会 影响程序运行的结果。()

17. 将第 26、27 行中的 / sqrt(t) / 2替换为/ 2 / sqrt(t),不会影响程序运行的结果。( )

18. 将第 28 行中的 x * x 改成 sq(x)、y * y 改成 sq(y),不会影响程序运行的结果。( )

19. (2 分) 当输入为 0 0 0 1 1 0 0 1 时,输出为 1.3090 ( )

单选题

20. 当输入为 1 1 1 1 1 1 1 2 时,输出为( )。 A. 3.1416 B. 6.2832 C. 4.7124 D. 4.1888

21. (2.5 分)这段代码的含义为( )。 A. 求圆的面积并 B. 求球的体积并 C. 求球的体积交 D. 求椭球的体积并

答案:ABDC

考点

位运算 讲解 →位运算 真题汇总 →递归函数基础算法

解题思维

这题考程序阅读与几何计算。别急着按公式硬算,先通读代码理解它在求两个球重叠的体积,再代入特殊数据验证。

常见错误

学生最容易把‘体积交’看成‘面积并’或‘椭球体积’;其次对宏展开不敏感,以为sq(x)在任何地方都能直接替换;还有浮点除法顺序不同导致精度误差被忽略;最后代入数据时粗心算错球心距离或球冠高。

详细解析(节选)

这道题考什么

程序阅读理解 + 宏定义陷阱 + 浮点运算细节 + 立体几何公式(球冠体积)。

概念:球冠体积

球冠就是平面截球体切下来的一部分。公式是 $V = \frac{\pi h^2 (3R - h)}{3}$,其中 $R$ 是球半径,$h$ 是球冠高(截平面到球心的距离为 $d$ 时,$h = R - d$)。两个等半径球的重叠体积,就是两个这样的球冠拼起来。

命题视角:为什么考这些坑

1. 宏定义:#define sq(x) (x*x) 展开时没有外层括号,sq(a+b) 会变成 a+b*a+b,运算顺序全变了。这是经典坑。 2. 浮点除法:/ sqrt(t) / 2 和 / 2 / sqrt(t) 数学上等价,但浮点舍入误差可能不同,命题人喜欢用这种细微差别考你。 3. 类型转换:int 改 double 通常不影响,但要看具体赋值和运算场景。 4. 几何理解:很多同学看到一堆坐标就以为是圆面积或椭球体积,其实代码算的是球心距离和球冠高,最终是球的体积交。

思考心法:拿到题先做什么

1. 整体扫描:看函数名、常量、输入输出格式,推测功能(本题输入8个数,显然是两个球心坐标,输出一个浮点数,大概率是体积交)。 2. 关键变量:t 存的是坐标平方和,d 是球心距离,h 是球冠高。 3. 代入特殊数据:用题目给的几组输入快速手算,验证选项。 4. 逐行核对:特别是宏展开和除法顺序。

具体计算与验证

判断题16:int 改 double

t 存的是坐标平方和,最大值 $1000^2 + 1000^2 = 2\times10^6$,double 能精确表示,且后续只参与浮点运算,改类型不影响结果。 → 正确

同考点真题

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