C 语言教程 在线

1570c-exercise-example20

参考方法:

#include <stdio.h>

int main(){
    float H=100;
    float sum=0;
    int n,i;  //第n次落地
    while(scanf("%d",&n)!=EOF){
        sum+=H; //第一次落地经过距离
        H/=2;   //第一次反弹高度
        if(n==1){
            printf("第1次落地时,共经过%f米,反弹高为%f米\n",sum,H);
        }
        else{
            for(i=2;i<=n;i++){
                sum+=H*2;
                H/=2;
            }
            printf("第%d次落地时,共经过%f米,反弹高为%f米\n",n,sum,H);
        }
    }

    return 0;
}

1569c-exercise-example20

参考方法:

#include<stdio.h>
int main(void)
{
    float h = 100,sum = 0;
    int count = 0;
    while(count < 10)
    {
        if(count == 0)
        {
            sum += h;
            h = h / 2;
        }
        else
        {
            sum += h*2;
            h = h / 2;
        }
        count++;
    }
    printf("第10次落地时,共经过%.6f米,第10次反弹高%.6f米\n",sum,h);
    return 0;
}

1568c-exercise-example20

参考方法:

#include<stdio.h> 

int main() 
{
    int i;
    float sum=0,b=100;
    for(i=0;i<10;i++)
    {
        sum+=b*1.5;
        b=b/2;
    }
    printf("小球反弹的距离为:%f\n",b);
    printf("小球经过的总距离为:%f\n",sum-b);
    return 0;
}

1567c-exercise-example20

上边的笔记有点复杂了,这其实就是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。

等比数列的通项公式是:

等比求和:

①当q≠1时
或 
②当q=1时 

所以计算运动路径的长度只需要把第二次到第十次的路径 * 2 + 第一次下落的高度 100 即可。

# 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;
}

1566c-exercise-example20

实例有些复杂化了,从代码看不出逻辑出来。

这只是个单纯的 下落 + 反弹 的周期。

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