バブルソートを使ったコースのソート

CCBeginner
今すぐ練習

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

はじめに

このプロジェクトでは、バブルソートアルゴリズムを使ってプログラミングコースのリストを整理する方法を学びます。コースは辞書順にソートされ、学んだプログラミング言語を簡単に見てまとめることができます。

👀 プレビュー

$ gcc courses.c -o courses
$./courses
ASP
ASP.NET
BASIC
C
C#
C++
COBOL
JAVA
PASCAL
PHP

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 配列の長さを正しく計算する方法
  • ソート関数のパラメータ型を変更する方法
  • ソートアルゴリズムの比較と交換ロジックを正しくする方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • バブルソートアルゴリズムを使ってプログラミングコースのリストを整理する
  • 適切な配列長の計算と関数パラメータ型の重要性を理解する
  • ソートアルゴリズムで正しい比較と交換ロジックを適用する
  • 手順に従って既存のコードを修正して目的の結果を達成する能力を示す

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c/BasicsGroup -.-> c/operators("Operators") c/ControlFlowGroup -.-> c/if_else("If...Else") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/CompoundTypesGroup -.-> c/strings("Strings") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") subgraph Lab Skills c/operators -.-> lab-301503{{"バブルソートを使ったコースのソート"}} c/if_else -.-> lab-301503{{"バブルソートを使ったコースのソート"}} c/arrays -.-> lab-301503{{"バブルソートを使ったコースのソート"}} c/strings -.-> lab-301503{{"バブルソートを使ったコースのソート"}} c/pointers -.-> lab-301503{{"バブルソートを使ったコースのソート"}} c/function_parameters -.-> lab-301503{{"バブルソートを使ったコースのソート"}} end

配列の長さの計算を正しくする

このステップでは、courses 配列の長さを正しく計算する方法を学びます。

  1. /home/labex/project/ ディレクトリにある courses.c ファイルを開きます。

  2. 次のコード行を探します。

    int n = strlen(courses);

    この行は、strlen 関数を使って courses 配列の長さを計算していますが、これは間違っています。strlen 関数は文字列の長さを計算するために使われるもので、配列の長さを計算するためには使えません。

  3. 上記の行を次のものに置き換えます。

    int n = sizeof(courses) / sizeof(courses[0]);

    この行は、sizeof 演算子を使って courses 配列の全体のサイズを計算し、その後、単一要素のサイズで割ることで配列内の要素数を取得します。

ソート関数のパラメータ型を変更する

このステップでは、sort 関数のパラメータ型を変更する方法を学びます。

  1. courses.c ファイルの中で、sort 関数の定義を探します。

    void sort(char p[], int n)
  2. パラメータ型を char p[] から char *p[] に変更します。更新された関数の定義は次のようになります。

    void sort(char *p[], int n)

    この変更は必要です。なぜなら、我々が扱っているのは文字列の配列(ポインタの配列)であり、単一の文字列ではないからです。

比較と交換の論理を正しくする

このステップでは、sort 関数内の比較と交換の論理を正しくする方法を学びます。

  1. sort 関数の中で、次のコードを探します。

    if (k!= j)
    {
        tmp = p[k];
        p[k] = p[i];
        p[i] = tmp;
    }
  2. 条件 if (k!= j)if (k!= i) に置き換えます。更新されたコードは次のようになります。

    if (k!= i)
    {
        tmp = p[k];
        p[k] = p[i];
        p[i] = tmp;
    }

    この変更は、現在の反復処理(i でインデックス付けされています)で最小の要素が見つかったかどうかを確認するために必要です。

これらの 3 つのステップを完了したら、courses.c ファイルはコンパイルと実行の準備が整います。次のステップに進むことができます。

  1. sort 関数の中で、// TODO: セクションを次のように完成させます。

    {
         if (strcmp(p[j], p[k]) < 0)
         {
             k = j;
         }
    }
  2. 次のコマンドを実行します。

gcc courses.c -o courses
./courses
  1. プログラムが期待通りの出力を生成することを確認します。
ASP
ASP.NET
BASIC
C
C#
C++
COBOL
JAVA
PASCAL
PHP
✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。実力を向上させるために、LabEx でさらに多くの実験を行って練習してください。