【C言語】第6章第4回:構造体配列とその活用
構造体配列は、同じ種類のデータを効率的に管理するための便利な機能です。この章では、構造体配列の定義と操作方法、実用的な活用例について学びます。
1. 構造体配列とは?
1.1 概要
構造体配列は、複数の構造体を一括で管理するための配列です。同じ型の構造体を複数個扱う場合に便利です。
1.2 使用例
学生データを管理する場合、個々の学生を構造体として定義し、それを配列でまとめて管理することで効率的に操作できます。
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, 92.0}
};
// データの表示
for (int i = 0; i < 3; i++) {
printf("Name: %s\n", students[i].name);
printf("Age: %d\n", students[i].age);
printf("Grade: %.2f\n", students[i].grade);
printf("\n");
}
return 0;
}
#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, 92.0}
};
// データの表示
for (int i = 0; i < 3; i++) {
printf("Name: %s\n", students[i].name);
printf("Age: %d\n", students[i].age);
printf("Grade: %.2f\n", students[i].grade);
printf("\n");
}
return 0;
}
解説:
Student
型の配列を宣言し、リテラルで初期化しています。- ループを使って構造体配列の全要素を操作します。
2.2 フローチャートによる操作の解説
以下のフローチャートは、構造体配列の初期化とデータ表示の流れを示しています:

- 構造体を定義。
- 構造体配列を宣言し、初期化。
- ループで各構造体メンバーにアクセスし、表示。
3. 構造体配列の活用例
3.1 学生データの成績集計
構造体配列を使って、学生の平均成績を計算します。
#include <stdio.h>
// 構造体の定義(省略)
int main() {
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 92.0}
};
// 成績の合計と平均を計算
float total = 0.0;
for (int i = 0; i < 3; i++) {
total += students[i].grade;
}
float average = total / 3;
printf("Average Grade: %.2f\n", average);
return 0;
}
解説:配列全体をループで操作し、全員の成績を集計して平均を計算します。
4. 練習問題
以下の課題に挑戦して、構造体配列の操作に慣れてください。
- 本の情報(タイトル、著者、価格)を管理する構造体配列を定義し、データを表示してください。
- 車の情報(メーカー、モデル、価格)を管理する構造体配列を使い、価格が最も高い車を表示してください。
- 構造体配列を使って、全商品の合計価格を計算してください。
5. 練習問題の解答と解説
問2の解答
#include <stdio.h>
// 構造体の定義
typedef struct {
char make[50];
char model[50];
float price;
} Car;
int main() {
Car cars[3] = {
{"Toyota", "Camry", 30000.0},
{"Honda", "Civic", 25000.0},
{"Ford", "Focus", 22000.0}
};
// 価格が最も高い車を探す
Car mostExpensive = cars[0];
for (int i = 1; i < 3; i++) {
if (cars[i].price > mostExpensive.price) {
mostExpensive = cars[i];
}
}
printf("Most Expensive Car: %s %s, Price: $%.2f\n", mostExpensive.make, mostExpensive.model, mostExpensive.price);
return 0;
}
#include <stdio.h>
// 構造体の定義
typedef struct {
char make[50];
char model[50];
float price;
} Car;
int main() {
Car cars[3] = {
{"Toyota", "Camry", 30000.0},
{"Honda", "Civic", 25000.0},
{"Ford", "Focus", 22000.0}
};
// 価格が最も高い車を探す
Car mostExpensive = cars[0];
for (int i = 1; i < 3; i++) {
if (cars[i].price > mostExpensive.price) {
mostExpensive = cars[i];
}
}
printf("Most Expensive Car: %s %s, Price: $%.2f\n", mostExpensive.make, mostExpensive.model, mostExpensive.price);
return 0;
}
解説:構造体配列をループで操作し、価格の比較を行っています。
6. まとめ
構造体配列は、多数の同種データを効率的に管理するための強力な手段です。次回は、動的配列と構造体の組み合わせについて学びます。