1

そのため、私のプログラム内で、一連の数値の範囲を検出する関数を作成しましたが、残念ながら、正しく機能していないようです。最小数と最大数の違いを私に与える代わりに、それは私にこれを与えます:

(3) Range
(4) Restart/Exit
3
7900455959466841600000000000000000.0

私はインターネット全体を調べましたが、それを行う方法のいくつかの有用な例を見つけましたが、それらはこの問題を解決していないようでした。これが私の関数です。誰かがコード全体を見る必要がある場合は、私に知らせてください。

 float range(float numbers[], int amount)
 {
  int i;
  float diff=0;
  for (i=1;i<=amount;i++){

      diff=numbers[amount]-numbers[1];
  }

      printf("%.1f",diff);

      return diff;
   }

私は考えられるすべてのこと、提案を試しました

4

3 に答える 3

2

あなたはこのようなものが欲しいです:

float range(float numbers[], int amount)
{
    int i;
    float min, max, diff;
    min = numbers[0];
    max = numbers[0];
    for (i=1; i < amount; i++)
    {
        if (numbers[i] < min) min = numbers[i];
        if (max < numbers[i]) max = numbers[i];
    }

    diff = max - min;

    printf("%.1f",diff);

    return diff;
}
于 2012-10-08T05:53:21.153 に答える
1

アレイが注文されている場合、問題は次のように単純化されます。

/* assuming ammount point to the last position of the array */
return numbers[ammount] - numbers[0]

配列が順序付けられていない場合は、配列の最大要素と最小要素を取得してその差を返すループを構築する必要があります。

于 2012-10-08T05:57:54.583 に答える
0

金額変数の名前はhighestIndexの方が適切です

あなたのコードを修正するために、私はあなたがするかもしれない2つのことを見ることができます:

1)。現在のコードが何をしているのかを理解します。「デスクチェック」をお試しください。紙の上で(またはあなたの心の中で)この関数へのいくつかの入力を発明します。

 numbers = [ 2, 17, 4, 10];  amount = 3;

 i = 1, is 1 <=3 ? yes, OK go into the body

 diff = numbers[3] - numbers[1] which is 10 - 17, so diff is now -7

 increment i, i = 2, is 2 <=3 ? yes, OK go into the body

 diff = numbers[3] - numbers[2] which is 10 - 4, so diff is now 6

 increment i, i = 3, is 3 <=3 ? yes, OK go into the body

 diff = numbers[3] - numbers[2] which is 10 - 10, so diff is now 0

 increment i, i = 4, is 3 <=3 ? no. so leave the loop

 print diff ... hmmm it's 0 at the moment

ここでの秘訣は、小さなサンプルセットを選び、処理が理にかなっているかどうかを確認することです。明らかに、入力配列がソートされていない限り、これは範囲を見つけることができませんが、ループが必要な場合は、numbers[highestIndex]とnumbers[0]を減算するだけです。

2)。今、あなたは何をする必要がありますか?範囲は、リスト内の最大数と最小数の差です。したがって、コードはリストを調べて、最大数と最小数を見つける必要があります。このように始めてみてください

候補の値を初期化します。リストにメンバーが1つしかない場合はこれが正しいことに注意してください。その場合、最大値と最小値は同じで、リスト内の唯一の値です。

  float biggest = numbers[0];
  float smallest = numbers[0];

次に、ループして、他の数値のいずれかが現在の最大および最小よりも大きいか小さいかを確認します。

  for ( int i = 1; i <= highestIndex; i++ ) {

         is numbers[i] bigger than biggest
               set new biggest value

         do the same sort of thing for smallest

  }

  print biggest - smallest

次に、すべての数値が負の場合に何が起こるか、特別な場合に何が起こるかを確認するために、フロートが保持できる値について読んでください。

于 2012-10-08T06:06:15.243 に答える