はじめに
この実験では、C プログラミングでデータセットの中央値を計算する方法を学びます。この実験では、数値の配列を読み込み、ソートし、中央の要素(または中央の 2 つの要素の平均)を見つけ、中央値を出力する、といった手順をカバーします。段階的な手順は、配列の読み込み、ソート、出力のための関数を含め、これらのタスクを実装するプロセスを C プログラミングを使ってガイドします。この実験は、C 言語で統計分析手法を理解し適用するための実践的なアプローチを提供します。
この実験では、C プログラミングでデータセットの中央値を計算する方法を学びます。この実験では、数値の配列を読み込み、ソートし、中央の要素(または中央の 2 つの要素の平均)を見つけ、中央値を出力する、といった手順をカバーします。段階的な手順は、配列の読み込み、ソート、出力のための関数を含め、これらのタスクを実装するプロセスを C プログラミングを使ってガイドします。この実験は、C 言語で統計分析手法を理解し適用するための実践的なアプローチを提供します。
このステップでは、中央値の計算の準備として、数値の配列を読み込み、それをソートする方法を学びます。このタスクは C プログラミングを使って実行します。
まず、配列の読み込みとソートを実装するための C ファイルを作成しましょう。
cd ~/project
nano median_calculator.c
次に、ファイルに以下のコードを追加します。
#include <stdio.h>
#define MAX_SIZE 100
// 配列要素を読み込む関数
void readArray(int arr[], int *n) {
printf("要素数を入力してください (最大 %d): ", MAX_SIZE);
scanf("%d", n);
printf("%d個の要素を入力してください:\n", *n);
for (int i = 0; i < *n; i++) {
scanf("%d", &arr[i]);
}
}
// バブルソートを使って配列をソートする関数
void sortArray(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 要素を交換
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 配列を出力する関数
void printArray(int arr[], int n) {
printf("ソート済み配列:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
return 0;
}
プログラムをコンパイルして実行します。
gcc median_calculator.c -o median_calculator
./median_calculator
実行例:
要素数を入力してください (最大 100): 5
5個の要素を入力してください:
42
15
7
23
11
ソート済み配列: 7 11 15 23 42
コードを分解してみましょう。
readArray() 関数は、ユーザーが入力した配列要素を読み込みます。sortArray() 関数はバブルソートアルゴリズムを使用して、要素を昇順に並べ替えます。printArray() 関数はソート済みの配列を表示します。main() 関数はこれらの関数を連携させます。バブルソートアルゴリズムは O(n²) の時間計算量を持ち、理解しやすいですが、大規模なデータセットに対しては効率的なアルゴリズムではありません。
このステップでは、ソート済みの配列の中央の要素、または中央の 2 つの要素の平均を求めることで、中央値を計算するプログラムを拡張します。
既存のファイルを開いてコードを修正します。
cd ~/project
nano median_calculator.c
中央値を計算する新しい関数を追加してコードを更新します。
#include <stdio.h>
#define MAX_SIZE 100
// 前の関数(readArray、sortArray、printArray)は同じです
// 中央値を計算する新しい関数
float calculateMedian(int arr[], int n) {
// 要素数が奇数の場合は、中央の要素を返します
if (n % 2 != 0) {
return arr[n / 2];
}
// 要素数が偶数の場合は、中央の 2 つの要素の平均を返します
int mid1 = arr[(n / 2) - 1];
int mid2 = arr[n / 2];
return (mid1 + mid2) / 2.0;
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
printArray(arr, n);
// 中央値を計算して出力
float median = calculateMedian(arr, n);
printf("中央値:%.2f\n", median);
return 0;
}
更新されたプログラムをコンパイルして実行します。
gcc median_calculator.c -o median_calculator
./median_calculator
要素数が奇数の例:
要素数を入力してください (最大 100): 5
5個の要素を入力してください:
42
15
7
23
11
ソート済み配列: 7 11 15 23 42
中央値: 15.00
要素数が偶数の例:
要素数を入力してください (最大 100): 6
6個の要素を入力してください:
42
15
7
23
11
8
ソート済み配列: 7 8 11 15 23 42
中央値: 13.00
中央値計算に関する重要な点:
calculateMedian() 関数は、どちらの場合も処理します。
この最終ステップでは、中央値計算プログラムを拡張して、より詳細な出力を行い、中央値の表示方法を複数示します。
既存のファイルを開いて最終的な修正を行います。
cd ~/project
nano median_calculator.c
改良された出力形式でコードを更新します。
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 前の関数(readArray、sortArray、printArray、calculateMedian)は同じです
void printDetailedMedianInfo(int arr[], int n, float median) {
printf("\n--- 中央値計算詳細 ---\n");
printf("要素数:%d\n", n);
printf("配列要素:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n\n中央値計算:\n");
if (n % 2 != 0) {
printf("要素数は奇数\n");
printf("中央のインデックス:%d\n", n / 2);
printf("中央の要素:%d\n", arr[n / 2]);
} else {
printf("要素数は偶数\n");
printf("中央の 2 つのインデックス:%d と %d\n", (n / 2) - 1, n / 2);
printf("中央の 2 つの要素:%d と %d\n", arr[(n / 2) - 1], arr[n / 2]);
}
printf("\n最終的な中央値:%.2f\n", median);
}
int main() {
int arr[MAX_SIZE];
int n;
readArray(arr, &n);
sortArray(arr, n);
float median = calculateMedian(arr, n);
// ソート済み配列を出力
printArray(arr, n);
// 詳細な中央値情報を表示
printDetailedMedianInfo(arr, n, median);
return 0;
}
更新されたプログラムをコンパイルして実行します。
gcc median_calculator.c -o median_calculator
./median_calculator
要素数が奇数の例:
要素数を入力してください (最大 100): 5
5個の要素を入力してください:
42
15
7
23
11
ソート済み配列: 7 11 15 23 42
--- 中央値計算詳細 ---
要素数: 5
配列要素: 7 11 15 23 42
中央値計算:
要素数は奇数
中央のインデックス: 2
中央の要素: 15
最終的な中央値: 15.00
要素数が偶数の例:
要素数を入力してください (最大 100): 6
6個の要素を入力してください:
42
15
7
23
11
8
ソート済み配列: 7 8 11 15 23 42
--- 中央値計算詳細 ---
要素数: 6
配列要素: 7 8 11 15 23 42
中央値計算:
要素数は偶数
中央の2つのインデックス: 2 と 3
中央の2つの要素: 11 と 15
最終的な中央値: 13.00
このステップで改善された点:
printDetailedMedianInfo()を追加しました。この実験では、数値の配列を読み込み、バブルソートアルゴリズムを使用してソートし、中央値の計算に必要なデータの準備を行いました。ソート済みの配列はコンソールに出力され、最初のステップが正常に完了したことを示します。バブルソートアルゴリズムは理解しやすいですが、時間計算量は O(n²) であり、大規模なデータセットに対しては必ずしも効率的ではありません。次のステップでは、ソート済み配列の中央値を求めることに焦点を当てます。
次のステップでは、配列のサイズに応じて、中央の要素または中央の 2 つの要素の平均を特定します。このステップにより、中央値が正確に計算され、ユーザーに提示されます。