引入
高空墜球。皮球從 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;
}