N 個の数値の中から最大の数値を見つける

CCBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、ユーザーが入力した数値の集合の中から最大の数を見つける C プログラムの書き方を学びます。これは、いくつかの重要な概念を教える基本的なプログラミング演習です。

  • ユーザー入力の取得
  • ループの使用
  • 比較の実行
  • 繰り返し処理を通じた最大値の追跡

実装するアルゴリズムは簡単です。ユーザーに入力したい数値の個数を尋ね、それぞれの入力数値を繰り返し処理します。各数値を処理する際に、それまでに見つけた現在の最大数と比較し、必要に応じて「最大」変数を更新します。

この実験の終わりまでに、任意の数の入力を処理し、その中の最大値を確実に特定できるプログラムを作成することができるようになります。

プログラムファイルの作成

まず、プログラム用の新しい C ファイルを作成しましょう。WebIDE では、プロジェクトディレクトリに main.c という名前のファイルを作成します。

  1. ターミナルパネルでプロジェクトディレクトリに移動します。

    cd ~/project
  2. 次に、WebIDE で左側のエクスプローラーパネルの「New File」ボタンをクリックするか、エクスプローラーパネル内を右クリックして「New File」を選択します。

  3. ファイル名を main.c として、Enter キーを押します。

  4. 新しく作成したファイルに、C プログラムの基本構造を追加しましょう。

    #include <stdio.h>
    
    int main() {
        // We will add our code here
    
        return 0;
    }
  5. Ctrl+S を押すか、メニューから「File > Save」を選択してファイルを保存します。

この構造には以下が含まれています。

  • printf()scanf() などの関数に必要な標準入出力ライブラリを取り込む #include <stdio.h> ディレクティブ
  • すべての C プログラムのエントリポイントである main() 関数
  • プログラムが正常に実行されたことを示す return 0;

stdio.h ヘッダーファイルは入出力操作のための関数を提供します。main() 関数はプログラムの実行が始まる場所で、return 0; はオペレーティングシステムに対してプログラムがエラーなく終了したことを通知します。

ユーザー入力の処理

次に、プログラムをユーザーと対話できるように設定する必要があります。以下のことを行う必要があります。

  1. データを格納する変数を宣言する
  2. ユーザーに要素の数を入力させる
  3. 最初の数値を受け取るプロセスを設定する

main.c のコードを更新しましょう。

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    return 0;
}

追加した部分を理解しましょう。

  1. 変数の宣言

    • int n:ユーザーが入力したい数値の個数を格納する整数型変数
    • float big:見つけた最大の数値を格納する浮動小数点数型変数
  2. 要素数のユーザー入力

    • printf() を使用して、要素の数を尋ねるプロンプトを表示します。
    • scanf("%d", &n) を使用して、ユーザーから整数を読み取り、n に格納します。
    • n の前の & は「アドレス演算子」で、scanf() に入力値を格納する場所を指示します。
  3. 入力の検証

    • ユーザーが正の数を入力したかどうかを確認します。
    • そうでない場合、エラーメッセージを表示し、戻りコード 1(エラーを示す)でプログラムを終了します。
  4. 最初の数値の入力

    • ユーザーに最初の数値を入力するように促します。
    • この最初の数値を big に格納します。この時点では、これが唯一の(したがって最大の)数値です。

このコードを実行すると、要素の数と最初の要素の入力を求められますが、まだその情報を使った処理は行われません。次のステップでは、すべての数値を処理して最大の数値を見つけるロジックを追加します。

最大の数値を見つける

ここで、プログラムの核心ロジック、つまり入力された数値の中から最大の数値を見つける処理を実装します。for ループを使用して以下のことを行います。

  1. 残りの数値(2 番目から n 番目まで)を繰り返し処理する
  2. 各数値を現在の最大値と比較する
  3. より大きい数値を見つけた場合、最大値を更新する

main.c ファイルを以下のコードで更新します。

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

追加した新しいコードを理解しましょう。

  1. For ループ

    • 最初の要素はすでに処理しているため、i = 2 から開始します。
    • n 個の要素を処理するまで続けます。
    • 各反復で i を 1 ずつ増やします。
  2. 各数値の処理

    • 各入力数値を格納するために新しい変数 current を宣言します。
    • ユーザーに現在の要素の入力を促します。
    • scanf() を使用して入力を読み取ります。
  3. 最大値の検索

    • 現在の入力 current を現在の最大値 big と比較します。
    • current が大きい場合、big をこの新しい最大値に更新します。
    • そうでない場合、big を変更せずに次の入力に進みます。
  4. 結果の表示

    • すべての入力を処理した後、見つけた最大の数値を表示します。
    • %.2f 書式指定子は浮動小数点数を小数点以下 2 桁で表示します。

この実装は、シーケンス内の最大値を見つけるための一般的なパターンに従っています。

  1. 最初の値で最大値を初期化する
  2. 残りの値を繰り返し処理する
  3. より大きい値を見つけたときに最大値を更新する
  4. 最後に、変数にはシーケンス内の最大値が格納されている

プログラムのコンパイルとテスト

これで完全な C プログラムを書き終えたので、コンパイルして実行し、正しく動作するかどうかを確認する必要があります。

  1. プログラムをコンパイルするには、ターミナルで以下のコマンドを実行します。

    gcc ~/project/main.c -o ~/project/main

    このコマンドは、GNU C コンパイラ (gcc) を呼び出して、ソースファイル main.c をコンパイルし、main という名前の実行可能ファイルを作成します。-o フラグは出力ファイル名を指定します。

  2. コードにエラーがなければ、コマンドは何も出力せずに実行されます。これは、プログラムが正常にコンパイルされたことを意味します。

  3. エラーメッセージが表示された場合は、何が問題になっているかを理解するために注意深く読んでください。一般的なエラーには以下のようなものがあります。

    • セミコロン (;) が欠けている
    • ブレース ({}) の対応が正しくない
    • 変数名または型が間違っている
    • include 文が欠けているまたは間違っている
  4. プログラムが正常にコンパイルされたら、以下のコマンドで実行します。

    ~/project/main
  5. さまざまな入力でプログラムをテストしてください。以下はテストケースの例です。

    入力:

    Enter the number of elements you wish to find the greatest element of: 5
    Enter 5 numbers:
    Enter element 1: 12.5
    Enter element 2: 9.7
    Enter element 3: 25.8
    Enter element 4: 15.2
    Enter element 5: 4.9

    期待される出力:

    The largest of the 5 numbers is 25.80
  6. 負の数を使った別のテストケースも試してみましょう。

    入力:

    Enter the number of elements you wish to find the greatest element of: 3
    Enter 3 numbers:
    Enter element 1: -10.5
    Enter element 2: -2.3
    Enter element 3: -15.7

    期待される出力:

    The largest of the 3 numbers is -2.30
  7. また、1 つの数値でもテストしてみましょう。

    入力:

    Enter the number of elements you wish to find the greatest element of: 1
    Enter 1 numbers:
    Enter element 1: 42.0

    期待される出力:

    The largest of the 1 numbers is 42.00

これらのテストケースに対してプログラムが期待される出力を生成した場合、おめでとうございます!N 個の入力数値の中から最大の数値を見つけるプログラムを正常に実装しました。

このコンパイルとテストのプロセスは、ソフトウェア開発の重要な部分です。これにより、コードが期待どおりに動作することを検証でき、バグや問題を特定して修正するのに役立ちます。

まとめ

この実験では、ユーザーが提供した数値のセットの中から最大の数値を見つける C プログラムを成功裏に実装しました。達成したことを振り返ってみましょう。

  1. 問題の理解:数値の集合を処理し、どれが最大かを判断する必要があることを特定しました。
  2. プログラムの構造:適切な include 文、変数宣言、論理的な流れを持つ構造化された C プログラムを作成しました。
  3. ユーザー入力の処理:ユーザーからの入力を取得するコードを実装し、適切なデータが入力されるように検証を行いました。
  4. アルゴリズムの実装:最大値を見つけるために、シンプルで効果的なアルゴリズムを使用しました。
    • 最初の値で初期化する
    • それ以降の各値を現在の最大値と比較する
    • より大きい値が見つかったら最大値を更新する
  5. テストと実行:プログラムをコンパイルし、さまざまな入力でテストして、正しく動作することを検証しました。

この実験は、多くの場面で役立つ基本的なプログラミング概念を示しています。

  • 逐次実行
  • 条件文
  • ループ構造
  • 変数の追跡
  • 入出力操作

完成したコード

この実験で開発した完全なコードは以下の通りです。

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

このプログラムはいくつかの方法で拡張することができます。

  • 最大値と最小値の両方を見つける
  • すべての数値の平均を計算する
  • 数値を昇順または降順に並べる
  • 配列のようなより複雑なデータ構造を扱う

この実験が C 言語のプログラミングの基礎とアルゴリズム的思考の理解に役立ったことを願っています。これらの概念は、より高度なプログラミングトピックや問題解決技術の基礎を形成します。