高空坠球问题

引入

高空坠球。皮球从 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;
}

运行测试

在这里插入图片描述

在这里插入图片描述


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