0

ユーザーから n 個の要素を持つ配列を読み取り、最小値を持つ要素を見つけるプログラムを作成します。次に、プログラムは、この最小値と等しい値を持つ要素の数を見つけます。見つかった最小値を持つ要素は、配列の最小値と等しい値を持つ要素の数を画面に表示する必要があります。

私はこのコードを書きました:

#include <stdio.h>
int main() {
  int n = 1, min = 0, count = 0;
  int number[n];

  printf("Enter the size of array you want");
  scanf("%i", &n);

  int x;
  for (x = 0; x < n; x++) {
    int num;
    printf("\nEnter a Integer");
    scanf("%i", &num); 
    number[x] = num;
    if (number[x] < min)
      min = number[x];
  }
  int i;
  for (i = 0; i < n; i++) {
    if (min = number[i])
      count++; 
  }
  printf("%s%i", "\nThe smallest Integer you entered was ", min);
  printf("%s%i", "\nNumber of times you entered this Integer: ", count);

  return 0;
}

しかし、問題は、これを実行して整数を追加すると、最小値が見つからず、時間が正しく繰り返されることです!

どこが間違っていますか?

4

6 に答える 6

5

コンパイラが可変長配列をサポートしていると仮定すると、呼び出しの順序を変更する必要があります

int number[n];
scanf("%i", &n);

n配列を宣言する前に値がわかるように

scanf("%i", &n);
int number[n];

その後、minすべての正の値を無視しないように、より大きな値に初期化する必要があります

int min = INT_MAX;

<limits.h>(の定義には を含める必要がありますINT_MAX)

ついに、

if (min = number[i])

に割り当てnumber[i]ますmin==等しいかどうかをテストするために使用します。

コンパイラは、この最後のポイントの「条件ステートメントでの代入」について警告しているはずです。そうでない場合は、警告が有効になっていることを確認してください(-Wallgcc、/W4MSVCを使用)

于 2013-08-16T07:02:01.103 に答える
2
for (i = 0; i < n; i++) {
    if (min = number[i])
      count++; 
  }

に置き換えmin = number[i]ますmin == number[i]

于 2013-08-16T07:02:22.077 に答える
2

配列要素<0を行でチェックしています:

if (number[x] < min/*as u specified min =0 before*/),...

そのため、最小値はゼロに設定され、実際に置換は行われません..

完全な解決策:

#include <stdio.h>
int main() {
  int n = 1, min = 0, count = 0;
  int number[n];

  printf("Enter the size of array you want");
  scanf("%i", &n);

  int x,y;
  for (y = 0; y < n; y++)
  {
     printf("\nEnter a Integer");
     scanf("%i", &number[y]);
  } 
  min=number[0];
  for (x = 0; x < n; x++) {

    if (number[x] < min)
      min = number[x];
  }
  int i;
  for (i = 0; i < n; i++) {
    if (min == number[i])
      count++; 
  }
  printf("%s%i", "\nThe smallest Integer you entered was ", min);
  printf("%s%i", "\nNumber of times you entered this Integer: ", count);

  return 0;
}
于 2013-08-16T07:04:04.130 に答える