实验4-1-11 高空坠球分数 20

该篇文章讨论了如何使用编程解决一个物理问题,即计算皮球在自由落体后反弹,每次反弹高度为原高度的一半,直到第n次落地时,皮球在空中经过的总距离及第n次反弹的高度。给出了C语言代码实现和输入输出样例。

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。 

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

输入样例:

33 5

输出样例:

94.9 1.0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <stdio.h>
#include <math.h>
int main ()
{
     double n,x,all=0,h;
	 int i;
	 
	 
	 scanf("%lf %lf",&h,&n);
	 if (n==0){
	  printf("0.0 0.0");
	  return 0;
	 }
	 for(i=1;i<=n;i++){
	 all=h*pow(2,2-i)+all;	
	 }
	 all=all-h;
	 x=h;
	 for(i=1;i<=n;i++){
	 	x=x/2;
	 } 
	 printf("%.1f %.1f",all,x) ;
     
	return 0;
} 

编程解决高空问题,即计算皮从给定高度自由落下,触地后反弹到原高度的一半,再落下,如此反复,在第 `n` 次落地时在空中经过的距离以及第 `n` 次反弹的高度,可参考以下几种实现方式。 ### 实现思路 需要注意首次落下和后续反弹落下的情况不同,首次是直接落下,后续是反弹后上下两个过程。并且最后一次反弹高度只需计算,无需计入总路程。 ### 代码示例 #### 示例一 ```c #include<stdio.h> int main() { double h; int n; scanf("%lf %d", &h, &n); if (n == 0) { printf("0.0 0.0"); } if (n == 1) { printf("%.1f %.1f", h, h / 2); } else { int i; double sum = h; for (i = 2; i <= n; i++) { h = 1.0 / 2 * h; sum += 2 * h; } h = 1.0 / 2 * h; printf("%.1f %.1f", sum, h); } return 0; } ``` #### 示例二 ```c #include<stdio.h> int main() { double height = 0, height_total = 0; int i = 0, n_Ground = 0; scanf("%lf %d", &height, &n_Ground); if (n_Ground == 0) { height_total = 0.0, height = 0.0; } else { height_total += height; for (i = 1; i < n_Ground; i++) { height = height / 2; height_total += height * 2; } height = height / 2; } printf("%.1f %.1f", height_total, height); return 0; } ``` #### 示例三 ```c #include <stdio.h> int main() { int i, h, n; float s = 0.0, z = 0.0, k = 2.0; scanf("%d %d", &h, &n); if (n > 0) { s = h; for (i = 1; i <= n; i++) { s = s + 2.0 * z; z = h / k; k = k * 2; } } printf("%0.1f %0.1f", s, z); return 0; } ``` ### 代码解释 - **输入处理**:通过 `scanf` 函数获取皮初始高度和落地次数。 - **特殊情况处理**:当落地次数 `n` 为 0 时,经过距离和反弹高度都为 0;当 `n` 为 1 时,经过距离为初始高度,反弹高度为初始高度的一半。 - **循环计算**:从第二次落地开始,每次反弹高度为上一次的一半,且每次反弹后上下的路程都要计入总路程。 - **输出结果**:使用 `printf` 函数输出第 `n` 次落地时在空中经过的距离和第 `n` 次反弹的高度,保留一位小数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值