C语言中对于高空坠球类题型
高空坠球
高空坠球是 C 语言循环、数学公式、浮点数计算的经典入门题,核心是重复计算下落 / 反弹高度
一、先搞懂题目通用逻辑
绝大多数题目都是这个模型:
球从初始高度 h 落下
每次落地后反弹回原高度的 1/2
求:第 n 次落地时总经过的路程 / 第 n 次反弹的高度
核心公式(落地总路程):
第 1 次落地:只走 h(向下)
第 2~n 次落地:每次走 2 * 反弹高度(向上 + 向下)
二、写代码 100% 要注意的关键点(按重要性排序)
- 变量类型:必须用 浮点数(float/double)
❌ 错误:用 int h, sum;
✅ 正确:double h, sum, high;
反弹高度会出现小数(0.5、0.25…),整型会直接截断小数,结果全错! - 初始值千万不能写错
总路程 sum 初始值 = 第一次下落高度 h
反弹高度 high 初始值 = h / 2
c
double sum = h; // 第一次落地只走了h
double high = h / 2.0;
- 循环次数:循环 n-1 次
题目求第 n 次落地:
第 1 次落地:不用循环
第 2~n 次落地:循环 n-1 次 累加路程
c
// 正确写法
for(int i=1; i<=n-1; i++){
sum += 2 * high; // 累加 上弹+下落
high = high / 2; // 更新下一次反弹高度
}
4. 除法必须用 2.0,不能用 2
❌ 错误:high = high / 2;
✅ 正确:high = high / 2.0;
C 语言中 整数/整数=整数,浮点数 / 2.0 才会保留小数。
5. 输出格式:按题目要求保留小数
保留 1 位小数:printf("%.1f", sum);
保留 2 位小数:printf("%.2f", sum);
不要直接用 %f 输出,容易格式错误。
6. 边界值测试(防坑必备)
n=1:直接输出初始高度 h
n=0:题目一般不考,按要求输出 0 即可
高度 h=0:直接输出 0
三、标准满分代码(可直接套用)
c
include <stdio.h>
int main() {
double h; // 初始高度
int n; // 第n次落地
scanf("%lf %d", &h, &n);
if(n == 0) { // 特殊情况
printf("0.0");
return 0;
}
double sum = h; // 第一次落地路程
double high = h / 2.0; // 第一次反弹高度
// 循环 n-1 次
for(int i=1; i<=n-1; i++){
sum += 2 * high;
high /= 2.0;
}
printf("%.1f", sum); // 按要求保留小数
return 0;
}
四、最常见的 3 个错误(90% 的人都栽过)
1.用 int 存高度 → 结果全是整数,直接 0 分
2.循环 n 次 → 路程多算一次,答案偏大
3.除以 2 而不是 2.0 → 高度变成 0,后续计算全错
总结
1.变量全用 double,除法用 2.0
2.总路程初始值 = h,循环 n-1 次
3.每次累加 2*high,再更新反弹高度
4.输出保留小数,特殊值 n=1、n=0 单独判断
浙公网安备 33010602011771号