<谭> 6.9 一球从100m高度自由落下,每次落地后反跳回原高度的一半再落下。求它在第10次落地时共经过多少m? 第10次反弹多高?#include <stdio.h>int main(){ float an = 100 ; /* 第一次落地前的高度 */ float sn = an ; /* 第一次落地时总路程 */ int i ; for ( i = 2; i <= 10; i++) { an = an / 2 ; sn = sn + an * 2 ; } printf("Sum=%fm\n",sn); printf("The tenth hight is: %fm\n",an / 2); return 0;}运行结果:======================================Sum=299.609375mThe tenth hight is: 0.097656m======================================★ 如此设计时绕了个小弯儿, 即第10次落地时的an为第9次反弹的高度, 因此在输出时又一次减半为an/2, 验证如下:#include <stdio.h>int main(){ float an = 100 ; float sn = an ; int i ; for ( i = 2; i <= 10; i++) { an = an / 2 ; printf("i=%2d an=%f\n", i, an); sn = sn + an * 2 ; printf(" sn=%f\n", sn); } printf("\nSum=%fm\n",sn); printf("The tenth hight is: %fm\n",an / 2); return 0;}运行结果:================================i= 2 an=50.000000 sn=200.000000i= 3 an=25.000000 sn=250.000000i= 4 an=12.500000 sn=275.000000i= 5 an=6.250000 sn=287.500000i= 6 an=3.125000 sn=293.750000i= 7 an=1.562500 sn=296.875000i= 8 an=0.781250 sn=298.437500i= 9 an=0.390625 sn=299.218750i=10 an=0.195313 sn=299.609375 Sum=299.609375mThe tenth hight is: 0.097656m================================★ 若用书上的方法, 无此问题, 也就是将an各sn的操作换个顺序#include <stdio.h>int main(){ float sn = 100 ; float an = sn / 2 ; int i ; for ( i = 2; i <= 10; i++) { sn = sn + an * 2 ; printf("i=%2d sn=%f\n", i, sn); /* 验证用 */ an = an / 2 ; printf(" an=%f\n", an); /* 验证用 */ } printf("\nSum=%fm\n",sn); printf("The tenth hight is: %fm\n",an); return 0;}运行结果:=================================i= 2 sn=200.000000 说明: 第二次落地经过的路程 an=25.000000 说明: 第二次弹起的高度i= 3 sn=250.000000 an=12.500000i= 4 sn=275.000000 an=6.250000i= 5 sn=287.500000 an=3.125000i= 6 sn=293.750000 an=1.562500i= 7 sn=296.875000 an=0.781250i= 8 sn=298.437500 an=0.390625i= 9 sn=299.218750 an=0.195313i=10 sn=299.609375 an=0.097656 Sum=299.609375mThe tenth hight is: 0.097656m=================================

评论