C 练习实例20 - 小球自由下落
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:见下面注释。
程序源代码:
实例
// Created by www.runoob.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米
剑心
425***475@qq.com
实例有些复杂化了,从代码看不出逻辑出来。
这只是个单纯的 下落 + 反弹 的周期。
剑心
425***475@qq.com
Atlantis
383***993@qq.com
上边的笔记有点复杂了,这其实就是一个纯数学的算法,从第二次开始每次都是一上一下,高度只是前一次的一半,说白了就是等比数列的求和以及求第十项的大小。
等比数列的通项公式是:
等比求和:
所以计算运动路径的长度只需要把第二次到第十次的路径 * 2 + 第一次下落的高度 100 即可。
Atlantis
383***993@qq.com
内拉小付
fux***afx@163.com
参考方法:
内拉小付
fux***afx@163.com
HIT_CCC
117***2963@qq.com
参考方法:
HIT_CCC
117***2963@qq.com
ronnyz
221***8677@qq.com
参考方法:
ronnyz
221***8677@qq.com
huanhuan
992***291@qq.com
参考方法(递归法):
huanhuan
992***291@qq.com