【C言語】3つの整数から最大値を取得するプログラムの書き方

C言語で3つの整数から最大値を求める方法はとても簡単です。簡単ですが、最大値を求めるための関数は用意されていないため、処理を自作する必要があります。

今回は、C言語で3つの整数から最大値を求めるプログラムの書き方について紹介していきます。

最もシンプルなサンプルコード

関数化も何もしない最もシンプルなコードがこちらです。

#include <stdio.h>
#include<limits.h>
int main() {
	int a = 5;
	int b = 7;
	int c = 3;
	int max = INT_MIN;

	if (a > max) max = a;
	if (b > max) max = b;
	if (c > max) max = c;
	printf("最大値は %d",max);

	return 0;
}

7行目に登場しているINT_MINはint型変数に代入できる最も小さい数字の定数です。limit.hをインクルードすることで使用できます。

max変数にはint型変数に代入できる最小値(INT_MIN)が入っているため、maxよりほかの変数が大きい値でmax変数を上書きし続ければ、最大値を求めることができます。

関数化する場合は以下のようになります。

#include <stdio.h>
#include<limits.h>

int max(int a, int b, int c) {
	int result = INT_MIN;
	if (a > result) result = a;
	if (b > result) result = b;
	if (c > result) result = c;
	return result;
}

int main() {
	int a = 5;
	int b = 7;
	int c = 3;
	int result = max(a, b, c);

	printf("最大値は %d", result);

	return 0;
}

実装するだけならポインタも使わないため、初心者でも勉強に使いやすいプログラムの1つです。

4つ以上の整数から最大値を求める方法

先程の方法は3つの整数から最大値を求めました。ですが、4つ以上、30や40以上もの整数から最大値を求めるとなるとどうなるでしょうか。

力技でやると以下のようなかなり無駄が多いコードになってしまいます。

if (a > result) result = a;
if (b > result) result = b;
if (c > result) result = c;
if (d > result) result = d;
if (e > result) result = e;
if (f > result) result = f;
if (g > result) result = g;
if (h > result) result = h;
if (i > result) result = i;
//以下無限に続く

正直関数化するとしても書いてられません。

このように4つ以上の整数から最大値を求める場合、もっと簡単な方法がありますのでそれぞれ紹介していきます。

配列を使う場合

配列を使う場合、for文によるループ処理が書けるのでかなり簡潔に書くことができます。

#include <stdio.h>
#include<limits.h>

int main() {
	int data[] = { 1,4,8,3,5,9,3,2 };
	int max = INT_MIN;
	for (int i = 0; i < sizeof(data) / sizeof(int); i++) {
		if(data[i] > max) max = data[i];
	}

	printf("最大値は %d", max);

	return 0;
}

関数化しなくてもたったこれだけのコードで最大値を求めることが可能です。もちろん配列なので何百何千と要素があっても問題ありません。

【応用編】配列を使わない場合

配列ではない複数のint型変数から最大値を求めたいときがあるでしょう。

そういう時は可変長引数を使うことで4つ以上の変数・定数から最大値を求めることができます。また、可変長引数を使う場合は関数化が必須です。

#include <stdio.h>
#include<stdarg.h> //可変長引数を扱う際に必須
#include<limits.h>

int max(int len, ...) {
	int result = INT_MIN;
	va_list va;
	va_start(va, len);
	for (int i = 0; i < len; i++) {
		int num = va_arg(va, int);
		if (num > result) result = num;
	}
	va_end(va);
	return result;
}

int main() {
	int a = 3;
	int b = 6;
	int c = 1;
	int d = 7;
	int result = max(4,a,b,c,d);

	printf("最大値は %d", result);

	return 0;
}

可変長引数に関する説明は割愛しますが、配列でない場合でも可変長引数を使えば4つ以上の変数・定数から最大値を求めることが可能です。

ただ可変長引数を使って最大値を求めるプログラムを書くことは滅多に無いので、基本的には配列を使った求め方を覚えておけば問題ありません。

こちらの記事も読まれています

カテゴリー: