引入
高空坠球。皮球从 height(米)高度自由落下,触地后反弹到原高度的一半, 再落下,再反弹……如此反复。问皮球在第 n 次落地时,在空中一共经过多少距 离?第 n 次反弹的高度是多少?输出保留 1 位小数。试编写相应程序。
分析
分析:
先我们需要一个高度、反弹的次数
我们用假设法写一个例子找找规律,设置高度为10.0,弹了3次
次数 高度 距离
1 5 15 第一次的距离从10米落下有反弹了5米距离是15
2 2.5 22.5 第二次的距离从5米落下有反弹了2.5,也就是7.5米,加上第一次的距离是22.5米
3 1.25 18.75 到这里就看出规律了,第三次的距离是第二次高度的三倍,加上之前的距离就是26.25
高度是呈2倍递减,这次的距离是上次距离的三倍,求的就是距离和n次反弹的高度
代码
# include <stdio.h>
int main(){
/**
高空坠球。皮球从 height(米)高度自由落下,触地后反弹到原高度的一半, 再落下,再反弹……如此反复。
问皮球在第 n 次落地时,在空中一共经过多少距 离?第 n 次反弹的高度是多少?输出保留 1 位小数。试编写相应程序。
*/
/**
分析:
先我们需要一个高度、反弹的次数
我们用假设法写一个例子找找规律,设置高度为10.0,弹了3次
次数 高度 距离
1 5 15 第一次的距离从10米落下有反弹了5米距离是15
2 2.5 22.5 第二次的距离从5米落下有反弹了2.5,也就是7.5米,加上第一次的距离是22.5米
3 1.25 18.75 到这里就看出规律了,第三次的距离是第二次高度的三倍,加上之前的距离就是26.25
高度是呈2倍递减,这次的距离是上次距离的三倍,求的就是距离和n次反弹的高度
*/
//输入高度和反弹次数
double h,n;
printf("Entry h and n:");
scanf("%lf%lf",&h,&n);
double s;
//需要注意一下特殊情况,当n=0时,h = 10 s = 0; 我觉得这是写程序的一个习惯
int i;
if(n == 0){
s = 0;
}else{
for(i = 1; i <= n; i++){
h/=2.0;
s+=3.0*h;
}
}
printf("第%d次弹起的高度是:%.1lf\n",n,h);
printf("第%d次经历的距离%.1lf",n,s);
return 0;
}