注册 登录
编程论坛 C语言论坛

简单但不懂 求教

一壶瀑布 发布于 2019-07-30 09:44, 1718 次点击
#include<stdio.h>
int main()
{int n;
    double m;
    int i=0;
    double t=0;
    double x=0;
    double y=0;
    scanf("%d%lf",&n,&m);
while(i<n)

{
   
i++;
x=m/2;
m=x;
y+=x+m;
t=x+y;
}
printf( "%f%f",x,t);
return 0;
}
高m,落地后反弹m/2;求n次后高度;和走的总长??
哪错了!!!急,各路大神
6 回复
#2
wufuzhang2019-07-30 10:11
我这边测试代码没问题呀,只是有点小瑕疵,
scanf("%d%lf",&n,&m);改为scanf("%d %lf",&n,&m);
printf( "%f%f",x,t);改为printf( "%lf\t%lf",x,t);
会好一点
#3
一壶瀑布2019-07-31 10:44
嗯  谢谢 !!!我知道了我少加了他弹起后落地的距离!但是1000 5   输出的总和为什么是2875我不懂
#4
wufuzhang2019-07-31 12:03
我不知道你的2875是怎么得到的。
小球弹跳1000后(每次反弹高度为上一次高度的一半),最后高度 =(1/2)^1000*5是一个很小很小的数字,约等于0,输出结果只保留6位小数,当然结果是0了。
而总和 = (h0+h1) + (h1+h2) + ...+ (hn-2 + hn-1) + (hn-1 + hn)
       = h0 + 2*h1 + 2*h2 + ...+ 2*hn-1 + hn
       = h0*(1 + 2*(1/2)^1 + 2*(1/2)^2 + ... + 2*(1/2)^(n-1) + (1/2)^n)
根据等比数列求和=h0*(1 + 2 + 0) = 3*h0 = 15
我这边输入1000 5,输出结果是0.000000 15.000000
和理论完全符合。
你把你改后的代码再贴出来看看
      
#5
一壶瀑布2019-07-31 23:23
嗯  谢谢 !!!我知道了我少加了他弹起后落地的距离!但是1000 5   输出的总和为什么是2875我不懂
#6
一壶瀑布2019-07-31 23:31
#include<stdio.h>
int main()
{int n;
    double m;
    int i=0;
    double t=0;
    double x=0;
    double y=0;
   
    scanf("%d%lf",&n,&m);
while(i<n)

{
   
i++;


x=m/2;

m=x;
y+=x+2*m;
t=y-x;
}
printf( "%f%f",x,t);
return 0;
}
#7
一壶瀑布2019-07-31 23:33
这会应该对了  是我没看清题  对不起!!!
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数
输入
M N
输出
它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行
样例输入
1000 5
样例输出
31.25 2875.00
1