题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米第10次反弹多高?
程序分析
球在落地后会反弹为原高度的一半,若设高度为h,那么每次落地的距离为:
第一次:h1=1/2h
第二次:h2=1/4h
第三次:h3=1/8h第n次:hn=1/2^n * h
第n次落地的总距离s使用for循环来进行累加每次的结果即可:s=s+2*h
步骤一:定义程序目标
编写一个C程序,球体从100米处自由落下,每次落地会反弹回原高度的一半,然后再落下,打印出它在第10次落地时,共经过多少米?第十次反弹的高度是多少?
步骤二:程序设计
整个程序由两大关键部分,一个为每次反弹的高度,这个进行程序分析,可以得出hn=1/2n x 100的规律进行求解,另一个是经过的总距离,这个是使用累加每次的反弹的高度即可解决,公式为:s=s+2h
代码编写
#include<stdio.h>
#include<math.h>
int main(){
float s=100,h=100;
h=h/2; //第一次反弹的高度
for(int i=2;i<=10;i++){
s=s+2*h;
h/=2;
}
printf("第10次落地的距离为:%.3f\n",s);
printf("第10次反弹的高度为%.3f\n",h);
return 0;
}
效果:
总结
本案例需要理清两个逻辑,每次反弹的高度与球体每次落地所经过的距离,反弹的高度比较好理解,每次都为上一次的1/2高度,至于累加距离是向量性,不是矢量性。有的朋友可能会理解为第一次落地的距离是50,反弹的高度是50,因为把反弹的高度考虑到落地的距离中去了从而导致方向偏了。第二次的距离是第一次的距离,加上第一次的两次反弹高度,只是理解这个逻辑,整个程序就理清了。关于更多程序案例项目,请点击链接进行查看佐德将军C语言案例.好了,我们在下一个章节再见,加油!