【C言語】第6章第4回:構造体配列とその活用方法
構造体配列は、同じ構造体型のデータを複数管理するのに役立ちます。この章では、構造体配列の基本的な使い方とその応用方法について学びます。
1. 構造体配列とは?
1.1 構造体配列の概要
構造体配列は、同じ構造体型のデータを連続したメモリ領域で管理するデータ構造です。例えば、学生の情報を複数管理する場合、構造体配列を使うことで効率的に管理できます。
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, 76.0},
{"Charlie", 19, 92.3}
};
// データの表示
for (int i = 0; i < 3; i++) {
printf("Student %d:\n", i + 1);
printf(" Name: %s\n", students[i].name);
printf(" Age: %d\n", students[i].age);
printf(" Grade: %.2f\n\n", students[i].grade);
}
return 0;
}
2.2 フローチャートでの説明
#include <stdio.h>
// 学生情報を表す構造体
typedef struct {
char name[50];
int age;
float grade;
} Student;
int main() {
// 構造体配列の定義と初期化
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 76.0},
{"Charlie", 19, 92.3}
};
// データの表示
for (int i = 0; i < 3; i++) {
printf("Student %d:\n", i + 1);
printf(" Name: %s\n", students[i].name);
printf(" Age: %d\n", students[i].age);
printf(" Grade: %.2f\n\n", students[i].grade);
}
return 0;
}
2.2 フローチャートでの説明
以下は、上記プログラムの動作フローチャートです。
- 構造体配列を定義して初期化。
- ループを使用して配列の各要素を順にアクセス。
- 各学生のデータを表示。
3. 構造体配列の操作例
3.1 成績の平均を計算する例
#include <stdio.h>
// 構造体の定義(省略)
int main() {
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 76.0},
{"Charlie", 19, 92.3}
};
// 平均計算
float totalGrade = 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.2 フローチャートでの説明
#include <stdio.h>
// 構造体の定義(省略)
int main() {
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 76.0},
{"Charlie", 19, 92.3}
};
// 平均計算
float totalGrade = 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.2 フローチャートでの説明
次のフローチャートは、成績の平均を計算するプログラムの流れを示します。
- 構造体配列を初期化。
- ループで各学生の成績を合計。
- 平均値を計算して表示。
4. 練習問題
以下の課題に挑戦して、構造体配列の活用を深めましょう。
- 複数の本のタイトル、著者、価格を構造体配列で管理し、最も高価な本を表示するプログラムを作成してください。
- 構造体配列を使用して、複数の従業員情報(名前、給与)を管理し、給与の合計を計算するプログラムを作成してください。
5. 練習問題の解答と解説
問1の解答
#include <stdio.h>
// 本を表す構造体
typedef struct {
char title[50];
char author[50];
float price;
} Book;
int main() {
// 構造体配列の初期化
Book books[3] = {
{"C Programming", "Author A", 29.99},
{"Data Structures", "Author B", 39.99},
{"Algorithms", "Author C", 49.99}
};
// 最も高価な本を探す
Book *mostExpensive = &books[0];
for (int i = 1; i < 3; i++) {
if (books[i].price > mostExpensive->price) {
mostExpensive = &books[i];
}
}
printf("Most Expensive Book:\n");
printf(" Title: %s\n", mostExpensive->title);
printf(" Author: %s\n", mostExpensive->author);
printf(" Price: %.2f\n", mostExpensive->price);
return 0;
}
#include <stdio.h>
// 本を表す構造体
typedef struct {
char title[50];
char author[50];
float price;
} Book;
int main() {
// 構造体配列の初期化
Book books[3] = {
{"C Programming", "Author A", 29.99},
{"Data Structures", "Author B", 39.99},
{"Algorithms", "Author C", 49.99}
};
// 最も高価な本を探す
Book *mostExpensive = &books[0];
for (int i = 1; i < 3; i++) {
if (books[i].price > mostExpensive->price) {
mostExpensive = &books[i];
}
}
printf("Most Expensive Book:\n");
printf(" Title: %s\n", mostExpensive->title);
printf(" Author: %s\n", mostExpensive->author);
printf(" Price: %.2f\n", mostExpensive->price);
return 0;
}
解説:構造体配列をループで操作して最も高価な本を特定し、表示しています。
6. まとめ
構造体配列を使用することで、同じデータ型の複数のデータを効率的に管理できます。次回は、構造体ポインタと動的メモリ確保について学びます。