【C言語】第6章第4回:構造体配列とその活用
構造体配列を使用すると、同じ形式のデータを効率的に管理できます。この章では、構造体配列の基本から応用までを学びます。
1. 構造体配列の基本
1.1 構造体配列の定義と初期化
#include <stdio.h>
// 学生情報を表す構造体
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// 構造体配列の初期化
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 90.0}
};
// 配列内のデータを表示
for (int i = 0; i < 3; i++) {
printf("Name: %s, Age: %d, Grade: %.2f\n", students[i].name, students[i].age, students[i].grade);
}
return 0;
}
動作説明
- 構造体定義:学籍情報を格納する構造体
Student
を定義しています。 - 構造体配列の初期化:
- 構造体配列
students
を宣言し、3つの学生データを格納します。 - 各データ(名前、年齢、成績)をリテラル形式で指定しています。
- 構造体配列
- データの表示:
for
ループを使い、配列内の各学生データを出力します。- ドット演算子(
.
)を使って構造体メンバーにアクセスしています。
2. 構造体配列の操作
2.1 成績の平均を計算するプログラム
#include <stdio.h>
// 学生情報を表す構造体
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// 構造体配列の初期化
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 90.0}
};
// 成績の平均を計算
float totalGrade = 0.0;
for (int i = 0; i < 3; i++) {
totalGrade += students[i].grade;
}
float averageGrade = totalGrade / 3;
// 平均成績を表示
printf("Average Grade: %.2f\n", averageGrade);
return 0;
}
動作説明
- 構造体配列の初期化:前の例と同じ方法で3人の学生データを初期化します。
- 合計成績の計算:
for
ループを使用して各学生の成績を合計します。totalGrade
に各学生の成績を足していきます。
- 平均成績の計算:
- 合計成績を学生数で割り、平均成績を計算します。
- 結果の表示:計算された平均成績を出力します。
3. 練習問題
以下の課題に挑戦して、構造体配列の活用方法を学びましょう。
- 5人の学生情報(名前、年齢、成績)を構造体配列で管理し、最高成績を持つ学生を表示するプログラムを作成してください。
- 従業員情報(名前、部署、給与)を構造体配列で管理し、部署ごとの平均給与を計算してください。
- 商品の情報(名前、価格、数量)を構造体配列で管理し、在庫の総価値を計算するプログラムを作成してください。
4. 練習問題の解答と解説
問1の解答
#include <stdio.h>
// 学生情報を表す構造体
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// 構造体配列の初期化
Student students[5] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 90.0},
{"Daisy", 21, 85.0},
{"Eve", 23, 92.0}
};
// 最高成績を持つ学生を探す
int maxIndex = 0;
for (int i = 1; i < 5; i++) {
if (students[i].grade > students[maxIndex].grade) {
maxIndex = i;
}
}
// 結果の表示
printf("Top Student: %s\n", students[maxIndex].name);
printf("Grade: %.2f\n", students[maxIndex].grade);
return 0;
}
動作説明
- 構造体配列の初期化:5人の学生データをリテラルで初期化します。
- 最高成績を持つ学生を探す:
maxIndex
に最高成績のインデックスを格納します。for
ループを使い、全学生の成績を比較します。
- 結果の表示:
- 最高成績を持つ学生の名前と成績を出力します。
5. まとめ
構造体配列を使用することで、大量のデータを効率的に管理できます。次回は、構造体とポインタの組み合わせについて学びます。