- ベストアンサー
配列変数を用いて平均値を求める
こんにちわ 実は、入力データを使って平均値を求めるプログラムについてなんですけど。 //データの平均値の計算 #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; はどこに入れればいいでしょうか? たくさんの質問すいません。ご教授よろしくお願いします。
- みんなの回答 (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; }
その他の回答 (3)
- kirinoma
- ベストアンサー率53% (288/542)
scanfを使う代わりにgetsを使うのはいかがでしょうか. 読み込んだ文字列が"end"だったらループを抜ける. それ以外だったらatoiを使って数値にして配列に格納する. 平均を出すときはiの値で割れば良いです.
- phoenix343
- ベストアンサー率15% (296/1946)
ごめん、訂正。 (0 == i) || ((0 < i) && 0 <=x[i-1]) だわ。
補足
早速のご回答ありがとうございます。 //データの平均値の計算 #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)
#半分寝ぼけてます… 最初のforの条件文をかえりゃいいだけ。 (0 == i) && ((0 < i) && 0 <=x[i-1]) かな。break文はいらない。 次のforの条件文も変える必要が有りますが、分かるよね
お礼
おぉ~しっくりいきました! ありがとうございますm(._.)m ペコッ プログラミングっておもしろいですね。 今後もいろいろなものを解いてみたいです。