2017-08-12 9 views
-4

3番目のforループ比較で、最小の要素と最大の要素を比較すると、最小の要素に対して誤った値が得られます。なぜ私は理解しません。 3番目のループを2つのforループ、1つは最低の要​​素、もう1つは最高の要素に分けると、正しい答えが得られます。あなたはi = 11ためrainfall[i+1]にアクセスしているよう最下位と最上位の(for)ループを分離すると、正しい最小値が得られます

#include <iostream> 

using namespace std; 

int main() 
{ 
    float rainfall[12]; 
    float total = 0.0; 
    float avg = 0.0; 
    float high, lowest; 

    for (int i = 0; i < 12; i++) { 
     cin >> rainfall[i]; 
    } 

    high = rainfall[0]; 
    lowest = rainfall[0]; 

    for (int i = 0; i < 12; i++) { 
     total = total + rainfall[i]; 
     avg = total/12; 
    } 

    for (int i = 0; i < 12; i++) { 

     if (rainfall[i + 1] < lowest) { 
      lowest = rainfall[i + 1]; 
     } 

     if (rainfall[i + 1] > high) { 
      high = rainfall[i + 1]; 
     } 
    } 
    cout.setf(ios::fixed); 
    cout.setf(ios::showpoint); 
    cout.precision(2); 
    cout << total << endl; 
    cout << avg << endl; 
    cout << high << endl; 
    cout << lowest << endl; 
    return 0; 
} 
+0

のhttp実行する必要があり、それらを必要とする時点での宣言変数://en.cppreferenceを。 com/w/cpp/algorithm/minmaxに設定されます。 –

+0

コードをきちんと書式設定すると、ロジックに従うのが簡単になり、問題を解決するのに役立つはずです。 – Galik

答えて

3

あなたのコードは、未定義の動作を持っています。
i = 1で開始し、rainfall[i]のままにしてください。


注:

  • あなたが最初
  • avgの計算は一度だけ
関連する問題