C 练习实例20 - 小球自由下落
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:见下面注释。
程序源代码:
实例
// Created by study.p2hp.com on 15/11/9.
// Copyright © 2015年 高手教程. All rights reserved.
//
#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;
}
以上实例输出结果为:
第10次落地时,共经过299.609375米,第10次反弹高0.097656米
C 语言经典100例



剑心
425***475@qq.com
实例有些复杂化了,从代码看不出逻辑出来。
这只是个单纯的 下落 + 反弹 的周期。
#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; }剑心
425***475@qq.com
Atlantis
383***993@qq.com
上边的笔记有点复杂了,这其实就是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。
等比数列的通项公式是:
等比求和:
所以计算运动路径的长度只需要把第二次到第十次的路径 * 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; }Atlantis
383***993@qq.com