配列内の整数値から最大値(最小値)を探索する
配列内の整数値の中から最大値(最小値)を探索してみます。
配列内を順番に確認し最大値を探します。
1.分岐制御では、基本的に2つの値の比較になるので、
配列内の先頭値をいったん最大値としてキープします。
2.キープした値と配列先頭から2番目の値から比較を開始し、
配列内の値の方が大きい場合は、キープ値をその値と
入れ替え、そのときまでの最大値とします。
3.この2.の操作を末尾の要素までまで繰り返します。
これで、最後のキープされた値が配列内の最大値となります。
※最小値を探索する場合は、キープ値を最大値ではなく
そのときの最小値をキープするようにします。
これをプログラムしてみます。
・プロジェクトを作成します。
Visual Studio 2022を起動し、
新しいプロジェクトを作成します。
・プロジェクトタイプ:"コンソールアプリ"
・プロジェクト名:"ct_104_2"
とします。
※プロジェクトの作成方法は、PCでC言語基礎編の
・2つの入力値(整数値)の四則演算結果を表示する
を参考にして下さい。
・プログラム記述・編集画面が表示されるので、
以下のプログラムを記述します。
プログラムの記述内容
// 配列内の最大値(最小値)を探索する #include <iostream> int main() { // 変数宣言と初期化 int array[] = { 5,1,7,6,4,8,2,10,3,9 }; int max; int num; // array配列の要素数を取得 num = sizeof(array) / sizeof(array[0]); // 初期設定として変数maxの(array[0]を設定 max = array[0]; // 配列要素の二つ目から最後までを変数maxと比較ループ for (int i = 1; i < num; i++) { // 変数maxよりarray[i]の要素の方が大きい場合maxへ入れ換える if (max < array[i]) { max = array[i]; } } // 配列内の最大値の表示 printf("最大値: %d\n", max); return EXIT_SUCCESS; }
簡単なプログラム解説です。
・変数宣言と初期化
int array[] = { 5,1,7,6,4,8,2,10,3,9 };
今回、最大値を探索するための対象配列を宣言します。
int max;
最大値を格納(キープ)するための変数
int num;
ループ回数に利用する配列の要素数を格納するための変数
・array配列の要素数を取得
num = sizeof(array) / sizeof(array[0]);
この式によって、配列内の要素数を取得できます。
・初期設定として変数maxの(array[0]を設定
max = array[0];
比較演算では比較対象が必要なので、
配列内の先頭の値 array[0] を 変数 max に仮格納します。
※配列内の数値範囲が完全に把握できている場合は、
その範囲内の最大値以下の値を仮置きしてもよいですが、
探索不良になる危険性があるので避けるのがよいでしょう。
これは、配列値に変更があった場合などに、
設定した値が最大値より大きい可能性があるからです。
・配列要素の二つ目から最後までを変数maxと比較ループ for (int i = 1; i < num; i++) { if (max < array[i]) { max = array[i]; } }
ループは配列array[]の2つ目の値(要素)から、
キープした変数maxと比較し、配列内の値の方が大きければ
その値を変数maxに入れ替えながら、配列の末尾まで繰り返します。
※最小値を探索する場合は、
if (max < array[i]) を if (max > array[i]) を
比較演算子を入れ替える( "<" → ">" )だけで可能になります。
変数名が max ですがこれは特に問題ではありませんね。
気にはなりますが。。。
※初期設定としての変数 max の値に配列 array[0] を使用せず、
最大値以下の適当な値を設定した場合、繰り返しの初期値は
int i = 1 からではなく、int i = 0 から始める必要があります。
これは、配列要素の array[0] の値が最大値である場合があるからです。
・配列内の最大値の表示
printf("最大値:%d\n", max);
繰り返しが終わった時点で、変数 max には配列内の最大値が
キープされていますのでこれを表示します。
・実行してみます。
上段メニュー"デバッグ(D)"のサブメニューより、
"デバッグなしで開始(H)"を選択します。
・実行結果は、デバッグコンソール画面が開き表示されます。
※この実行では、最大値として、10 が表示されます。
※この画面は、何かのキーを打鍵することで閉じることができます。