C语言高手帮我看看错在那里

来源:百度知道 编辑:UC知道 时间:2024/05/02 22:25:14
皮球从h米的高度落下,触地后反弹到原高度的一半,再落下,再反弹,在第n次落地时,在空中经过的路程d是多少,第n次反弹的高度h1是多少?
#include<stdio.h>
#include<math.h>
int main(void)
{int n,i;
float h,s,h1;
printf("Input h:");
scanf("%d",&h);
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++){
h1=h/pow(2,i);
s=s+h/pow(2,i);}
printf("s=%.1f\nh1=%.1f",s,h1);
}

你在写代码之前,应该先在纸上把公式先算出来。
第n次落地经过的路径d应该是
d = h + h/2 * 2 + h/4 * 2 + ... + h/pow(2, n-1) * 2
第n次反弹的高度应该是
h1 = h/pow(2,n)

所以你的代码应该是
#include<stdio.h>
#include<math.h>

int main(void)
{
int n, i;
float h, s, h1;
printf("Input h:");
scanf("%f", &h);
printf("Input n:");
scanf("%d", &n);
s = h;
if(n>1)
{
for(i=2; i<=n; i++)
{
s += h/pow(2, n-2);
}
}
h1 = h / pow(2, n);
printf("s=%.1f\nh1=%.1f", s, h1);
}

用递归啊

#include<stdio.h>
#include<math.h>
void main()
{
int n,i;
double h,h1;
double d=0;
printf("输入高度:");
scanf("%f",&h);
printf("求第几次的路程和高度?");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
h1=h/pow(2,i);
d=d+h/