C言語

【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 フローチャートでの説明

以下は、上記プログラムの動作フローチャートです。

  • 構造体配列を定義して初期化。
  • ループを使用して配列の各要素を順にアクセス。
  • 各学生のデータを表示。

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 フローチャートでの説明

次のフローチャートは、成績の平均を計算するプログラムの流れを示します。

  • 構造体配列を初期化。
  • ループで各学生の成績を合計。
  • 平均値を計算して表示。

4. 練習問題

以下の課題に挑戦して、構造体配列の活用を深めましょう。

  1. 複数の本のタイトル、著者、価格を構造体配列で管理し、最も高価な本を表示するプログラムを作成してください。
  2. 構造体配列を使用して、複数の従業員情報(名前、給与)を管理し、給与の合計を計算するプログラムを作成してください。

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;
}

解説:構造体配列をループで操作して最も高価な本を特定し、表示しています。

6. まとめ

構造体配列を使用することで、同じデータ型の複数のデータを効率的に管理できます。次回は、構造体ポインタと動的メモリ確保について学びます。