2013-04-23 60 views
1
#include <iostream> 

using namespace std; 

int main() 
{ 
    double sixty = 0.0; 
    double fiftyfive = 0.0; 
    double height[10]; 
    double tallest = 0.0; 
    double shortest = 0.0; 
    double average = 0.0; 
    double total = 0.0; 

    for (int x = 0; x < 10; x = x + 1) 
    { 
     height[x] = 0.0; 
    } 

    cout << "Please enter the heights of ten students. "<< endl; 
    for (int x = 0; x < 10; x = x + 1) 
    { 
     cout << "Enter height of a student: "; 
     cin >> height[x]; 
    } 

    for (int x = 0; x < 10; x = x + 1) 
    { 
     if (height[x] > 60) 
     { 
      sixty = sixty + 1; 
      } 
    } 
    for (int x = 0; x < 10; x = x + 1) 
    { 
     if (height[x] < 55) 
     { 
      fiftyfive = fiftyfive + 1; 
     } 
    } 
    cout << "The number of students over 60 inches in height: " << sixty << endl; 
    cout << "The number of students under 55 inches in height: " << fiftyfive << endl; 

    for (int x = 0; x < 10; x = x + 1) 
    { 
     if (height[x] > tallest) 
     { 
         tallest = height[x]; 
     } 
    } 
    cout << "The tallest student is: " << tallest << endl; 

    for (int x = 0; x < 10; x = x + 1) 
    { 
     if (height[x] < shortest) 
     { 
         shortest = height[x]; 
     } 
    } 
    cout << "The shortest student is: " << shortest << endl; 

    for (int x = 0; x < 10; x = x + 1) 
    { 
     total = total + height[x]; 
    } 
    average = total/10; 
    cout << "The average student height is: " << average << endl; 



    system("pause"); 
    return 0; 
} 

在上面,我要吐了學生的#超過60英寸,學生在55in的#,平均高度,最高高度,並在最短的高度。C++最小的序列號不顯示

一切工作正常,除了最短的高度。我爲這部分代碼返回零輸出。

這是簡單的代碼,所以我想這是一個簡單的問題,我忽略了。任何輸入讚賞。

+0

任何原因,你在使用'X = X + 1'而不是說,'+ + x'? – tadman 2013-04-23 19:24:53

+2

任何原因***所有這些限制都不計算在陣列的*相同*單程中。 – WhozCraig 2013-04-23 19:25:52

+0

使用x = x + 1,因爲這就是本章所有例子中的用法(這是C++類的介紹)。所以我儘量讓它保持在課程目前的狀態。 – Brocktoon 2013-04-23 19:26:34

回答

3

你的循環更改爲

for (int x = 0; x < 10; x = x + 1) 
{ 
    if (shortest == 0 || height[x] < shortest) 
    { 
        shortest = height[x]; 
    } 
} 

或從height陣列有第一元件初始化shortest

你的代碼不會工作,因爲沒有高度小於零。

+0

我今天太冷靜了,還是不會'最短== 0'在最初的傳球中將eval縮短爲真? **編輯:**我的壞。我正在看*你的代碼*而不是他的。對不起(和+1) – WhozCraig 2013-04-23 19:28:08

+0

而不是測試'最短的== 0'我寧願測試'x == 0'這更清楚地表達了「*在第一次迭代*」的含義和意圖,但也許這只是我。 – syam 2013-04-23 19:33:22

0

除非你有負高度的學生,否則你的比較可能是錯誤的。

將您的「最短」高度設置爲更大的值,否則比較永遠不會成立。

4
if (height[x] < shortest) 
    { 
        shortest = height[x]; 
    } 

以最短的零爲例,永遠不會有一個學生小於那個(除非你有來自外界的負高度的學生;))。你需要與height[0];
最短初始化此外,在這種情況下,你可以從1個

shortest = height[0]; 
for (int x = 1; x < 10; x = x + 1) 
{ 
    if (height[x] > tallest) 
    { 
        tallest = height[x]; 
    } 
} 
+0

謝謝!這工作,我甚至明白爲什麼它是錯的! – Brocktoon 2013-04-23 19:34:55

1

shortest初始值開始迭代學生是零

double shortest = 0.0;

和循環找不到任何高度小於0

1
for (int x = 0; x < 10; x = x + 1) 
{ 
    if (height[x] < shortest) 
    { 
     shortest = height[x]; 
    } 
} 
因爲 shortest

被初始化爲0.0,如果你的height元素均不小於0.0小,然後你會看到shortest沒有改變。請嘗試以下操作:

shortest = height[0]; 
for (int x = 1; x < 10; ++x) 
{ 
    if (height[x] < shortest) 
    { 
     shortest = height[x]; 
    } 
} 
0

Initializa tallestshortestheight[0]height數組作爲輸入後...