高空墜球問題

引入

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

運行測試

在這裏插入圖片描述

在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章