2016-04-03 5 views
0

平均はこのコードでは正しくありません。このコードで平均を解決する方法。私はすべてのことを試みますが、毎回同じことを試みます。最後の平均値のみを表示します。Cプログラムは平均を計算します

#include<stdio.h> 
void compute(int anumber,int *max,int *min,float *average,int count); 

int main() 
{ 
    int max=0,min=100; 
    float average=0; 
    int number,i=0; 


    printf("\nenter a number:"); 
    scanf("%d",&number); 
    while(number>0){ 
     i++; 
     compute(number,&max,&min,&average,i); 
     printf("\nenter a number:"); 
     scanf("%d",&number); 
    } 
    printf("\naverage %.2f",average); 
    printf("\ncount %d",i); 
    printf("\nmin %d",min); 
    printf("\nmax %d",max); 

    return 0; 

} 
void compute(int anumber,int *max,int *min,float *average,int count) 
{ 
    float total; 
    total=total+anumber; 

    *average=total/count; 
    ++count; 
    if(anumber>*max) 
     *max=anumber; 
    else if(anumber<*min) 
     *min=anumber; 
} 

答えて

0

問題#1:合計と数値が初期化されていません。

Cでは、変数の初期化は行われません。

float total; 

答え:それは、割り当てられた場所でメモリにあったものは何でも合計後の値がどのようなものです。 には0、20、94、15、7、または23億がありますが、それには任意の値があります。価値は不確定です。

total=total+anumber; 

未知数に数字を追加すると、合計がどのようになるか分かりません。

問題#2:合計を計算しません。

合計は、セット内のすべての数値を取って合計して計算されます。

I.E.数字2,4,6の場合、合計は2 + 4 + 6で、これは12になります。まず注意すべきことは、繰り返しの存在です。追加は抽象化できる共通の側面です。ループに我々は通常、抽象繰り返しすなわち

int i; 
float total = 0; 
for(i = 0; i <= 6; i+=2) 
{ 
    total += i; 
} 

あなたは、あなたのプログラムで同様のループを必要としています。

あなたの計算関数は無効です。値を返すことはできません。合計を修正して平均を計算する方法はいくつかあります。

  1. は、例えばグローバルスコープで合計を定義し、これは、それを任意の関数本体の外側を移動させることにより行われます。最も近い外側スコープの変数が使用されるため、関数内からtotalの定義を削除する必要があります。

  2. 静的にすると、各関数呼び出しの間に自動的には処理されません。これにより、値を渡して合計を残すことができます。

かかわらず、お好みのあなたは、あなたが実際に平均を計算していない今のところ、いくつかの変更を行う必要があります。あなたが与えられた課題や仕事の詳細は、皆に恩恵を与えます。Cは完全に私たちが知っている必要があり、あなたの質問に答えるためには、いくつかのキーワードが、それらを使用する多くの方法があります:

  1. プログラムを行うには何を想定していますか?予想される入出力は多くの助けになります。ソリューションを考え出すには、まず問題を完全に理解しなければなりません。うまく書かれた作業コードからも目的の機能を抽出することは難しいかもしれません。壊れたコードでは不可能に近いことがあります。

  2. 指定しましたか?あなたはそれらを理解していますか?あなたのコメントから、関数ヘッダー/プロトタイプを変更することが許可されていないことがわかりました。何が他の制限を持っていますか?

最終的なメモ。私はこれが宿題であると仮定しています.Cプログラミングを基礎とした多くのクラスを取ってきた人として、自分自身を教えてくれた人として、私はあなたを保証することができます。 - 必要なヘルプだけを受け取って、できるだけ多くのことを自分のものと考えるように努めています。

0

それは、すべての入力数の合計が含まれていないので、あなたの変数「合計」は、計算()関数にローカルである - 新しい変数は、すべてであると呼ばれるたびに計算()であり、ループの時間。

グローバル変数を合計すると、一度に1つずつ数値を処理したい場合は、計算関数内で合計を見つけることができます。それで正しい方法は、その合計を値の数で割って、平均を一度見つけることです。

+0

"total"をローカル変数として書き込むことはできますか?私はこの変数をcompute()関数に使いたくない。 compute()関数は "void計算(int anumber、int * max、int * min、float * average、int count)"でなければなりません。 – Duncan