【C语言经典100例】-- 20 小球*下落

问题描述:

一球从100米高度*落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

方法一:

程序实现:

#include<stdio.h>
int main()
{
    float h,s;
    h=s=100;
    h=h/2; //第一次反弹高度
    for(int i=2;i<=10;i++)
    {
        s=s+2*h;
        h=h/2;
    }
    printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);
    return 0;
}

方法二:是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。

等比数列的通项公式是:
【C语言经典100例】-- 20 小球*下落

等比求和:① 当q≠1时 或 ② 当q=1时
【C语言经典100例】-- 20 小球*下落

# include <stdio.h>
# include <math.h>
int main(void)
{
    float a = 100;//等比数列首项;
    float q = 0.5;//公比
    float s,h;//定义等比数列的和s,第十项h;

    h = a*pow(q,10);//第十次弹起的高度,注意第十次落地的高度需要h*2
    s = 2*(50-h*q*2)/(1-q)+100;
    
    printf("第十次的高度为%f;总路程为%f",h,s);
    
    return 0;
}

结果:

第10次落地时,共经过299.609375米,第10次反弹高0.097656米

上一篇:java面试题题库全1-20


下一篇:java基础1