C语言程序设计(第三版)何钦铭著 习题4-8
题目
高空坠球。皮球从 height(米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹……如此反复。
问皮球在第n次落地时,在空中一共经过多少距离?第 n次反弹的高度是多少?输出保留1位小数。试编写相应程序。
分析过程
输入
条件:输入初始高度height和n
输出
条件:输出在空中一共经过多少距离以及第 n次反弹的高度。输出保留1位小数
代码
#include <stdio.h>
#include <math.h>
int main () {
/*定义变量*/
double height; /*定义变量,存储输入的初始高度height和n*/
int n; /*定义变量,存储输入的n*/
double juli,gaodu; /*定义变量,计算在空中经过多少距离以及第 n次反弹的高度*/
/*赋值*/
printf("请输入正整数初始高度height和n:\n"); /*输入提示*/
scanf("%lf %d \n", &height, &n); /*输入并赋给变量*/
/*计算*/
juli=height;/*第一次在空中经过的距离为初始高度*/
for (int i = 1; i < n; i++) {
if(height == 0) break; /*高度为0时,可以终止计算了。不会进行下一次弹跳了*/
/*1.先计算距离地面的高度。距离地面的高度为上一次高度的一半*/
height = height/2.0;
/*2.计算在空中经过的距离。由于是先上升,在下降,所以一次在空中经过的距离为当前高度的两倍*/
juli = juli + height*2.0;
}
/*n次弹跳在空中经过的距离计算完成后,缺少一次计算当前高度,在这补上*/
gaodu = height/2;
printf("在空中经过的距离为%.1f,第%d次反弹的高度为%.1f\n",juli, n, gaodu);
return 0;
}