2017-04-06 18 views
1

大小の正しい値が得られない理由がわかりません。 与えられたn個の数値の範囲を見つけるはずです。ループの前に何かを大きくしたり小さくしたりする必要がありますか?Cプログラムは最小値と最大値を計算しません。(大小)

は、ここに私のコードです:

#include <stdio.h> 

int main() 
{ 
    //Declaring Variables 
    int i, number, sum = 0, value, large, small; 
    double avg; 

      //User Input 
      printf("Enter the number of elements you want to compute.\n"); 
      scanf("%d", &number); 
      printf("Enter %d values.\n", number); 

      //Loop to grab values 
      for(i=0;i<number;i++) 
      { 
        scanf("%d", &value); 
        large = value; 
        small = value; 
        if(value > large) 
          large = value; 
        if(value < small) 
          small = value; 
        //Sum Calculation 
        sum = sum + value; 
        //Average Calculation 
        avg = (((double)sum)/number); 
      } 

      printf("The sum of the %d numbers is: %d\n", number,sum); 
      printf("The avg of the %d numbers is: %.2f\n", number, avg); 
      printf("The largest number is: %d\n", large); 
      printf("The smallest number is: %d\n", small); 

    return 0; 
} 
+0

たとえば、-10000(可能な限り小さい入力値よりも小さく)と10000(入力可能な最大値よりも大きい)の値を小さくするなど、適切な値を大きくする必要があります。 forループの後にavgを1回だけ計算する必要があります。 – Shiping

+0

または、読み取った最初の値からmaxとminを設定します。その後、新しい値と優勢な最大値および最小値を比較します。 –

答えて

1
   large = value; 
       small = value; 
       // point A 
       if(value > large) 
         large = value; 
       if(value < small) 
         small = value; 

largesmall、上記の点Aで、かつvalueは今と同じ値が含まれています。その後のifステートメントは有効になりません。 の場合、おそらく最初の2行だけが必要です。

+0

申し訳ありませんが、私はまだそれを修正する方法を理解していません。 if文が読み込まれていないことがわかりました。 –

+0

もう一つの答えでは、 'if'ステートメントを使って与えられた条件の下でしか二つの行を実行できないことが後で示唆されています – guest

0

私はあなたのコードを修正するための2つの可能なアプローチを提供してみましょう:としてのためのループ「外」大・小が整数であるので、あなたがそれらを初期化することができ :ループの外1.Initializeは、大小

オプション次の:

int large = INT_MIN; 
int small = INT_MAX; 

や文を削除する:

large = value; 
small = value; 

あなたのforループから。

それぞれ最大値と最小値を計算することを目的としているため、可能な限り小さい整数に初期化し、最小から最大の整数を初期化することもできます。

定数INT_MINとINT_MAXは、 "limits.h"ヘッダーファイルで定義されています。

オプション2.Changeあなたのループ内のコード:

私たちは(すなわち、ときに私== 0)のループが始まると、「一度」に初期化する変数の大小の必要性を理解する必要があります。 ループを実行するたびに設定し続けると、それらは上書きされ続け、最小値/最大値には一貫性がありません。

だからあなたのコードは次のように変更します。

if (i == 0) { 
    large = value; 
    small = value; 
} 

サイドノート:全体の和を計算する「後」ループの外であなたの平均を計算します。

関連する問題