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

C語言物理模擬:自由落體反彈問題(100米高度、第10次落地路程與高度)

     編輯:關於C語言

C語言物理模擬:自由落體反彈問題(100米高度、第10次落地路程與高度)

經典物理建模題:球從 100m 高度落下,每次觸地反彈至原高度一半。求**第 10 次落地時總路程**與**第 10 次反彈高度**。

完整程式碼

#include <stdio.h>

int main() {
    double height = 100.0;  // 初始高度
    double total_distance = 0.0;
    double rebound = height / 2.0;  // 第一次反彈高度
    
    // 第 1 次落地:只下落 100m
    // 第 2~10 次落地:每次經歷「上升 + 下落」= 2 × 反彈高度
    for (int i = 1; i < 10; i++) {  // i=1~9 對應第 2~10 次落地前的反彈
        total_distance += 2 * rebound;
        rebound /= 2.0;  // 下一次反彈高度減半
    }
    
    total_distance += height;  // 加上第一次下落 100m
    
    printf("第 10 次落地總路程 = %.6f 米\n", total_distance);  // 299.609375
    printf("第 10 次反彈高度   = %.6f 米\n", rebound);          // 0.097656
    
    return 0;
}

執行結果

第 10 次落地總路程 = 299.609375 米
第 10 次反彈高度   = 0.097656 米

物理過程逐步拆解

階段動作路程增量累計路程當前反彈高度
開始靜止 100m00100
第1次落地下落 100m+10010050
第1次反彈上升 50m+5015050
第2次落地下落 50m+5020025
第2次反彈上升 25m+2522525
...............
第9次反彈上升 0.1953125m+0.1953125299.41406250.1953125
第10次落地下落 0.1953125m+0.1953125299.6093750.09765625

數學公式驗證

總路程 = 初始下落 + 2 × (首次反彈 + 二次反彈 + ... + 第9次反彈)

S = h + 2 × (h/2 + h/4 + ... + h/2⁹)
  = h + 2 × h/2 × (1 - (1/2)⁹) / (1 - 1/2)  // 等比數列求和
  = h + 2h × (1 - 1/512)
  = 100 + 200 × 511/512
  = 100 + 199.609375
  = 299.609375  ✓

第 10 次反彈高度 = h / 2¹⁰ = 100 / 1024 = 0.09765625 ✓

通用化函數實現


常見邏輯錯誤避坑

錯誤邏輯後果修正
迴圈 10 次全按 2×refund 計算多加一次上升路程第一次只有下落,迴圈跑 9 次
忘記加初始 100m少算 100m循環外加 `height`
反彈高度更新順序錯誤高度錯位先累加路徑,再 `rebound /= 2`

總結

自由落體反彈問題核心在於**識別第一次落地只有下落**,後續每次落地皆含「上升+下落」。迴圈次數 = 落地次數 - 1。數學上為等比數列求和,程式上用累加器模擬更直觀。結果:**第 10 次落地總路程 299.609375 米,第 10 次反彈高度 0.097656 米**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved