问题描述
- 求用c语言编写此程序,越简单越好,希望大神们注释一下
-
/**皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。
输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
输入样例:
33 5
输出样例:94.9 1.0
**/
解决方案
参考实例代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,i;
double distance;
double height;//高度应该是double类型
printf("Input height: ");
scanf("%lf",&height);//高度应该是double类型
printf("Input n: ");
scanf("%d",&n);
distance=0;
distance+=height;//加上最开始的高度,
for(i=1;i<=n;i++){
//item=1;
//for(j=1;j<=i;j++)
//item=item*2*height*pow(0.5,j);
distance+=height*pow(0.5,i)*2;
}
height=height*pow(0.5,n);
//小数点后多保留几位,不然容易出现0.0,同时double类型应该是%lf
printf("distance=%.6lfn",distance);//printf("distance=%.1fn",distance);
printf("height=%.6lfn",height);//printf("height=%.1f",height);
return 0;
}
解决方案二:
'//double 高度, 总量 = 0; int 次数, 计数 = 1;
'//cout << "输入任意整数不超过指定 Int 范围位数:" << endl;
'//cin >> 高度 >> 次数;
'//while (次数 >= 计数)
'//{
'// 总量 += 高度;
'// 高度 /= 2;
'// if (次数 > 计数)总量 += 高度;/*最后一次落下不计弹起*/
'// printf("次数%2d 回弹%f 总量%fn", 计数, 高度, 总量);
'// ++计数;
'//}
时间: 2025-01-02 11:54:39