2

質問は次のとおりです。値-1で終了する一連の正の整数を入力するようにユーザーに求める関数を記述します。次に、関数はユーザーが入力した最大値と最小値を返す必要があります。ユーザーが-1を入力する前に、少なくとも1つの正の整数を入力したと想定できます。

だから私が思ったのは、入力されたすべての値を格納する配列を作成することでした。唯一の問題は、ユーザーが-1の前に入力する整数の数がわからないため、エントリ数が不明な配列を宣言する方法がよくわからないことです。

次に、後半では、最大/最小= arr [0]を作成し、次にarr[index]>maximumまたはarr[index]を1回実行してindex++を作成することを考えていました。

ありがとうございました!

4

3 に答える 3

2

malloc callocやreallocなどの動的メモリ割り当て関数を使用するか、実際に優れたコードを実行することに興味がある場合は、linkedlistを使用してください。

ところで、すべての数値を配列に格納する必要がありますか?あなたはその場で最小と最大をチェックすることができますか?

単純なアルゴリズムは次のようになります。

int maxval=0, minval = 0;
while(inputval != -1)
{
    if(inputval < minval)
       minval = inputval;

    if(inputval > maxval)
       maxval = inputval;
}
于 2013-03-01T05:46:57.130 に答える
0

残念ながら、できません-少なくとも直接ではありません。malloc()を使用すると、可変長の配列を割り当てることができ、それを使用して、より多くのスペースを割り当て続けることができます。例えば

int* numbers = malloc(sizeof(int)*how_many);
if (!numbers) {
  //error
}

//do stuff.

あなたの例では、次のようなことを行うことができます

while(not_done) {
  if( array-is-full ) {
    how_many *= 2;
    int* new_numbers = (int*)malloc(sizeof(int)*how_many);
    for(int i = 0; i < index;i++)
       new_numbers[i] = numbers[i];
    free(numbers);
    numbers = new_numbers;
  }

  //read user input
  //stick it into the array


}
于 2013-03-01T05:46:35.143 に答える
0

動的メモリ割り当て、特にrealloc. 新しい要素を入力するたびに配列のサイズを変更できます

ところで、入力から最小値と最大値を抽出する場合は、入力パラメーターを配列に保存する必要はありません。

要素を動的配列に保存し、最小値と最大値を抽出する方法の後の任意の方法

int min = -1;
int max = -1;
int i = 0;

int *array=malloc(sizof(int));

while (scanf("%d", &x)>0 && x>0)
{
    if(i>0)
        realloc(array, (i+1)*sizeof(int));
    else {
        min = x;
        max = x;
    }
    array[i] = x;
    if (x>max) max = x;
    if (x<min) min = x;
    i++;
} 
于 2013-03-01T06:23:39.143 に答える