2012-02-28 37 views
1

stackoverflow。我是C++的新手,我最後一個問題是我的任務。我正在嘗試編寫一個程序,用於計算物體從基礎高度落下時的速度,並將該信息顯示爲物體的高度與其下降的時間量(以秒爲單位)。這是我的代碼至今:C++:嵌套的if循環無法正常結束的問題

#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循環/嵌套的循環是什麼問題導致程序而不是循環打印出0表中的最後一項?

+0

強烈建議:逐步調試下的代碼,並觀察循環迭代時「高度」和「距離」如何變化。我認爲你會很快發現這個問題;) – paulsm4 2012-02-28 04:27:22

+1

'距離=((0.5 *加速度)*(時間*時間));''自'時間= 0'後總是計算爲'0'。 – 2012-02-28 04:27:53

+0

如果您希望程序不打印負數,請將您的條件('if'語句)移到'printf()'之前。 – chrisaycock 2012-02-28 04:28:11

回答

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++; 
} 
+0

非常感謝,現在你指出了這一點,我真的很蠢。 – Batteries 2012-02-28 04:30:37

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,並求解剩餘時間的公式,得到表示秒的分數。

0

您正在打印出海拔高度,因爲您的公式假定時間間隔爲1秒,打印出來的是當時的海拔高度。所以如果你從20英尺落下一個物體,1秒鐘之後它將在4英尺處,而在2英尺處的2英尺處 - 它撞擊地面的地方實際上是1.25秒。