2016-05-05 9 views
1
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int Sum=0,numbers; 
    double Average; 
    int counter = 0; 

    printf("\nPlease Enter the Numbers one by one\n"); 
    for(;;) { 
    scanf("%d",&numbers); 
    if(numbers == 0) { 
     break; 
    } 
    else { 
     Sum = Sum + numbers; 
     counter++; 
    } 
    } 

    Average = Sum/counter; 

    printf("\nSum of the %d Numbers = %d",counter, Sum); 
    printf("\nAverage of the %d Numbers = %.4f",counter, Average); 

    return 0; 
} 

無限の数の入力を取ることができるプログラムを書いて、1つの変数に追加し、キー0を押したときにすべての入力番号の平均を出力します。C - 出力が丸められます

しかし、問題は、私は、例5と2のために入力すると、数学的操作は、 をAverage = SUM/Counterを開始すると和変数7.カウンタの値が、しかし2

の値を有していることです結果は3.00ではなく3.500 ....

誰かが私の問題がどこにあるか知っていますか?

助けていただければ幸いです。

乾杯

マルコ

+3

SUMはint型であるため、結果を倍精度に変換します。 –

+0

ありがとうございます。 –

答えて

5
Average = Sum/counter; 

合計はintです。

Average = (double)Sum/counter; 

とする必要があります。この場合は、浮動小数点の目的の結果を得るためにオペランドの1つを型キャストする必要があります。

+0

ありがとう=)その作業 –

+0

分裂の前に分子または分母をキャストして二重の結果を得る必要があります。結果をキャストすると、結果は整数になります。これはあなたがしたことだが、あなたが説明したものではないことに注意してください。 – KevinDTimm

+0

それは私が何を意味しました。言い訳は誤解を招くかもしれません。私はそれを変更します –

3

Sumcounterintタイプの両方であるので、整数除算を行い、その結果をタイプintでもあります。

あなたはそれが浮動小数点除算ないようにdoubleに、オペランドの1をキャストする必要があります。

Average = (double)Sum/counter; 
+0

ありがとう=)その作業 –

0

私がコメントを投稿する評判を持っていません。だから私は答えとして、それを提供する必要があります。

dbushの答えは、より正確である:

あなたはオペランド、ない結果の1をキャストする必要があります。

結果をキャストしますか?それでも3.00でした。