はじめに
この実験では、C プログラミングでデータセットの範囲を見つける方法を学びます。この実験は、以下の手順で構成されています:1) 配列を読み込み、ソートする、2) 最大値と最小値の差を求めて範囲を計算する、3) 範囲を出力する。この実験では、C を用いてデータセットの統計的性質を分析するプロセスを理解するのに役立つ、段階的なガイドとサンプルコードを提供します。
配列の読み込みとソート
このステップでは、範囲の計算の準備として、数値の配列を読み込み、ソートする方法を学びます。データセットの入力と整理には、シンプルなアプローチを使用します。
まず、C プログラムを作成して配列を読み込み、ソートしてみましょう。
#include <stdio.h>
#define MAX_SIZE 100
// 二つの要素を入れ替える関数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// バブルソート関数を使用して配列をソートする
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
int main() {
int numbers[MAX_SIZE];
int n;
// 要素数を読み込む
printf("要素数を入力してください (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 配列要素を入力
printf("%d 個の整数を入力してください:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 配列をソートする
sortArray(numbers, n);
// ソートされた配列を出力する
printf("ソートされた配列:");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
主な構成要素を分解してみましょう。
- 最大 100 個の要素を持つ配列サイズを定義します。
swap()関数は、配列の二つの要素を入れ替えるのに役立ちます。sortArray()関数はバブルソートを使用して、要素を昇順に並べ替えます。main()関数では、以下の処理を行います。- 要素数を読み込む
- 配列要素を入力する
- 配列をソートする
- ソートされた配列を出力する
コンパイルと実行の例:
gcc -o array_sort array_sort.c
./array_sort
実行例:
要素数を入力してください (最大 100): 5
5 個の整数を入力してください:
42 15 7 23 11
ソートされた配列:7 11 15 23 42
範囲 = 最大値 - 最小値
このステップでは、ソートされた配列内の最大値と最小値の差を求めることで、データセットの範囲を計算する方法を学びます。
前のプログラムを修正して範囲を計算してみましょう。
#include <stdio.h>
#define MAX_SIZE 100
// 二つの要素を入れ替える関数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// バブルソート関数を使用して配列をソートする
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 範囲を計算する関数
int calculateRange(int arr[], int size) {
// 配列が空の場合、0 を返す
if (size == 0) return 0;
// 範囲は、ソートされた配列の最後の要素 (最大値) から最初の要素 (最小値) を引いた値です
return arr[size - 1] - arr[0];
}
int main() {
int numbers[MAX_SIZE];
int n;
// 要素数を読み込む
printf("要素数を入力してください (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 配列要素を入力
printf("%d 個の整数を入力してください:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 配列をソートする
sortArray(numbers, n);
// 範囲を計算して出力する
int range = calculateRange(numbers, n);
printf("最小値:%d\n", numbers[0]);
printf("最大値:%d\n", numbers[n - 1]);
printf("範囲:%d\n", range);
return 0;
}
このステップで変更した主な点は以下のとおりです。
- 範囲を計算する
calculateRange()関数を追加しました。 - 範囲は、ソートされた配列の最後の要素 (最大値) から最初の要素 (最小値) を引くことで計算されます。
- 最小値、最大値、および範囲の値を表示する出力文を追加しました。
コンパイルと実行の例:
gcc -o range_calculator range_calculator.c
./range_calculator
実行例:
要素数を入力してください (最大 100): 5
5 個の整数を入力してください:
42 15 7 23 11
最小値: 7
最大値: 42
範囲: 35
範囲は、ソートされた配列の最大値から最小値を引いた値で、データセットの広がりを表します。
範囲の表示
この最終ステップでは、ユーザーフレンドリーな方法で範囲計算結果をフォーマットして表示し、出力に統計的なコンテキストを追加する方法を学びます。
範囲計算プログラムの改良版を作成しましょう。
#include <stdio.h>
#define MAX_SIZE 100
// 二つの要素を入れ替える関数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// バブルソート関数を使用して配列をソートする
void sortArray(int arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 範囲を計算する関数
int calculateRange(int arr[], int size) {
// 配列が空の場合、0 を返す
if (size == 0) return 0;
// 範囲は、最後の要素 (最大値) から最初の要素 (最小値) を引いた値です
return arr[size - 1] - arr[0];
}
// 詳細な範囲情報を表示する関数
void printRangeAnalysis(int arr[], int size, int range) {
printf("\n--- 統計的な範囲分析 ---\n");
printf("データセットサイズ:%d\n", size);
printf("最小値:%d\n", arr[0]);
printf("最大値:%d\n", arr[size - 1]);
printf("範囲:%d\n", range);
// 追加の洞察
printf("\n解釈:\n");
printf("範囲は、データセット内の値の広がりを表します。\n");
printf("範囲が大きいほど、データにばらつきがあることを示します。\n");
}
int main() {
int numbers[MAX_SIZE];
int n;
// 要素数を読み込む
printf("要素数を入力してください (最大 %d): ", MAX_SIZE);
scanf("%d", &n);
// 配列要素を入力
printf("%d 個の整数を入力してください:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 配列をソートする
sortArray(numbers, n);
// 範囲を計算する
int range = calculateRange(numbers, n);
// 詳細な範囲分析を表示する
printRangeAnalysis(numbers, n, range);
return 0;
}
このステップで改善した主な点は次のとおりです。
- 包括的な出力を提供する
printRangeAnalysis()関数を追加しました。 - 範囲とデータのばらつきに関する追加のコンテキストを含めました。
- 出力をより情報豊かで読みやすいようにフォーマットしました。
コンパイルと実行の例:
gcc -o range_analysis range_analysis.c
./range_analysis
実行例:
要素数を入力してください (最大 100): 6
6 個の整数を入力してください:
10 25 7 42 15 33
--- 統計的な範囲分析 ---
データセットサイズ: 6
最小値: 7
最大値: 42
範囲: 35
解釈:
範囲は、データセット内の値の広がりを表します。
範囲が大きいほど、データにばらつきがあることを示します。
このプログラムは、データセットの範囲をより包括的に表示し、計算の統計的意義をユーザーが理解するのに役立ちます。
まとめ
この実験では、最初に単純なバブルソートアルゴリズムを使用して数値の配列を読み取り、ソートする方法を学びました。このステップは、範囲を計算するためのデータセットの準備を行いました。次に、ソートされた配列内の最大値から最小値を引くことで、データセットの範囲を見つける方法を学びます。最後に、計算された範囲を出力します。完了したステップから得られる主な学習点は、配列の読み取りとソート、およびデータセットの範囲の概念です。



