C言語でmax()関数を使いこなす5つのステップ

C言語でのmax()関数の使い方を詳細に解説する図表C言語
この記事は約12分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

あなたがこの記事を読んでいるということは、C言語の一部であるmax()関数について学びたいと考えていることでしょう。

プログラミングは新しいスキルを学ぶことで、あなたのコーディング能力と創造性を大きく広げることができます。

この記事を読むことで、C言語のmax()関数の使い方を一から学ぶことができ、それを応用する自信がつくはずです。

それでは、一緒にmax()関数を学び、プログラミングの世界を一歩深く探ってみましょう。

●C言語とは

C言語は、1972年にAT&Tのベル研究所で開発されたプログラミング言語です。

その機能と柔軟性から、さまざまなソフトウェアの開発に広く使用されています。

C言語は、直感的な構文と強力な機能を持つことで、初心者から経験豊富なプログラマーまで幅広く利用されています。

C言語の魅力は、その高いパフォーマンスと直接的なハードウェアアクセス能力です。

これにより、オペレーティングシステムや組み込みシステムなど、システムレベルのプログラミングに頻繁に使用されます。

また、ポータブル性が高いため、異なるハードウェアやオペレーティングシステムでもコードの再コンパイルが可能です。

しかし、初心者にとってはC言語の学習は少々難しいかもしれません。

なぜなら、メモリ管理やポインタ操作など、直接的なハードウェアアクセスが必要となるためです。

しかし、これらの知識はプログラミングの理解を深めるためには欠かせない要素です。

●max()関数の基本

○max()関数とは

C言語には様々な組み込み関数が存在しますが、その中でも特に便利なものがmax()関数です。

しかし、C言語の標準ライブラリにはmax()関数が存在しないため、通常は自分で定義する必要があります。

max()関数は2つの数値を引数に取り、そのうちの最大値を返す役割を果たします。

これは、プログラム内で複数の値から最大値を見つける必要がある場合に非常に役立ちます。

○max()関数の基本的な使い方

ここでは基本的なmax()関数の作成方法について説明します。

下記のコードは、2つの整数を引数として取り、それらの最大値を返す関数を表しています。

#include <stdio.h>

int max(int num1, int num2) {
    // num1とnum2を比較し、大きい方の値を返す
    if (num1 > num2) {
        return num1;
    } else {
        return num2;
    }
}

int main() {
    int a = 5;
    int b = 10;

    printf("%d\n", max(a, b));

    return 0;
}

このコードでは、max()関数を使って整数aとbの最大値を計算しています。

if文を用いて2つの数値を比較し、大きい方の値を返します。main関数内でmax(a, b)を呼び出し、結果を表示します。

上記のコードを実行すると、「10」が出力されます。なぜなら、それが変数aとbの中で最大値だからです。

●max()関数の詳細な使い方

max()関数の基本的な使い方を理解した後、さらに詳細な使用例を紹介します。

○サンプルコード1:2つの数値の比較

まず、下記のコードは2つの整数を比較し、その中で最大の数を返すという動作をします。

#include<stdio.h>
#define max(a,b) ((a) > (b) ? (a) : (b))

int main() {
    int num1 = 3;
    int num2 = 5;
    int max_num;

    max_num = max(num1, num2);
    printf("%d\n", max_num); //結果を出力

    return 0;
}

このコードでは、マクロ関数maxを定義して、2つの引数を比較します。

aがbより大きい場合はaを、そうでない場合はbを返します。

そして、main関数内で2つの整数num1とnum2を定義し、これらをmax関数に渡します。

そして、その結果をmax_numに格納し、printf関数で出力します。

実行すると、「5」と表示されます。

つまり、num1とnum2の中で最大の数値が出力されることがわかります。

○サンプルコード2:配列の中の最大値を見つける

次に、配列の中から最大値を見つけるコードを見てみましょう。

#include<stdio.h>
#define max(a,b) ((a) > (b) ? (a) : (b))

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int max_num = array[0]; //初期値を配列の最初の要素に設定

    for(int i = 1; i < 5; i++){
        max_num = max(max_num, array[i]);
    }

    printf("%d\n", max_num); //最大値を出力

    return 0;
}

このコードでは、5つの整数が格納された配列を定義します。

その後、配列の最初の要素を初期の最大値として設定します。

次に、配列の2番目の要素から最後までをループし、各要素と現在の最大値とを比較します。

その比較結果をmax_numに更新し、ループが終了したらその最大値を出力します。

このコードを実行すると、「5」と表示されます。

つまり、配列内の最大値が正しく見つけ出されていることがわかります。

このように、max()関数は2つの値だけでなく、配列などの複数の値から最大値を探し出すのにも役立ちます。

●max()関数の応用例

基本的な使い方と詳細な使い方を学んだところで、さらに具体的な応用例を2つ紹介します。

○サンプルコード3:ユーザー入力に対する最大値の計算

このコードはユーザーが入力した任意の数値の中から最大値を見つけます。

ユーザーがいくつの数値を入力するか事前には分からない場合や、入力する数値の数が変動する可能性がある場合に適用できます。

#include<stdio.h>
#define max(a,b) ((a) > (b) ? (a) : (b))

int main() {
    int num, max_num = 0; //最大値の初期値を0とする

    while(1){
        printf("数値を入力して下さい(終了は-1): ");
        scanf("%d", &num);

        if(num == -1) break; //ユーザーが-1を入力したらループを終了

        max_num = max(max_num, num);
    }

    printf("最大値は %d です\n", max_num); //最大値を出力

    return 0;
}

このコードでは、ユーザーからの入力を無限ループ内で受け付けています。

ユーザーが数値を入力するたびに、その数値と現在の最大値を比較し、大きい方を新たな最大値として更新します。

ユーザーが-1を入力した場合にループを終了し、最終的な最大値を出力します。

このコードを実行すると、「数値を入力して下さい(終了は-1):」と表示され、ユーザーが数値を入力できます。

ユーザーが-1を入力すると、「最大値は 〇〇 です」と表示され、ユーザーが入力した数値の中で最大の数値が表示されます。

○サンプルコード4:ファイル内の最大値を計算

次のコードは、テキストファイルに保存された一連の数値の中から最大値を見つけます。

大量のデータを取り扱う際や、データが外部ファイルに保存されている場合に役立ちます。

#include<stdio.h>
#define max(a,b) ((a) > (b) ? (a) : (b))

int main() {
    FILE *fp;
    int num, max_num = 0;

    fp = fopen("numbers.txt", "r"); //numbers.txtファイルを開く
    if(fp == NULL) {
        printf("ファイルが開けません\n");
        return 1;
    }

    while(fscanf(fp, "%d", &num) != EOF) {
        max_num = max(max_num, num);
    }

    printf("最大値は %d です\n", max_num); //最大値を出力

    fclose(fp); //ファイルを閉じる

    return 0;
}

このコードでは、まずnumbers.txtというファイルを開きます。

ファイルが存在しない場合やエラーが発生した場合には、エラーメッセージを表示してプログラムを終了します。

ファイルから数値を読み込み、その数値と現在の最大値を比較し、大きい方を新たな最大値として更新します。

これをファイルの終わりまで続け、最終的な最大値を出力します。最後にファイルを閉じています。

このコードを実行すると、「最大値は 〇〇 です」と表示され、ファイル内の数値の中で最大の数値が表示されます。

このように、max()関数は様々なシチュエーションで利用でき、コードの効率化に大いに貢献します。

●max()関数の注意点と対処法

max()関数の使用にあたってはいくつか注意点が存在します。

これらの注意点を理解し、対処法を身につけることで、より効率的にプログラミングを行うことが可能になります。

まず最初に注意したいのは、max()関数が本来存在しないC言語の標準ライブラリです。

この関数は一般的には他のプログラミング言語、たとえばPythonやJavaなどに存在します。

そのため、C言語を使用して最大値を見つけたい場合、条件演算子を用いて自分で定義する必要があります。

これを理解したうえで、max()関数のような動作をするコードを書く際の一つの注意点としては、引数として渡す値が数値でなければならないという点です。

文字列や構造体など、数値以外のものを引数として渡すことはできません。

もし数値以外のものの中から「最大」を見つけたい場合、その目的に合わせた比較関数を自分で書く必要があります。

また、自分で定義するmax()関数で扱う値が浮動小数点数である場合、計算機の誤差に注意する必要があります。

特に、比較の結果が完全に同じであるかを判断する際には、誤差が結果に影響を及ぼす可能性があるためです。

それでは、これらの注意点を踏まえた上で、max()関数のような動作をする関数を自作し、それを用いて最大値を見つける例を見てみましょう。

#include <stdio.h>

// max関数の定義
int max(int a, int b) {
    // 二つの値を比較し、大きい方を返す
    return (a > b) ? a : b;
}

int main() {
    int x = 10;
    int y = 20;

    // max関数を使用して最大値を見つける
    int maximum = max(x, y);

    printf("最大値は %d です\n", maximum);

    return 0;
}

このコードでは、まずmax関数を自分で定義しています。

この関数は二つの整数を引数に取り、そのうち大きい方の値を返すようになっています。

次に、main関数の中でmax関数を使用して二つの値の最大値を求め、その結果を表示しています。

このコードを実行すると、「最大値は 20 です」と表示されることでしょう。

●max()関数のカスタマイズ方法

先ほどまで、C言語のmax()関数の基本的な使い方と応用例について見てきました。

しかしここからは少し一歩進んだ話題、それがmax()関数のカスタマイズについて説明します。

最初に言っておくべきことは、C言語自体にmax()関数は存在しません。

しかし、それを模倣するような動きをする関数は、しっかりと作成可能です。

これが今回紹介する自作のmax()関数となります。

○サンプルコード5:自作のmax()関数

まずは自作のmax()関数を作成するためのサンプルコードを見てみましょう。

#include<stdio.h>

int max(int a, int b) {
    if (a > b) {
        return a;
    } else {
        return b;
    }
}

int main(void) {
    int num1 = 10, num2 = 20;
    printf("%d\n", max(num1, num2));
    return 0;
}

このコードでは自分でmax()関数を定義し、それを使用しています。

自作のmax()関数は引数として2つの整数を受け取り、その中で大きい値を返します。

関数内部で、もし第一引数の方が大きいならそれを、そうでなければ第二引数を返すという処理を行っています。

このコードを実行すると、「20」と出力されます。

なぜなら、引数として与えた10と20の中で、大きい方の値が返されるからです。

これにより、max()関数と同じような機能を持つ関数を自分で作成することができました。

自分で関数を作成することで、より柔軟なプログラミングが可能になります。

ただし、注意点としてはこの自作のmax()関数はint型の値にしか対応していません。

float型やdouble型の値を比較するには別の方法が必要となります。

その際は、引数の型を変更したり、関数の内部で型変換を行う等の手法が必要となるでしょう。

まとめ

この記事では、C言語のmax()関数の詳細な使い方や注意点、そしてカスタマイズ方法をご紹介しました。

この知識をもとに、さらに多様なコードを書いていくことで、より自由度の高いプログラミングが可能となるでしょう。

C言語を学ぶうえで、基本的な関数を理解することは非常に重要です。し

かし、それだけでなく、それを応用したりカスタマイズしたりする技術も身につけることで、より深い理解と技術力を身につけることができます。

本記事が、皆さんのプログラミング学習の一助となれば幸いです。

引き続き学習に取り組み、新たなスキルを身につけていきましょう。