C ++:嵌套的if循环没有正确结束的麻烦

时间:2012-02-28 04:24:41

标签: c loops for-loop while-loop

计算器。我是C ++的新手,我的作业最后一个问题。我正在尝试编写一个程序来计算对象从基本高度落下的速度,并将该信息显示为对象的高度与其下降的时间量(以秒为单位)。这是我到目前为止的代码:

#include <stdio.h>

int main() {

    int acceleration, altitude, time;
    double distance;

    acceleration = 32;
    time = 0;

    printf("What is the altitude you are dropping your object from?\n");
    scanf("%d", &altitude);

    printf("Time    Altitude\n");

    while (altitude > 0){
        distance = ((0.5 * acceleration) * (time * time));
        altitude = altitude - distance;
        printf("%d      %d\n", time, altitude);
        time++;
        if (altitude <= 0){
            altitude = 0;
        }
   }

    return 0;
}

我知道距离的等式略有偏差,但我现在更关心的是当物体撞击地面时程序不会打印出0的高度。相反,它打印出-104,由于负距离无法实现,我想解决这个问题。

所以我的问题是:我的while循环/嵌套if循环是什么导致程序打印出0表中的最后一个条目?

3 个答案:

答案 0 :(得分:1)

打印前改变海拔高度。

while (altitude > 0){
    distance = ((0.5 * acceleration) * (time * time));
    altitude = altitude - distance;
    if (altitude <= 0){
        altitude = 0;
    }
    printf("%d      %d\n", time, altitude);
    time++;
}

答案 1 :(得分:1)

导致这种情况的问题是您的采样间隔:您以一秒的增量进行,因此您的程序会计算到负高度的下降。您应该稍微更改一下代码:

while (altitude > 0){
    distance = ((0.5 * acceleration) * (time * time));
    if (altitude < distance) {
        break;
    }
    altitude = altitude - distance;
    printf("%d      %d\n", time, altitude);
    time++;

}

这不会打印物体撞击地面的时间。您应该在循环后使用剩余高度,速度(acceleration*time)和acceleration进行此计算,并求解剩余时间的等式,得到代表秒数的分数。

答案 2 :(得分:0)

在将高度设置为0之前打印出高度。由于您的公式假定时间间隔为1秒,打印出来的是当时的高度。因此,如果你从20英尺处掉落一个物体,1秒钟之后它会在4英尺处,在2英尺处--60英尺处 - 它撞击地面的时间实际上是1.25秒。