-1

私のプログラムは、複数の入力を読み取り、最小、最大、合計、および平均を表示することを想定しています。次のようになります。

入力:

2.5 5 3.5 4.5 jfkjk

出力:

min is 2.5
max is 5
sum is 15.5
average is 3.875

プログラムは、数字以外または改行に達したときに終了することになっています。ユーザーは好きなだけ数字を入力できます。配列を使用できず、ループを使用する必要があります。これは私のプログラムがどのように見えるかです:

void numbers()
      {
      double digit;
      double sum = 0;
      double avg = 0;
      double max;
      double min;
      unsigned count = 0;
      //int c;
      max = 0;
      printf("Input:");

      do {
          scanf("%lf", &digit);

          min = digit;
          if(max < digit)
              digit = max;
          if(min < digit)
              digit = min;
          sum += digit;
          count++;
          avg = sum/count;
      } while( scanf("%lf", &digit)==1 )

      printf(" min is %lf max is %lf sum is %lf avg is %lf count is %u", min, max, sum, avg, count);
      }

プリントアウト:

Input:2.2 2.3 5 3.5 blah 
 min is 3.500000 max is 0.000000 sum is 0.000000 avg is 0.000000 count is 4
4

2 に答える 2

2

コードには 2 つの非常に不愉快なエラーが隠されています。

  • 数字を繰り返しながら更新されている(されていないmin)方法max

    これ:

    if(max < digit)
         digit = max;
    if(min < digit)            // <-- the comparison for min is incorrect as well
         digit = min;
    

    次のようにする必要があります。

    if(max < digit)
        max = digit;
    if(min > digit)         
        min = digit;
    

    min/を更新したいので、読み込まれmaxたものではありませんdigit

  • あなたのループのロジック

    これ:

    do {
        scanf("%lf", &digit);
        ...
    } while( scanf("%lf", &digit)==1 )
    

    次のようにする必要があります。

    while( scanf("%lf", &digit)==1 ) {
        ...
    } 
    
于 2013-10-03T20:11:33.933 に答える