2017-02-22 3 views
2

プログラムは意図した通りに、ユーザが "-1"を入力するまでの年齢を入力するように促します。ユーザーがこれを入力すると、プログラムはあなたに最大、最小、および平均を伝えるように意図されています。入力を平均化する方法が不明な場合を除いて、すべて正常に機能しています。これらのユーザー入力を平均するにはどうすればよいですか?

更新:私が助けてくれたおかげで、コードを更新しました。残っている唯一のことは、私が正しい平均を得ていないことです。私は更新されたコードを含んでいます。 numberOfInputsでtotalvalueをを除した以外に、あなたのwhile文の内側

#include<stdio.h> 
int main() 
{ 
    int n, large, small; 
    int sumOfAges = 0; 
    double averageAge = 0.0; 
    int Num = 0; 
    printf("Enter an age: \n"); 
    scanf("%d", &n); 
    large = n; 
    small = n; 



    while(n != -1) 
    { 
     printf("Enter an age: \n"); 
     scanf("%d",&n); 
     if (n>large) 
     large = n; 
     if(n < small && n != -1) 
     small = n; 
     sumOfAges += n; 
     Num++; 
    } 

    averageAge = (sumOfAges/Num); 

    printf("\n The largest age is %d", large); 
    printf("\n The smallest age is %d", small); 
    printf("\n The average age is %lf", averageAge); 
    return 0; 
} 
+3

平均がどのように計算されるか知っていますか? –

+0

@Eugene、はい。すべてを追加し、次に数値の数で除算します。私はあなたの質問が皮肉だったならば、私は謝罪するためにコーディングとCに新しいです。私はこれを実装する方法についていくつかの指針が必要です。 – jh365

+1

既にループがあります。 2つの変数が必要です。合計は1つ(nを追加)、2つ目は数を数えます(+1を加算)。次に、計算結果を表示します(丸めを避けるために、浮動小数点または二重にキャストすることを忘れないでください)。 – AntonH

答えて

1

として平均値を計算します。プログラムは

#include <stdio.h> 

int main(void) 
{ 
    int largest, smallest; 
    int n, total; 

    n = 0; 
    total = 0; 

    while (1) 
    { 
     int age; 

     printf("Enter an age (-1 - exit) : "); 

     if (scanf("%d", &age) != 1 || age == -1) break; 

     if (n++ == 0) 
     { 
       largest = smallest = age; 
     } 
     else if (largest < age) 
     { 
       largest = age; 
     } 
     else if (age < smallest) 
     { 
       smallest = age; 
     } 

     total += age; 
    } 

    if (n != 0) 
    { 
     printf("\nThe largest age is %d", largest); 
     printf("\nThe smallest age is %d", smallest); 
     printf("\nThe average age is %d\n", total/n); 
    } 

    return 0; 
} 

その出力は

Enter an age (-1 - exit) : 10 
Enter an age (-1 - exit) : 20 
Enter an age (-1 - exit) : 15 
Enter an age (-1 - exit) : 16 
Enter an age (-1 - exit) : 25 
Enter an age (-1 - exit) : 21 
Enter an age (-1 - exit) : -1 

The largest age is 25 
The smallest age is 10 
The average age is 17 

のようになります。次の方法を見ることができます

私は二重の値として、平均年齢を出力すると、この場合には良いアイデアだと思いません。ただし、変数totalをdouble型として宣言することもできます:)

+0

@ jh365不明な点を教えてください。 –

2

あなたは入力数を追跡し、入力

int numberOfInputs = 0; 
int totalValue = 0; 

while(n != -1) 
{ 
    numberOfInputs++; 
    totalValue += n; 
    // Your other While-loop code here 
} 

平均の合計値必要があります。

float Average = (float)totalValue/numberOfInputs; 

注計算は浮動小数点ではなく整数で行われるので、私は、フロートに算術これをキャスト。

+0

あなたは 'total/numberOfInput?'を意味しますか? –

+0

私はdownvoterではありませんが、あなたは無限のループを持っています...そしてあなたの平均公式は間違っています(これは一目ぼれでは分かりません;-) – chqrlie

+0

1)答えのボディで投票しないでください。それは無関係です。 2)はい、downvoteは説明されなければならない、そうでなければ役に立たないです。 3)私はこのDV(私ではない)のいくつかの理由を考えることができます:a)OPのことを教える代わりに、些細な答えを放棄する。 b)初期化されていない変数の使用。 c)述べたように - 書かれた無限ループ –

2

この場合の平均値を求めるには、Nの値、つまりwhileループ内の平均(浮動小数点値として)を求める年齢値の数を決定する必要があります。合計年齢値に新しい年齢(整数値として)を追加し、Nと年齢の合計をsmallestlargestと一緒に保存します。

//...your vars 
int sumOfAges = 0; 
double averageAge = 0.0; 
int N = 0; 

while(age != -1) 
{ 
    printf("Enter an age: \n"); 
    scanf("%d",&age); 
    if (age != -1){ 
     if (age>max) 
      max = age; 
     if(age < min) 
      min = age; 

     sumOfAges += age; 
     N++; 
    } 
} 

その後、あなたはすべての年齢層を蓄積し、入力された年齢の数によってそれらを分割する必要があり、平均を計算するにはaverageAge = ((double)sumOfAges/N);

+0

変数名に 'N'と' n'を使用しないでください。意味のある名前を使用してください。 – stark

+1

'N'は統計で一般的に使用され、この理由で意味があります。なぜアプリケーションのフィールドの歴史を否定するのですか? –

+1

_case_でのみ異なる識別子は、テキストが異なる識別子よりも理解/区別が難しい傾向があります。 'age'と' n'を使うと、 'n'と' N'を区別するのに役立ちます。 – chux

関連する問題