【例題】配列内の最小値を取得しよう

例題として、配列内の最小値を取得するプログラムについて考えてみましょう。
getArrayMin関数を作成し、配列から最小値を取得させてみましょう。

動かしてみよう

サンプルコードを動かしてみましょう。
実行ボタンを押してみてください。
また int input[] の { } 内を色々と変えての実行もしてみてください。

input配列内の最小値が取得できたことが出力結果から確認できたと思います。
では、解説に進みましょう。

解説

サンプルコードの要点について説明します。

/* プロトタイプ宣言 */
int getArrayMin(int array[], int size);

まずは関数のプロトタイプ宣言です。
『XXXX関数っていうのがあるよ。』と宣言するために必要な記述でした。

続いてmain関数内の下記。

int input[] = { 2, 5, -1, 0 };
int size = sizeof(input)/sizeof(int);
int min;

配列inputと変数size,minを作成しています。
こちらについては【例題】配列の平均値を求めようでも同様の説明をしていますので、必要に応じてそちらも参照ください。

続いて、getArrayMin関数のコール部分です。

min = getArrayMin( input, size );

getArrayMin関数は配列inputの最小値を戻り値で返す関数として設計しますので、変数minに戻り値を代入するように関数コールをおこなっています。
第1引数にはinput配列の先頭アドレス、第2引数にはinput配列の要素数を入力してあります。
こちらの解説については【例題】配列の要素を小さい順(昇順)に並べ替えようにもありますので、必要であればそちらも参照ください。

続いて、getArrayMin関数の中身についてです。

int min = array[0];

最小値を格納するための変数minを定義し、その初期化をarray[0]でおこなっています。
とりあえず array[0]が最小値だ ということにしておいて、以降の配列要素との比較において変数minを上書きするように処理させます。

次にfor文です。

for( int i = 1; i < size; i++ )

配列の[0]は初期化で使用済みなので、i=1〜(size-1)までfor文を回してあげます。

そしてfor文内で現在の最小値minと現在の要素array[i]の比較を行います。

if( min > array[i])
{
    min = array[i];
}

minよりもarray[i]が小さい場合には、minの値をarray[i]で上書きします。
それによって、変数minには常に現時点での最小値が入ることになります。

for文を回し終わったら、最後にreturn文によって、minに格納されている値をmain関数へと戻します。

return min;

main関数ではこの受け取った値をprintf関数によって出力させています。

以上です。
ではまた。

タイトルとURLをコピーしました