C语言编程:球的反弹高度计算 - 代码详解与实现

问题描述

已知一球从高空落下时,每次落地后反弹至原高度的四分之一再落下。编写程序,从键盘输入整数n和m,求该球从n米的高空落下后,第m次落地时经过的全部路程以及第m次落地后反弹的高度,并输出结果。

输入形式

从键盘输入整数n和m,以空格隔开。

输出形式

输出两行:

第一行输出总路程,结果保留两位小数。 第二行输出第m次落地后反弹的高度,结果保留两位小数。第二行输出结束不换行。

样例输入

40 3

样例输出

65.00 0.63

解题思路

根据题意,球从n米的高空落下后,每次反弹的高度是原高度的四分之一,所以第m次落地时,经过的全部路程就是球在下落和反弹过程中的路程之和。假设球在第m次落地时,反弹的高度为h,那么球在第m次落地前,下落的路程为n + n/4 + n/4^2 + ... + n/4^(m-1),反弹的路程为h + h/4 + h/4^2 + ... + h/4^(m-1)。根据等比数列求和公式,下落的路程为n * (1 - (1/4)^m) / (1 - 1/4),反弹的路程为h * (1 - (1/4)^m) / (1 - 1/4)。所以总路程就是下落的路程加上反弹的路程。

代码实现

#include <stdio.h>
#include <math.h>

int main() {
    int n, m;
    double total_distance, rebound_height;

    // 从键盘输入n和m
    scanf("%d %d", &n, &m);

    // 计算总路程和反弹的高度
    total_distance = n * (1 - pow(1.0/4, m)) / (1 - 1.0/4);
    rebound_height = n * pow(1.0/4, m);

    // 输出结果
    printf("%.2f\n", total_distance);
    printf("%.2f", rebound_height);

    return 0;
}

注意

在使用pow()函数计算幂次时,需要将参数转换为浮点型,以避免结果截断。

代码解释

  1. 头文件包含#include <stdio.h>包含标准输入输出库,#include <math.h>包含数学函数库,其中包括pow()函数。
  2. 变量声明:声明了四个变量:nm 用来存储用户输入的初始高度和落地次数,total_distance 用来存储球的总路程,rebound_height 用来存储球第m次落地后的反弹高度。
  3. 输入数据:使用scanf()函数从用户输入中读取 nm 的值。
  4. 计算总路程和反弹高度:使用 pow(1.0/4, m) 计算球第m次落地前的反弹高度,然后使用等比数列求和公式计算总路程和反弹高度。注意,pow(1.0/4, m) 的第一个参数 1.0/4 需要转换为浮点型以避免截断。
  5. 输出结果:使用 printf() 函数输出计算的总路程和反弹高度,并保留两位小数。

本程序利用了等比数列的知识,通过公式计算出了球的总路程和反弹高度,代码简洁易懂,方便理解和修改。您也可以根据实际需求,修改代码中的常数和计算公式,以适应不同的场景。

C语言编程:球的反弹高度计算 - 代码详解与实现

原文地址: https://www.cveoy.top/t/topic/pfKH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录