C语言编程 经典例题一百道 20 一球从100米的高度自由落下,每次落地返回原高度的一半再落下,求它在第10次落地,共经过多少米?第10反弹多高。

#include <stdio.h>
int main()
{
	float i,sum = 0 ;

	int j ; 
 
	i = 100.0 ;
 
	for (j = 1 ; j <= 10 ; j++)
	{
		sum = sum + i ;           // 十次落地,把十次向下运动的距离相加。
 
		i = i / 2 ;
 
		if(j <= 9)
		{
			sum = sum + i ;      // 十次落地,有九次向上运动的距离。把九次向上的距离相加。
		}
 
	}
 
	printf("\n经过的总路程为%5.2lf\n\n",sum) ;
 
 
	return 0 ;
	
}

方法二:

#include <stdio.h>
int main()
{
	float i,j = 1,sum = 0 ;
 
	i = 100.0 ;
 
	while (j != 10)
	{
		sum = sum + i ;
		
		i = i / 2 ;

		if (j <=10 )
		{
			sum = sum + i ;
		}

		j++;
 
		
	}
 
	printf("\n经过的总路程为%5.2lf\n\n",sum) ;
 
 
	return 0 ;
	
}

方法三:

#include <stdio.h>
int main()
{
	float i,j = 1,sum = 0 ;
 
	i = 100.0 ;
 
	do {
		sum = sum + i ;
 
		i = i / 2 ;

		if (j <= 9)
		{
			sum = sum + i ;
		}
 
		j++ ;
		
	} while(j != 10);
 
 
	printf("\n经过的总路程为%5.2lf\n\n",sum) ;
 
 
	return 0 ;
	
}

 

总结:    方法一和二,三。逻辑上相同。

              但不知道什么原因相差0.2,欢迎指出。

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这是一个从高度自由下落的问题,每次落地返回高度一半,再下落。它第10落地时的高度。 解题思路:这是一个典型的等比数列,每次高度减半,所以第n落地后的高度高度的1/(2^n)倍。第10落地时的高度高度的1/(2^10)倍,即高度的1/1024。 ### 回答2: 这题需要用到一些物理公式和数学知识。先来看一下每次落地高度变化。 第一落地时,球的高度为n,弹起后高度变成来的一半,即n/2落地后再弹起,高度变成n/2。所以,第一落地时球弹起的总距离为n+n/2。 第二落地时,球的高度为n/2,弹起后高度变为来的一半,即n/4落地后再弹起,高度变为n/4。所以,第二落地时球弹起的总距离为n/2+n/4。 第三落地时,球的高度为n/4,弹起后高度变为来的一半,即n/8落地后再弹起,高度变为n/8。所以,第三落地时球弹起的总距离为n/4+n/8。 以此类推,第10落地时,球弹起的总距离应该是: n + n/2 + n/4 + n/8 + … + n/(2^9) 这个数列是一个等比数列,公比为1/2,首项为n,末项为n/(2^9),有: a1 = n q = 1/2 n = 10 所以,根据等比数列的和公式,第10落地时球弹起的总距离为: n(1 - q^n)/(1 - q) 代入计算,可以得到第10落地时球弹起的总距离为: n(1 - (1/2)^10)/(1 - 1/2) = n(1 - 1/2^10)/(1/2) = n(2 - 1/(2^9)) = 1023n/512 至此,我们得到了在第10落地时球弹起的总距离,即1023n/512。 ### 回答3: 这题目可以通过数学公式和循环结构来解决。我们可以先设球第一下落的高度为n,则第二下落时的高度为n/2,第三下落时的高度为n/4,依类推,第10下落时的高度为 n/(2^9) 。 通过代码实现,我们可以使用一个循环结构来模拟球的下落过程,记录下球落地数,直到球第10落地为止。下面是一段实现代码: ``` #include <stdio.h> #include <math.h> int main() { int n = 10; float height = 0, distance = 0; height = 100; //设球的初始高度100 for(int i = 1; i <= n; i++) { distance += height; //累加下落距离 height /= 2; distance += height; //累加弹起距离 } printf("球第10落地时的高度为%.2f,总下落了%.2f\n", height, distance); return 0; } ``` 在这段代码中,我们设球的初始高度100,循环结构中先累加下落距离(distance += height),然后球弹起并更新球的高度高度一半(height /= 2),再累加弹起距离(distance += height)。 最后输出球第10落地时的高度和总下落了多少。运行代码结果为:球第10落地时的高度为0.98,总下落了299.61

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值