【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, 90.0}
};
// データの表示
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", students[i].grade);
}
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, 90.0}
};
// データの表示
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", students[i].grade);
}
return 0;
}
フローチャート:
以下のフローチャートで、このプログラムの流れを視覚化します。
3. 構造体配列の操作
3.1 データの検索
構造体配列から特定の条件に一致するデータを検索する方法を紹介します。
#include <stdio.h>
#include <string.h>
// 構造体の定義(省略)
int main() {
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 90.0}
};
// 名前で検索
char searchName[50];
printf("Enter name to search: ");
scanf("%s", searchName);
for (int i = 0; i < 3; i++) {
if (strcmp(students[i].name, searchName) == 0) {
printf("Found: %s, Age: %d, Grade: %.2f\n",
students[i].name, students[i].age, students[i].grade);
return 0;
}
}
printf("Student not found.\n");
return 0;
}
フローチャート:
検索アルゴリズムの流れを以下に示します。
4. 構造体配列の応用
4.1 データのソート
構造体配列をソートする方法を紹介します。
#include <stdio.h>
#include <string.h>
// 構造体の定義(省略)
int main() {
Student students[3] = {
{"Alice", 20, 88.5},
{"Bob", 22, 75.0},
{"Charlie", 19, 90.0}
};
// バブルソート
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2 - i; j++) {
if (students[j].grade < students[j + 1].grade) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// ソート後のデータの表示
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", students[i].grade);
}
return 0;
}
フローチャート:
ソートアルゴリズムのフローを以下に示します。
5. 練習問題
以下の課題に挑戦して、構造体配列の操作に慣れましょう。
- 商品の情報(名前、価格、在庫数)を構造体配列で管理し、価格の昇順でソートしてください。
- 特定の商品の名前でデータを検索し、見つかった商品の情報を表示してください。
- 構造体配列を使って、全商品の合計在庫数と総価格を計算してください。
6. 練習問題の解答と解説
問3の解答
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
float price;
int stock;
} Product;
int main() {
Product products[3] = {
{"Laptop", 750.0, 10},
{"Tablet", 500.0, 15},
{"Phone", 300.0, 20}
};
int totalStock = 0;
float totalPrice = 0.0;
for (int i = 0; i < 3; i++) {
totalStock += products[i].stock;
totalPrice += products[i].price * products[i].stock;
}
printf("Total stock: %d\n", totalStock);
printf("Total price: %.2f\n", totalPrice);
return 0;
}
7. まとめ
#include <stdio.h>
// 構造体の定義
typedef struct {
char name[50];
float price;
int stock;
} Product;
int main() {
Product products[3] = {
{"Laptop", 750.0, 10},
{"Tablet", 500.0, 15},
{"Phone", 300.0, 20}
};
int totalStock = 0;
float totalPrice = 0.0;
for (int i = 0; i < 3; i++) {
totalStock += products[i].stock;
totalPrice += products[i].price * products[i].stock;
}
printf("Total stock: %d\n", totalStock);
printf("Total price: %.2f\n", totalPrice);
return 0;
}
7. まとめ
構造体配列を使うことで、大量の関連データを効率的に管理できます。次回は、構造体とポインタの組み合わせについて学びます。