2017-02-19 2 views
1

要件は以下のとおりです。添加は間違っている、このタスクのための

  • は改行で区切って、それぞれ、標準入力からの浮動小数点値を読み、EOFによって終了します。
  • 入力値は[-100,000〜+ 100,000]の範囲です。
  • 入力には、少なくとも1つの浮動小数点値が含まれます。
  • 入力に空白行が含まれる場合があります。これらは無視する必要があります。
  • 可能な空白行を除いて、入力は別の形で整形されています。

見られるすべての値の算術平均2進の精度全てを見て最大値を見

  • 最小値:EOF、出力において

場所。 出力値は、単一の空白文字で区切り、その後に改行文字を続けて指定する必要があります。

例:

入力:

7 
5.6 
6 

出力:

5.60 7.00 6.20 

入力:

11 

出力:

11.00 11.00 11.00 

私のコードでは、7,5,6、および6を入力すると、出力は5.60 7.00 5.77になります。 問題がどこにあるのかわかっていますが、解決方法は不明です。私の合計変数は、EOFの値が17.322826であり、間違っていると言っています。

#include <stdio.h> 

int main() { 
    int i = 0; 
    float big = 0; 
    float small = 1000000; 
    float total;  
    float div = 0; 

    while (i == 0) { 
     float a = 0; 
     float flag = scanf("%f", &a); 

     if (flag == EOF) { 
      printf("%.2f %.2f %.2f %f %f\n", small, big, total/div, total, div); 
      break; 
     } 

     if (a > big) { 
      big = a; 
     } 
     if (a < small) { 
      small = a; 
     } 
     div++; 
     total = total + a; 
    } 
    return 0; 
} 
+5

:あなたが使用する関数のドキュメントを読んでください! 'scanf'は' float'ではなく 'int'を返します。 – Olaf

+0

こんにちは、問題の原因は何ですか?私はそれが設定され、正しい値を表示するたびに "a"の値を端末に出力しました。私はエラーが浮動小数点値の追加から来ていると思う。同じ入力で、各実行のための私の "合計" varは毎回異なる出力を持っています。私はintと変化なしとして "フラグ"を宣言した。 –

+1

私はそれが問題を引き起こしているとは言いませんでしたが、ドキュメントを読む必要がある正しいタイプを使用することが始まります。そして、 'EOF'だけが問題を報告する唯一の値ではなく、ドキュメントからも明らかになる。 – Olaf

答えて

2

あなたは0totalを初期化するのを忘れていました。

またノート:

  • 無限ループのための古典的なCのイディオムがfor (;;) { ... }あります。
  • flag
  • は、あなたが flag != 1だけでなく flag == EOFのループを停止する必要があります int
  • として定義する必要があります。無効な入力は、プログラムが無限ループする原因となります。実際にこの変数を完全に削除することができます。
  • big0small1000000が正しくありません:すべての値が負の場合はどうなりますか?もし彼らがすべて非常に大きいなら、どうしますか?ここで

修正バージョンです:開始について

#include <stdio.h> 

int main(void) { 
    float a, big, small, total; 
    int div; 

    if (scanf("%f", &a) != 1) 
     return 1; 

    big = small = total = a; 
    div = 1; 
    while (scanf("%f", &a) == 1) { 
     if (big < a) { 
      big = a; 
     } 
     if (small > a) { 
      small = a; 
     } 
     div++; 
     total += a; 
    } 
    printf("%.2f %.2f %.2f\n", small, big, total/div); 
    return 0; 
} 
関連する問題