C语言经典例题-小球下落

一个球从100m高度自由落下, 每次落地后反跳回原高度的一半, 再落下, 再反弹。求它在第10次落地时, 共经过多少米, 第10次反弹多高。

分析下题目,不要给绕晕了.共经过多少米其实就是在说,一个小球,前九次落地反弹,再加上1次落地,一共经过多少米
而最后一次的反弹不算在经过多少米以内,直接将它的反弹高度求出来

第一种方法,算出十次落地加反弹的总米数,最后减去第十次反弹

这里采用的是算把一开始的下落和反弹看成一个周期,一共十个周期,因此算完后需要减去最后一个反弹高度

在这里插入图片描述

void main()
{
	double height = 100, distance=0;
	int time = 1;
	while (time<=10)
	{
		distance += height;//加上下落的距离
		height /= 2;//每次反弹的高度为原来的一半
		distance += height;//加上反弹的距离
		printf("%dth-distance=%lf,height=%lf\n",time, distance, height);
		time++;
	}

	distance -= height;//因为这样算加上了最后一次的反弹高度,而共经过多少米是根据第10次落地来看的

	printf("\nfinal_distance=%lf,height=%lf", distance, height);
}

在这里插入图片描述

第二种,先加上第一次落地,再求剩下落地加反弹.

在这里插入图片描述
这里让人难以理解的点在于第一次,比较特殊,这种方法把第一个周期看成是上图三个操作,之后,恢复成下图多余部分的操作
在这里插入图片描述

需要注意的是,反弹上去,也会下落,但这个下落高度和反弹高度一致,因此直接算上这两次的高度.
而又因为这个周期是没有包括最后一次的反弹高度的,所以求出来的总距离不需要减去反弹高度

void main()
{
	double distance = 100, height = 100;

	height /= 2;

	for (int time = 2; time <= 10; time++)//因为算上了前一次的周期,所以不需要再算第一次,直接从第二次算起,直到第10次.
	{
		distance += height * 2;//两次反弹和下落的高度一致              
		height /= 2;
	}

	printf("distance=%lf,height=%lf", distance, height);
}

在这里插入图片描述

同样能够得到一样的结果,只不过计算的过程略有不同,理解还是第一种好理解

如有不足,还望指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值