2.一个球从 100m 高度自由落下,每次落地后反跳回原高度的,在落下在反 弹,当球的高度小于 5m 时则不再弹起,问球弹几次后落下,最后一次弹起为多少米?

2.一个球从100m高度自由落下,每次落地后反跳回原高度的,在落下在反弹,当球的高度小于5m时则不再弹起,问球弹几次后落下,最后一次


# include <stdio.h>

int main (void)
{    
    double sn= 100,hn= sn/2;    //sn为第一次落地时走过的路程,hn为第一次弹回的高度
    int n;                        //n为弹回的次数,用于循环中
    for(n=2;n<=10;n++)            
    {
        sn=sn+2*hn;                //第二次落地时走过的路程 等于 第一次落地时走过的路程 + 第一次弹回的过程*2(弹回一次,落地一次所以一乘2)
        hn=hn/2;                //第三次弹回的路程是上一次的一半,所以除以2
    }
    
    printf("第十次落地时总共经过了%f米\n",sn);
    printf("第十次反弹%f米\n",hn);
    
    return 0;
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7609428
  • 除此之外, 这篇博客: 专升本C语言中的 一球从100m高度自由落下,每次落地后反跳会原来高度的一半,再落下。求它第10次落地时,共经过多少米?第10次反弹多高? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h> 
    int main()
     {
      	double sn=100,hn=sn/2;
      	int n;
      	for(n=2;n<=10;n++)
    	{
       		sn=sn+2*hn;   /*第n次落地时共经过的米数*/
       		hn=hn/2;      /*第n次反跳高度*/
        }
        printf("第10次落地时共经过%f米\n",sn);
        printf("第10次反弹%f米\n",hn);
        return 0;
    }
    
    #include <stdio.h> 
    int main()
    {
    	int i, n = 10;
    	float sum = 0.0, num = 100.0;
    	for (i = 0; i < 10; i++)
    	{
    		sum = sum + num + num / 2.0; //下降高度+弹起的高度
    		num = num / 2;
    	}
    	printf("第10次落地时共经过%f米\n", sum - num); //多了一次弹起的高度
    	printf("第10次反弹%f米\n", num);
    	return 0;
    }