[C言語] 3つの整数の大小を比較するプログラムの書き方

C言語で3つの整数の大小を比較するプログラムを書くには、まず3つの整数を入力として受け取ります。

その後、条件分岐を使用してそれらの整数を比較します。

具体的には、if文を使って最初の整数と他の2つの整数を比較し、次に2番目の整数と3番目の整数を比較します。

これにより、3つの整数の中で最大または最小の値を特定できます。

比較の結果を表示するために、printf関数を使用して結果を出力します。

これにより、ユーザーは3つの整数の大小関係を確認できます。

この記事でわかること
  • 3つの整数を比較する基本的なプログラムの作成方法
  • コードの可読性を高めるための具体的な手法
  • 冗長なコードを削減し、効率的なプログラムを作成する方法
  • 配列を用いた整数の比較や最大値と最小値を同時に求める応用例
  • エラーハンドリングを強化することでプログラムの堅牢性を向上させる方法

目次から探す

3つの整数の大小比較プログラム

3つの整数の大小を比較するプログラムを作成することは、C言語の基本的な制御構造を理解するための良い練習になります。

このセクションでは、整数の入力から比較、そして結果の出力までの流れを解説します。

3つの整数を入力する

まず、ユーザーから3つの整数を入力してもらう必要があります。

scanf関数を使用して、標準入力から整数を取得します。

#include <stdio.h>
int main() {
    int num1, num2, num3;
    // ユーザーに整数の入力を促す
    printf("3つの整数を入力してください: ");
    scanf("%d %d %d", &num1, &num2, &num3);
    return 0;
}

このコードでは、printf関数でユーザーに入力を促し、scanf関数で3つの整数を取得しています。

3つの整数を比較するロジック

次に、3つの整数を比較するロジックを実装します。

if文を使って、各整数を比較し、最大値と最小値を見つけます。

int max, min;
// 最大値を見つける
if (num1 >= num2 && num1 >= num3) {
    max = num1;
} else if (num2 >= num1 && num2 >= num3) {
    max = num2;
} else {
    max = num3;
}
// 最小値を見つける
if (num1 <= num2 && num1 <= num3) {
    min = num1;
} else if (num2 <= num1 && num2 <= num3) {
    min = num2;
} else {
    min = num3;
}

このロジックでは、if文を使って3つの整数を比較し、最大値と最小値をそれぞれmaxminに格納しています。

比較結果の出力

最後に、比較結果をユーザーに出力します。

printf関数を使用して、最大値と最小値を表示します。

// 結果を出力
printf("最大値: %d\n", max);
printf("最小値: %d\n", min);

このコードは、最大値と最小値をそれぞれ表示します。

完成したプログラム

以上の要素を組み合わせて、完成したプログラムは以下のようになります。

#include <stdio.h>
int main() {
    int num1, num2, num3;
    int max, min;
    // ユーザーに整数の入力を促す
    printf("3つの整数を入力してください: ");
    scanf("%d %d %d", &num1, &num2, &num3);
    // 最大値を見つける
    if (num1 >= num2 && num1 >= num3) {
        max = num1;
    } else if (num2 >= num1 && num2 >= num3) {
        max = num2;
    } else {
        max = num3;
    }
    // 最小値を見つける
    if (num1 <= num2 && num1 <= num3) {
        min = num1;
    } else if (num2 <= num1 && num2 <= num3) {
        min = num2;
    } else {
        min = num3;
    }
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}
3つの整数を入力してください: 5 8 3
最大値: 8
最小値: 3

このプログラムは、ユーザーが入力した3つの整数の中から最大値と最小値を正しく判定し、出力します。

if文を使った基本的な比較ロジックを理解するのに役立ちます。

プログラムの最適化と改善

C言語でプログラムを作成する際、コードの可読性や効率性を高めることは非常に重要です。

このセクションでは、3つの整数の大小比較プログラムを最適化し、改善する方法について解説します。

コードの可読性を高める

コードの可読性を高めることは、他の開発者がコードを理解しやすくするために重要です。

以下のポイントに注意して、コードをより読みやすくしましょう。

  • 変数名の改善: 変数名はその役割を明確に示すものにします。

例えば、num1, num2, num3よりもfirstNumber, secondNumber, thirdNumberの方が意味が伝わりやすいです。

  • コメントの追加: 各セクションにコメントを追加して、コードの意図を説明します。
#include <stdio.h>
int main() {
    int firstNumber, secondNumber, thirdNumber;
    int max, min;
    // ユーザーに整数の入力を促す
    printf("3つの整数を入力してください: ");
    scanf("%d %d %d", &firstNumber, &secondNumber, &thirdNumber);
    // 最大値を見つける
    if (firstNumber >= secondNumber && firstNumber >= thirdNumber) {
        max = firstNumber;
    } else if (secondNumber >= firstNumber && secondNumber >= thirdNumber) {
        max = secondNumber;
    } else {
        max = thirdNumber;
    }
    // 最小値を見つける
    if (firstNumber <= secondNumber && firstNumber <= thirdNumber) {
        min = firstNumber;
    } else if (secondNumber <= firstNumber && secondNumber <= thirdNumber) {
        min = secondNumber;
    } else {
        min = thirdNumber;
    }
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

冗長なコードの削減

冗長なコードを削減することで、プログラムの効率を向上させることができます。

例えば、最大値と最小値を求めるロジックを関数化することで、コードの重複を避けることができます。

#include <stdio.h>
// 最大値を求める関数
int findMax(int a, int b, int c) {
    if (a >= b && a >= c) return a;
    if (b >= a && b >= c) return b;
    return c;
}
// 最小値を求める関数
int findMin(int a, int b, int c) {
    if (a <= b && a <= c) return a;
    if (b <= a && b <= c) return b;
    return c;
}
int main() {
    int firstNumber, secondNumber, thirdNumber;
    int max, min;
    // ユーザーに整数の入力を促す
    printf("3つの整数を入力してください: ");
    scanf("%d %d %d", &firstNumber, &secondNumber, &thirdNumber);
    // 最大値と最小値を求める
    max = findMax(firstNumber, secondNumber, thirdNumber);
    min = findMin(firstNumber, secondNumber, thirdNumber);
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

エラーハンドリングの強化

プログラムの堅牢性を高めるためには、エラーハンドリングを強化することが重要です。

scanf関数の戻り値をチェックして、入力が正しく行われたかを確認します。

#include <stdio.h>
int main() {
    int firstNumber, secondNumber, thirdNumber;
    int max, min;
    // ユーザーに整数の入力を促す
    printf("3つの整数を入力してください: ");
    if (scanf("%d %d %d", &firstNumber, &secondNumber, &thirdNumber) != 3) {
        printf("入力エラー: 整数を3つ入力してください。\n");
        return 1; // エラーコードを返す
    }
    // 最大値と最小値を求める
    max = findMax(firstNumber, secondNumber, thirdNumber);
    min = findMin(firstNumber, secondNumber, thirdNumber);
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

このように、入力が正しく行われなかった場合にエラーメッセージを表示し、プログラムを終了することで、予期しない動作を防ぐことができます。

応用例

3つの整数の大小比較プログラムを基に、さらに応用したプログラムを作成することができます。

このセクションでは、4つ以上の整数を比較する方法や、配列を使った比較、最大値と最小値を同時に求める方法について解説します。

4つ以上の整数を比較する方法

4つ以上の整数を比較する場合、if文を増やすこともできますが、より効率的な方法としてループを使用することが考えられます。

以下は、4つの整数を比較する例です。

#include <stdio.h>
int main() {
    int numbers[4];
    int max, min;
    // ユーザーに整数の入力を促す
    printf("4つの整数を入力してください: ");
    for (int i = 0; i < 4; i++) {
        scanf("%d", &numbers[i]);
    }
    max = min = numbers[0];
    // 最大値と最小値を見つける
    for (int i = 1; i < 4; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
        if (numbers[i] < min) {
            min = numbers[i];
        }
    }
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

このプログラムでは、配列を使って4つの整数を格納し、ループを使って最大値と最小値を求めています。

配列を使った整数の比較

配列を使うことで、任意の数の整数を簡単に比較することができます。

以下は、配列を使って整数を比較する一般的な方法です。

#include <stdio.h>
#define SIZE 5
int main() {
    int numbers[SIZE];
    int max, min;
    // ユーザーに整数の入力を促す
    printf("%dつの整数を入力してください: ", SIZE);
    for (int i = 0; i < SIZE; i++) {
        scanf("%d", &numbers[i]);
    }
    max = min = numbers[0];
    // 最大値と最小値を見つける
    for (int i = 1; i < SIZE; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
        if (numbers[i] < min) {
            min = numbers[i];
        }
    }
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

このプログラムでは、配列のサイズを定義しておき、任意の数の整数を比較できるようにしています。

最大値と最小値を同時に求める

最大値と最小値を同時に求めることで、コードの効率をさらに高めることができます。

以下の例では、1回のループで最大値と最小値を同時に求めています。

#include <stdio.h>
#define SIZE 5
int main() {
    int numbers[SIZE];
    int max, min;
    // ユーザーに整数の入力を促す
    printf("%dつの整数を入力してください: ", SIZE);
    for (int i = 0; i < SIZE; i++) {
        scanf("%d", &numbers[i]);
    }
    max = min = numbers[0];
    // 最大値と最小値を同時に見つける
    for (int i = 1; i < SIZE; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        } else if (numbers[i] < min) {
            min = numbers[i];
        }
    }
    // 結果を出力
    printf("最大値: %d\n", max);
    printf("最小値: %d\n", min);
    return 0;
}

このプログラムでは、else ifを使用して、最大値と最小値を同時に求めることで、比較回数を減らし、効率的に処理を行っています。

よくある質問

なぜif文を使うのですか?

if文は、条件に基づいてプログラムの流れを制御するための基本的な構造です。

3つの整数の大小を比較する際に、if文を使うことで、各整数が他の整数とどのように比較されるかを明確に示すことができます。

if文を使うことで、条件が満たされた場合に特定の処理を実行し、満たされない場合には別の処理を行うことが可能です。

これにより、プログラムのロジックを直感的に理解しやすくなります。

他の比較方法はありますか?

はい、他にも比較方法があります。

例えば、三項演算子を使って簡潔に比較を行うことができます。

例:max = (a > b) ? a : b;

また、配列を使用して、ループを使って比較を行う方法もあります。

これにより、任意の数の整数を効率的に比較することが可能です。

さらに、標準ライブラリの関数を利用することで、より複雑な比較を簡単に行うこともできます。

入力が整数でない場合はどうなりますか?

入力が整数でない場合、scanf関数は入力エラーを検出し、入力されたデータを正しく読み取ることができません。

この場合、プログラムは予期しない動作をする可能性があります。

入力エラーを防ぐためには、scanfの戻り値をチェックし、入力が正しく行われたかを確認することが重要です。

例えば、if (scanf("%d", &number) != 1)のようにして、入力が整数でない場合にエラーメッセージを表示し、プログラムを終了することができます。

これにより、プログラムの堅牢性を高めることができます。

まとめ

この記事では、C言語を用いて3つの整数の大小を比較するプログラムの作成方法を詳しく解説し、コードの可読性向上や効率化、エラーハンドリングの強化についても触れました。

さらに、応用例として4つ以上の整数の比較や配列を使った方法、最大値と最小値を同時に求める手法を紹介しました。

これらの知識を活かして、より複雑なプログラムに挑戦し、実践的なスキルを磨いてみてください。

  • URLをコピーしました!
目次から探す