データを配列に入れてbox=[1,2,3,・・・n]として最小値を求めるプログラムを作成する。
1.データ数が1のとき、box[0]が最小値となる
2.データ数が2のとき、box[0]をグループ1としbox[1]をグループ2として、グループ1の最小値とグループ2の最小値を比較し小さい方がデータの最小値となる。
3.データ数が3のとき、box[0]をグループ1としbox[1]~box[2]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
4.データ数が4のとき、box[0]をグループ1としbox[1]~box[3]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
5.データ数が5のとき、box[0]をグループ1としbox[1]~box[4]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
6.データ数が6のとき、box[0]をグループ1としbox[1]~box[5]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
このように要素数がnの整数配列の最小値は、一番左の要素box[0]をグループ1として
box[1]~box[n-1]のグループ2としてグループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。これによってデータ数が何個でも最小値を求められる。
同様にすると最大値も求められる。
//データの数が何でもOK
#include<stdio.h>
int max_of_array(int *, int);
int min_of_array(int *, int);
int main()
{
int g[] = {1,-2,3,4,5,996,7,678,9,10,-11},pp;
pp=sizeof(g) / sizeof(int);//gに入力した値の数
printf("データの数:%d\n",pp);
printf("最大値:%d\n", max_of_array(g, pp));
printf("最小値:%d\n", min_of_array(g, pp));
return 0;
}
//最小値を求める
int min_of_array(int *m, int n)//int nのnはデータの数である
{
if(n==1){return m[0];}
else{return (m[0] < min_of_array(m+1, n-1)) ? m[0] : min_of_array(m+1, n-1);}
}
//最大値を求める
int max_of_array(int *m, int n)
{
if(n==1){return m[0];}
else{return (m[0] > max_of_array(m+1, n-1)) ? m[0] : max_of_array(m+1, n-1);}
}
上記コードを実行する。
C:\>0515.exe
データの数:11
最大値:996
最小値:-11
これを改造してデータをscanfで読み込むようにする。
//データの数が何でもOK
#include<stdio.h>
int max_of_array(int *, int);
int min_of_array(int *, int);
#define N 400//入力するデータの数は400以下
int main()
{
int g[N],pp,i;
printf("データの数を入力せよ>>");
scanf("%d",&pp);
printf("データを1つずつ入力せよ\n");
for(i=0;i<pp;i++){scanf("%d",&g[i]);}
printf("最大値:%d\n", max_of_array(g, pp));
printf("最小値:%d\n", min_of_array(g, pp));
return 0;
}
//最小値を求める
int min_of_array(int *m, int n)
{
if(n==1){return m[0];}
else{return (m[0] < min_of_array(m+1, n-1)) ? m[0] : min_of_array(m+1, n-1);}
}
//最大値を求める
int max_of_array(int *m, int n)
{
if(n==1){return m[0];}
else{return (m[0] > max_of_array(m+1, n-1)) ? m[0] : max_of_array(m+1, n-1);}
}
上記コードを実行する。
C:\>0515.exe
データの数を入力せよ>>5
データを1つずつ入力せよ
32
53
24
-90
53
最大値:53
最小値:-90
この結果は正しい。