アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

#半分寝ぼけてます…


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

ごめん、訂正。


(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は個別に求めることはできないのでしょうか?
 よろしくお願いします。

補足日時:2005/06/03 16:43
    • good
    • 0

scanfを使う代わりにgetsを使うのはいかがでしょうか.


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

こんな感じでどうでしょうかね。


#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;
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/06/03 22:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!