看代码注释:
#include <stdio.h>
int main()
{
float sum = 0; /* 经过的总路程, 初始值0 */
float hight = 100; /* 弹起的高度,初始值100 */
const int count = 10; /* 要落地的次数为常量10 */
int i; /* 计数器 */
for (i = 0; i < count; i++)
{
if (i == 0)
{ /* 第一次落地是直接落下,没有弹起,所以总路程不用乘2 */
sum += hight;
}
else
{ /* 后面的落地都是先弹起,再落地,所以总路程需要弹起得高度乘2 */
sum += hight * 2;
}
hight = hight / 2; /* 每次弹起得高度为上次的一半 */
}
/* 输出结果,小数保留4位 */
printf("第10次落地经过的总路程: %.4f\n弹起得高度为: %.4f\n", sum, hight);
return 0;
}
运行结果:
追问大神,忘了问下,怎么说第一次是直接落地没有弹起??不理解啊!!第一次会弹起?,
追答厄,是这样,第一次落地是直接从100米高处落下的(至于怎么到100米高度上去的,这个就得问出题老师了^_^),而落地之后再弹起然后落地走过的距离,我们是把它计算到第二次落地中的。
因为题目要求是计算第10次落地时走过的距离,而没有要求10次落地再弹起得距离,所以采用目前这种算法感觉方便一点。