• ベストアンサー

配列変数を用いて平均値を求める

こんにちわ 実は、入力データを使って平均値を求めるプログラムについてなんですけど。 //データの平均値の計算 #include <stdio.h> void main () { int i, k, n, x[100]; double a; while (1) { a = 0; printf("データ数を入力してください..."); scanf("%d",&n); printf("正の実数のデータを入力してください。"); for (i = 0;i < n ;i++) scanf("%d",&x[i]); for (k = 0;k < n;k++) a += x[k]; printf("平均値 %f\n", a/n); } } すいません、インデントがいい加減です。  こうやると普通に平均値を出せますが、最初にデータ数を入力しなければいけません。  私は、データの個数を入力しないで平均値を出したいと思います。どういう風に上のプログラムを変更すればできるのでしょうか?上のプログラムに誤植があるとは思いますが。。。  また、たとえば最後に0以下の数字を入力したらデータ入力を終わらせる...  if(x[i]<=0)break; はどこに入れればいいでしょうか?  たくさんの質問すいません。ご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

こんな感じでどうでしょうかね。 #include <stdio.h> #define MAX 100 int main(){ int i, x[MAX]; double a; printf("正の実数のデータを入力してください。"); a=0; i=0; do{ printf("0以下で入力終了>"); scanf("%d",&x[i]); if(x[i]<=0) break; a+=x[i++]; }while(i<MAX); printf("平均値 %f\n", a/i); return 0; }

Viper-ei
質問者

お礼

おぉ~しっくりいきました! ありがとうございますm(._.)m ペコッ プログラミングっておもしろいですね。 今後もいろいろなものを解いてみたいです。

その他の回答 (3)

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.3

scanfを使う代わりにgetsを使うのはいかがでしょうか. 読み込んだ文字列が"end"だったらループを抜ける. それ以外だったらatoiを使って数値にして配列に格納する. 平均を出すときはiの値で割れば良いです.

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

ごめん、訂正。 (0 == i) || ((0 < i) && 0 <=x[i-1]) だわ。

Viper-ei
質問者

補足

早速のご回答ありがとうございます。 //データの平均値の計算 #include <stdio.h> void main () { int i,k,x[100]; double a; while (1) { a = 0; printf("正の実数のデータを入力してください。"); for (i = 0; (0 == i) || ((0 < i) && 0 <=x[i-1] ) ;i++) scanf("%d",&x[i]); for (k = 0; k <= i-1 ;k++) a += x[k]; printf(" 平均値 %f\n", a); } }  。。。とやってみましたが、今回はデータを入力しても何もおきません。おそらくきちんと配列に値が挿入されてないと思いますが。すいません、まだC+の初心者で参考書読みながらやっています。  もうひとつ質問ですが、もし、a[i]={6 1 5 … }のようになっていて、データをn個入力したとして、a[i]内に入力されたデータの個数nは個別に求めることはできないのでしょうか?  よろしくお願いします。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

#半分寝ぼけてます… 最初のforの条件文をかえりゃいいだけ。 (0 == i) && ((0 < i) && 0 <=x[i-1]) かな。break文はいらない。 次のforの条件文も変える必要が有りますが、分かるよね

関連するQ&A