2016-07-03 16 views
3

10人の要素の配列で平均を見つける私のプログラムを実行するたびにね。私は少し異なる結果になる。どんな考え?Cで異なる出力を与える配列?

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

#include "stdio.h" 

int main() 
{ 
float array[10]; 

for (int n=0; n<10;n++) 
{ 
    array[n] = n * 4.76; 
    printf("array[%i] = %.4f\n",n,array[n]); 
} 

float total; 
for (int n=0; n<10; n++) 
{ 
    total = total + array[n]; 
} 

printf("Average: %.4f\n", total/10); 
return 0; 
} 

といくつかのサンプルの結果は以下のとおりです。Cで変数を宣言するとき、彼らはデフォルト値に初期化していることを確認し

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2598 

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2826 
+7

ヒント: 'total'は2番目のforループの直前にどのような値を含んでいますか? – immibis

+0

int total = 0;あなたは天才です。ありがとうございました。初期値がないので乱数を生成していましたか? – Gregborrelly

+1

これをintにすると、整数だけを保持できます。 – immibis

答えて

7

。スタックに割り当てられた変数は通常、デフォルト値に初期化されず、むしろjunkで初期化されます。

ので、合計を開始する前に、

float total = 0.0f; 

として、あなたの変数を初期化し、あなたは同じ答えを毎回取得する必要があります。

+0

これがなぜそのようなことを知っていますか?これらの乱数はどこから来ますか? – Gregborrelly

+0

プログラムがスタックを使用する前に、他のプログラムがある可能性があります。そしてそのプログラムは、特にそのメモリロケーションを使用していた可能性があります。そして、それが完了すると、それ自身の後でクリーンアップしませんでした(それは必要ありません)。そして、あなたのプログラムがそれ自身の目的のためにそのメモリ位置をとったとき、Cはデフォルトで値を0に設定することをやめました(これは不必要なオーバーヘッドです)。 –

+0

@BackSlash変数に使用されたメモリに残っているものは何でも...最後に何が使われたかによっては何でもかまいません(おそらくあなたのプログラムではなく、時にはプログラムの別の部分すでに返されている関数呼び出しなど、これをもう使用します)。 – Dmitri

関連する問題