C语言代码:
#include <stdio.h>
#include <math.h>
#define GRAVITY 9.8 // 重力加速度 (m/s²)
#define INITIAL_HEIGHT 100.0 // 初始高度 (m)
int main() {
double height = INITIAL_HEIGHT;
double time = 0.0;
double velocity = 0.0;
double time_step = 0.1; // 时间步长 (秒)
printf("球从 %.1f 米高处自由落下...\n", INITIAL_HEIGHT);
// 模拟球下落过程
while (height > 0) {
// 更新速度和位置
velocity += GRAVITY * time_step;
height -= velocity * time_step;
// 防止高度变为负数
if (height < 0) {
height = 0;
}
time += time_step;
// 打印当前状态
printf("时间: %.1f 秒, 高度: %.2f 米, 速度: %.2f m/s\n", time, height, velocity);
}
// 计算理论值(用于验证)
double theoretical_time = sqrt(2 * INITIAL_HEIGHT / GRAVITY);
double theoretical_velocity = GRAVITY * theoretical_time;
printf("\n落地时的状态:\n");
printf("实际落地时间: %.2f 秒\n", time);
printf("理论落地时间: %.2f 秒\n", theoretical_time);
printf("实际落地速度: %.2f m/s\n", velocity);
printf("理论落地速度: %.2f m/s\n", theoretical_velocity);
return 0;
}
代码说明:
-
常量定义:
(图片来源网络,侵删)GRAVITY:重力加速度,默认为9.8 m/s²。INITIAL_HEIGHT:初始高度,100米。time_step:时间步长,用于模拟离散时间步的下落过程(这里设为0.1秒)。
-
模拟过程:
- 使用
while循环模拟球下落,直到高度height小于等于0。 - 每次循环更新速度(
velocity += GRAVITY * time_step)和高度(height -= velocity * time_step)。 - 打印当前时间、高度和速度。
- 使用
-
理论值计算:
- 落地时间公式:( t = \sqrt{\frac{2h}{g}} )。
- 落地速度公式:( v = g \cdot t )。
- 用于验证模拟结果的准确性。
-
输出:
- 打印模拟过程中的状态(时间、高度、速度)。
- 最后输出实际和理论落地时间、速度。
运行结果示例:
球从 100.0 米高处自由落下...
时间: 0.1 秒, 高度: 99.05 米, 速度: 0.98 m/s
时间: 0.2 秒, 高度: 97.22 米, 速度: 1.96 m/s
...
时间: 4.5 秒, 高度: 0.98 米, 速度: 44.10 m/s
时间: 4.6 秒, 高度: 0.00 米, 速度: 45.08 m/s
落地时的状态:
实际落地时间: 4.60 秒
理论落地时间: 4.52 秒
实际落地速度: 45.08 m/s
理论落地速度: 44.27 m/s
注意事项:
- 模拟结果与理论值略有差异,因为离散时间步长(0.1秒)引入了误差,减小
time_step可以提高精度。 - 如果需要更精确的模拟,可以使用更小的时间步长(如0.01秒)或数值积分方法(如欧拉法、龙格-库塔法)。

(图片来源网络,侵删)
