質問: #include int main(void) { int a[4]; int i=0; int n; int sum=0; printf("正数を入力してください\n"); while(i<=4) {scanf("%d",&n); if(n>=0) {a[i]=n; sum=sum+a[i]; i++; } else{printf("正数を入力してください");} } printf("正数の合計値は%dです",sum); printf("正数の平均値は%lfです",(double)(sum/5)); return(0); } 上記は正数のみ配列に保存し、その合計と平均を表示するプログラムを 製作しようとして書いたものですが次のような問題点があり正常に機能しません。 (1)a[i]=n;をn=a[i];と置き換えると不正な値が表示される (2)平均値の小数点以下の値がおかしい (例)8+8+8+9+8と入力し合計値41に対し、平均値が8.000000 解決法が分からず困っています。どなたかお力添えお願いします。
回答: (1)a[i]=n;をn=a[i];と置き換えると不正な値が表示される ・・・a[i]=は初期値が指定されていないので、不定です。 従って、実行時のメモリー状態がそのまま利用されます。 (2)平均値の小数点以下の値がおかしい ・・・キャストの対象が整数演算の結果になっているためです。 ((double)sum/5))でいいとおもいます。