2014-02-28 306 views
0

試圖計算數組中的隨機數的最大值和最小值,我不知道我在這裏做錯了什麼。我一直在試圖弄明白,而且我的智慧已經結束了。也許你們中的一個人可以幫忙?最大輸出不正確

#include <iostream> 
#include <stdlib.h> 
#include <ctime> 

using namespace std; 

int main() { 
    int *sora; 
    int num; 
    int min; 
    int max; 

    cout<< "Enter the size : " ; 
    cin >> num; 
    cout<< endl; 
    sora = new int [num]; 

    max= sora[0]; 
    min= sora[0]; 

    srand((unsigned)time(0)); 

    for(int x=0;x<num; x++) { 
     sora[x]=rand()%100; 

     if(min > sora[x]) { 
      min=sora[x];   
     } 
     else if (max < sora[x]) { 
      max=sora[x]; 
     } 

     cout<< sora[x] << endl;  
    } 

    cout<< "Maximum value is: " << max << endl << "Minimum value is: " << min; 
} 
+0

我很驚訝,我不能立即找到這個問題的好副本。 – jerry

+0

我知道對不對?這似乎很簡單,就像其他人會犯這個錯誤,但沒有多少人有。 –

回答

2
if(min > sora[x]) { 
    min=sora[x]; 
} 
else if (max < sora[x]) 
{ 
    max=sora[x]; 
} 

有問題。第二個else if聲明僅在第一個if滿足時才被輸入。但第二個if必須始終執行。請按以下方式更改上述塊:

if(min > sora[x]) { 
    min = sora[x]; 
} 
if (max < sora[x]) { 
    max = sora[x]; 
} 

而且您還在使用未初始化的區域進行比較。如果您僅使用正數

max = 0; 
min = UINT_MAX; 

如果您使用負數也,然後

max = INT_MIN; 
min = INT_MAX; 

你必須包括<limits.h>這些宏。

+0

我仍然得到錯誤,最小值是正確的,但是最大值是吹得不成比例的。 –

+0

這是我剛纔得到的結果。 最大值爲:2952960 最小值爲:25 真正的最大值爲96 –

+0

沒有ü初始化的最小值和最大值正確> –

2

您正在閱讀的未初始化的內存位置:

sora = new int [num]; 

max= sora[0]; 
min= sora[0]; 

new創建陣列未初始化其內容。

這導致了所謂的未定義行爲,意味着幾乎任何事情都可能發生。在這種情況下,它可能很漂亮:某些任意值(最可能在0-99範圍外的rand()%100)以最小值和最大值存儲,通常會導致錯誤的結果。

相反,做

// must #include <limits> 

int max = std::numeric_limits<int>::min(); 
int min = std::numeric_limits<int>::max(); 

甚至只是

int max = 0; 
int min = 99; 

,因爲你的範圍是預定義的。

+0

謝謝,這解決了我的問題! –

+0

@AlanWatts還注意到Daniel和Sakthi Kumar指出的問題 – jerry

2

你初始化的最小值和最大值爲不確定的值,當你做max= sora[0];min= sora[0];

此外,你有一個else,你不一定要一個。第一個值將是最小值。 您可以從設置max=0min=99開始,並且應該解決該特定問題。

+0

你是正確地指出了'else'問題(我沒有看到通知後,未定義的行爲),但如果第一次生成的值恰好是最大值的(僅爲實例),那麼適當地設置'min'和'max'將不會修復它。 – jerry

2
sora = new int [num]; 

max= sora[0]; 
min= sora[0]; 

該行用垃圾初始化int數組,並將max和min設置爲垃圾值。

你有兩個選擇:

  1. 在啓動初始化最高到最低值可能(INT_MIN)和初始化分鐘可能的最高值(INT_MAX)。

  2. 首先創建一個隨機值並在sora [0]上賦值,並將max和min初始化爲該值。之後,初始化[1 ..num]