画像(logo)

HOME/[C言語]サンプルプログラム集 目次/最大(最少)値

広告

[C言語 サンプルプログラム集]
最大(最少)値

広告

↓発売日:2018年09月22日↓

たった1日で基本が身に付く! C言語 超入門

新品価格
¥2,225から
(2018/10/8 23:10時点)

目次へ戻る

最大(最少)値

今回は配列など複数の要素の最大(最少)値を出します。

普通に最大値

#include <stdio.h>

int main(){
	int ary[5] = {1,25,3,8,10};
	int max = 0;
	int i = 0;

	max = ary[0];
	for(i=1;i<5;i++){
		if(max < ary[i]){
			max = ary[i];
		}
	}

	for(i=0;i<5;i++){
		printf("%d ",ary[i]);
	}	
	printf("\n");
	printf("max = %d\n",max);

	return 0;
}

■実行結果■

画像(cs_3_1)

配列「ary」の全ての要素の最大値を普通に出します。

まずは最大値を格納する為の変数を用意します。

int max = 0;	

そして調べたい配列などの最初の要素をこの変数に保存します。

max = ary[0];

後は配列の残りの要素と比べていき、もしこの要素より大きい要素が現れた場合はその要素に入れ替え、これを最後まで行います。

for(i=1;i<5;i++){
	if(max < ary[i]){
		max = ary[i];
	}
}

これで最大値の算出は完了です。

最小値の場合も等号が変わるだけで同じ事を行います。

int min = 0;
min = ary[0];
for(i=1;i<5;i++){
	if(min > ary[i]){
		min = ary[i];
	}
}

これで変数「min」に最小値が格納されます。

最大値関数

#include <stdio.h>

int my_max(int* ,int);

int main(){
	int ary[5] = {1,25,3,8,10};
	int max = 0;
	int i;

	max = my_max(ary,sizeof(ary) / sizeof(int));

	for(i=0;i<5;i++){
		printf("%d ",ary[i]);
	}	
	printf("\n");
	printf("max = %d",max);

	return 0;
}


int my_max(int* ary,int size){
	int max = 0;
	int i;

	max = *ary;
	for(i=1;i<size;i++){
		if(max < *(ary + i)){
			max = *(ary + i);
		}
	}

	return max;
}		

■実行結果■

画像(cs_3_2)

最大値を出す関数を作ります。

int my_max(int* ary,int size){
	int max = 0;
	int i;

	max = *ary;
	for(i=1;i<size;i++){
		if(max < *(ary + i)){
			max = *(ary + i);
		}
	}

	return max;
}

ここで必要な情報は最大値を出す配列とそのサイズなので

int my_max(int* ary,int size)

引数はこちらになります。

あとは同じように最大値を入れるための変数を用意して渡された配列の最初の要素を保存、残りの要素と比べていくだけです。

配列が引数の場合はその先頭アドレスが渡されるのでそのまま

max = *ary;

「*ary」こちらが先頭の要素になります。

配列などを渡している時はバッファオーバーしないように配列サイズの監視も重要です。

広告

構造体の最大値

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

struct STUDENT{
	char name[128];
	int score;
};

struct STUDENT set_data(const char* , int);
int my_max2(struct STUDENT* ,int);

int main(){
	struct STUDENT student[5];
	int max = 0;
	int i;

	student[0] = set_data("tanaka",385);
	student[1] = set_data("suzuki",212);
	student[2] = set_data("satou",445);
	student[3] = set_data("saitou",500);
	student[4] = set_data("watanabe",293);

	max = my_max2(student,sizeof(student) / sizeof(struct STUDENT));

	for(i=0;i<5;i++){
		printf("name:%s score:%d\n",student[i].name,student[i].score);
	}

	printf("max = %d\n",max);

	return 0;
}

struct STUDENT set_data(const char* name, int score){
	struct STUDENT tmp;
	strcpy(tmp.name,name);
	tmp.score = score;
	return tmp;
}

int my_max2(struct STUDENT* ary,int size){
	int max = 0;
	int i;
	
	max = ary->score;
	for(i=1;i<size;i++){
		if(max < (ary + i)->score){
			max = (ary + i)->score;
		}
	}

	return max;
}

■実行結果■

画像(cs_3_3)

より実用的なプログラムにおいては構造体の特定の要素の最大値を出す事もあるかもしれません。

struct STUDENT{
	char name[128];
	int score;
};

生徒のテストの得点の最大値のような感じでテストの得点にあたるこちらの構造体のメンバ「score」の最大値を出します。

int my_max2(struct STUDENT* ary,int size){
	int max = 0;
	int i;
	
	max = ary->score;
	for(i=1;i<size;i++){
		if(max < (ary + i)->score){
			max = (ary + i)->score;
		}
	}

	return max;
}

今回は構造体の配列を渡すので引数は

int my_max2(struct STUDENT* ary,int size){
}

構造体のポインタとその配列のサイズになりますね。

後は同じように先頭の要素を保存、他の要素と比べていくだけです。

max = ary->score;
for(i=1;i<size;i++){
	if(max < (ary + i)->score){
		max = (ary + i)->score;
	}
}

この時に構造体の各メンバにアクセスするには

(ary + i)->score

ポインタで受け取っているのでアロー演算子になる事に注意です!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓発売日:2016年02月29日↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2018/10/8 23:25時点)

↓発売日:2018年06月22日↓

スッキリわかるC言語入門

新品価格
¥2,916から
(2018/10/8 23:15時点)

↓発売日:2018年03月09日↓

C言語本格入門 ~基礎知識からコンピュータの本質まで

新品価格
¥3,218から
(2018/10/8 23:16時点)

↓発売日:2017年06月14日↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2018/10/8 23:17時点)

↓発売日:2018年05月21日↓

作って身につく C言語入門

新品価格
¥2,462から
(2018/10/8 23:18時点)

↓発売日:2017年12月07日↓

新・標準プログラマーズライブラリ C言語 ポインタ完全制覇

新品価格
¥2,678から
(2018/10/8 23:19時点)

↓発売日:2017年02月08日↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2018/10/8 23:20時点)

↓発売日:2017年09月26日↓

かんたん C言語 [改訂2版] (プログラミングの教科書)

新品価格
¥2,916から
(2018/10/8 23:22時点)