dポイントプレゼントキャンペーン実施中!

c言語の問題です。キーボードから小数を繰り返し入力させ、負の数が入力されると入力を終了し、 それまでの非負小数の平均を 表示するプログラムを作成せよ。という問題です。自分は下記のように書いたのですが、平均を表示する時に負少数の値も含めたものが出てしまいます。どこを直せばいいのか教えていただきたいです。

#include<stdio.h>

int main(void)

{
double x,sum;
int a;

sum=0;
a=0;

while(x>=0){
printf("number=");
scanf("%lf",&x);
a++;
sum+=x;
if(x<0){
break;
}
}
printf("%lf\n",sum/a);
return(0);
}

A 回答 (4件)

「ループに入らない」可能性も考慮しないとね.

    • good
    • 0

あー、もう一つ。


脱出のトコだけど、

if (x < 0) {
 printf("%lf\n", sum/a);
 break;
}

で印字してから脱出した方が良いかな。
    • good
    • 0

sum+=x;


if(x<0)->で脱出

ってこの順番がおかしいです。
sumに負の小数が加算されてからxが負かどうか判定してる。
だから間違いですよね。
そうじゃなくって、xが入力されたら即座にxが負かどうか判定しないとならない。
つまり、やるならscanfでxに数値をツッコんですぐに脱出判定をしないといけない、と言う事です。

プログラムは「書かれた順番通りに実行される」のです。
これ、当たり前のように見えて意外と難しくって、条件分岐や反復より一番初心者が引っかかりやすいトコなのです。
こういう「書かれた順番通りに実行される」機能を逐次処理と呼びます。
    • good
    • 0

入力数のカウンタである「a」を先にインクリメントしているから


if判定後の計算処理でズレる

if判定のelse節でカウントするとか
breakする際にカウンターを一つ戻すとか
余計に数えすぎない、もしくは余計な分を戻す
そういう処理が必要なのでは?
    • good
    • 0

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