首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言物理模擬:自由落體反彈問題(總路程與反彈高度)

     編輯:關於C語言

C語言物理模擬:自由落體反彈問題(總路程與反彈高度)

球從 100 米高度自由落下,每次落地反彈至原高度一半,再落下。求第 n 次落地時總經過路程、第 n 次反彈高度。

物理模型分析

  • 初始高度 H = 100
  • 第 1 次落地:下落 100m
  • 第 1 次反彈:上升 50m,再下落 50m(第 2 次落地)
  • 第 2 次反彈:上升 25m,再下落 25m……

第 n 次落地總路程:S_n = H + 2×H×(1/2 + 1/4 + ... + 1/2^{n-1})

第 n 次反彈高度:H_n = H / 2^n

代碼實現

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

// 計算第 n 次落地總路程
float total_distance(float h, int n) {
    if (n <= 0) return 0;
    float sum = h;  // 第一次下落
    float current_h = h / 2;
    for (int i = 2; i <= n; i++) {
        sum += 2 * current_h;  // 上升 + 下落
        current_h /= 2;
    }
    return sum;
}

// 計算第 n 次反彈高度
float rebound_height(float h, int n) {
    return h / pow(2, n);
}

int main() {
    float h = 100.0;
    int n;
    printf("請輸入落地次數 n:");
    scanf("%d", &n);
    
    float dist = total_distance(h, n);
    float height = rebound_height(h, n);
    
    printf("第 %d 次落地總路程:%.2f 米\n", n, dist);
    printf("第 %d 次反彈高度:%.2f 米\n", n, height);
    return 0;
}

運行示例

請輸入落地次數 n:10
第 10 次落地總路程:299.80 米
第 10 次反彈高度:0.10 米

數學驗證 (n=10)

反彈高度:100 / 2^10 = 100 / 1024 ≈ 0.0977 ≈ 0.10

總路程:100 + 2×50 + 2×25 + 2×12.5 + ... + 2×(100/512) = 100 × (1 + 1 - 1/512) = 299.80 ✓

擴展:通用物理參數版

typedef struct {
    float initial_height;
    float rebound_ratio;  // 反彈係數 (0.0-1.0)
    float gravity;        // 重力加速度 (可選)
} PhysicsParams;

float total_distance_general(PhysicsParams *p, int n) {
    float sum = p->initial_height;
    float h = p->initial_height * p->rebound_ratio;
    for (int i = 2; i <= n; i++) {
        sum += 2 * h;
        h *= p->rebound_ratio;
    }
    return sum;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved