画像(logo)

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

広告

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

広告

↓2016年02月29日発売↓

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

目次へ戻る

最大(最少)値

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

普通に最大値

#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(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(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□

広告

↓2017年06月16日発売↓

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

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

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

新品価格
¥2,700から
(2017/5/1 13:15時点)