はじめに
このプロジェクトでは、バブルソートアルゴリズムを使ってプログラミングコースのリストを整理する方法を学びます。コースは辞書順にソートされ、学んだプログラミング言語を簡単に見てまとめることができます。
👀 プレビュー
$ gcc courses.c -o courses
$./courses
ASP
ASP.NET
BASIC
C
C#
C++
COBOL
JAVA
PASCAL
PHP
🎯 タスク
このプロジェクトでは、以下を学びます。
- 配列の長さを正しく計算する方法
- ソート関数のパラメータ型を変更する方法
- ソートアルゴリズムの比較と交換ロジックを正しくする方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- バブルソートアルゴリズムを使ってプログラミングコースのリストを整理する
- 適切な配列長の計算と関数パラメータ型の重要性を理解する
- ソートアルゴリズムで正しい比較と交換ロジックを適用する
- 手順に従って既存のコードを修正して目的の結果を達成する能力を示す
配列長の計算を正しくする
このステップでは、courses 配列の長さを正しく計算する方法を学びます。
/home/labex/project/ディレクトリにあるcourses.cファイルを開きます。次のコード行を探します。
int n = strlen(courses);この行は、
strlen関数を使ってcourses配列の長さを計算していますが、これは間違っています。strlen関数は文字列の長さを計算するために使われるもので、配列の長さを計算するためには使えません。上記の行を次のものに置き換えます。
int n = sizeof(courses) / sizeof(courses[0]);この行は、
sizeof演算子を使ってcourses配列の全体のサイズを計算し、その後、単一要素のサイズで割ることで配列内の要素数を取得します。
ソート関数のパラメータ型を変更する
このステップでは、sort 関数のパラメータ型を変更する方法を学びます。
courses.cファイルの中で、sort関数の定義を探します。void sort(char p[], int n)パラメータ型を
char p[]からchar *p[]に変更します。更新された関数の定義は次のようになります。void sort(char *p[], int n)この変更は必要です。なぜなら、我々が扱っているのは文字列の配列(ポインタの配列)であり、単一の文字列ではないからです。
比較と交換のロジックを正しくする
このステップでは、sort 関数内の比較と交換の論理を正しくする方法を学びます。
sort関数の中で、次のコードを探します。if (k!= j) { tmp = p[k]; p[k] = p[i]; p[i] = tmp; }条件
if (k!= j)をif (k!= i)に置き換えます。更新されたコードは次のようになります。if (k!= i) { tmp = p[k]; p[k] = p[i]; p[i] = tmp; }この変更は、現在の反復処理(
iでインデックス付けされています)で最小の要素が見つかったかどうかを確認するために必要です。
これらの 3 つのステップを完了したら、courses.c ファイルはコンパイルと実行の準備が整います。次のステップに進むことができます。
sort関数の中で、// TODO:セクションを次のように完成させます。{ if (strcmp(p[j], p[k]) < 0) { k = j; } }次のコマンドを実行します。
gcc courses.c -o courses
./courses
- プログラムが期待通りの出力を生成することを確認します。
ASP
ASP.NET
BASIC
C
C#
C++
COBOL
JAVA
PASCAL
PHP
まとめ
おめでとうございます!このプロジェクトを完了しました。実力を向上させるために、LabEx でさらに多くの実験を行って練習してください。



