こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんにちわ
実は、入力データを使って平均値を求めるプログラムについてなんですけど。
//データの平均値の計算
#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; はどこに入れればいいでしょうか?
 たくさんの質問すいません。ご教授よろしくお願いします。

投稿日時 - 2005-06-03 16:09:17

QNo.1426862

すぐに回答ほしいです

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

こんな感じでどうでしょうかね。
#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;
}

投稿日時 - 2005-06-03 19:19:51

お礼

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

投稿日時 - 2005-06-03 22:36:59

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

投稿日時 - 2005-06-03 16:25:35

ANo.2

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

投稿日時 - 2005-06-03 16:21:01

補足

早速のご回答ありがとうございます。
//データの平均値の計算
#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は個別に求めることはできないのでしょうか?
 よろしくお願いします。

投稿日時 - 2005-06-03 16:43:26

ANo.1

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

投稿日時 - 2005-06-03 16:19:43