You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下落距离计算程序:输入与for循环配合的逻辑问题求助

C++下落距离计算程序修正指导

问题拆解

你的需求是:输入一个总下落时间,按5秒为增量,依次计算并输出每个时间点对应的下落距离。原代码核心问题是循环逻辑完全错误,同时输入验证不完整,导致程序无法正常运行。

修正步骤

1. 完善输入验证

原代码输入负数时仅提示错误,但仍会继续执行后续代码,不符合逻辑。需要在输入负数时直接终止程序(入门阶段先做简单处理,后续可学习循环重新输入)。

2. 重构循环逻辑

原for循环写法完全偏离需求:

  • 循环条件i<=0只会让循环执行一次
  • 循环内部再次cin >> t会覆盖之前的输入,彻底打乱逻辑

正确思路:

  • 将用户输入的总时间存入单独变量(比如total_time)
  • 用循环变量从0开始,每次增加5秒,直到循环变量不超过总时间
  • 对每个循环变量对应的时间,计算并输出距离

3. 优化函数(可选)

全局常量g已定义,函数fallingDistance可直接使用该常量,无需再作为参数传递,减少冗余。

完整修正代码

#include <iostream>
#include <cmath>
#include <iomanip> // 用于格式化输出,让表格对齐更美观

using namespace std;

const double g = 9.8;
double fallingDistance(double t); // 去掉g参数,直接调用全局常量

int main()
{
    double total_time;
    cout << "Enter Object's Falling Time in Seconds: " << endl;
    cin >> total_time;

    // 输入验证:负数直接终止程序
    if (total_time < 0) {
        cout << "ERROR: Cannot input negative time" << endl;
        return 1; // 返回非0值表示程序异常终止
    }

    // 格式化输出表头,用setw控制宽度实现对齐
    cout << left << setw(15) << "Falling Time" << setw(20) << "Distance Traveled" << endl;
    cout << "----------------------------------------" << endl;

    // 核心循环:从0秒开始,每次加5秒,直到不超过总时间
    for (double current_t = 0; current_t <= total_time; current_t += 5) {
        double distance = fallingDistance(current_t);
        // 格式化输出时间和距离,保留1位小数更直观
        cout << left << setw(15) << current_t << "Seconds" << setw(20) << fixed << setprecision(1) << distance << " Meters" << endl;
    }

    return 0;
}

double fallingDistance(double t)
{
    return 0.5 * g * pow(t, 2);
}

关键知识点解析

  • for循环的正确结构:for(初始化; 循环条件; 增量)三个部分各司其职,循环变量的变化要贴合需求逻辑。
  • 输入验证:处理非法输入(比如负数)是程序健壮性的基础,入门阶段可用return直接终止,后续可学习循环重新输入。
  • 格式化输出:iomanip头文件的setw、fixed、setprecision能让输出更整齐,提升可读性。
  • 全局变量与函数参数:全局常量适合整个程序通用的值(比如重力加速度),无需每次作为参数传递。

内容的提问来源于stack exchange,提问作者Michael Hokanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:43:29