C言語

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

解説:

  • Student型の配列を宣言し、リテラルで初期化しています。
  • ループを使って構造体配列の全要素を操作します。

2.2 フローチャートによる操作の解説

以下のフローチャートは、構造体配列の初期化とデータ表示の流れを示しています:

構造体配列操作のフローチャート
  1. 構造体を定義。
  2. 構造体配列を宣言し、初期化。
  3. ループで各構造体メンバーにアクセスし、表示。

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. 練習問題

以下の課題に挑戦して、構造体配列の操作に慣れてください。

  1. 本の情報(タイトル、著者、価格)を管理する構造体配列を定義し、データを表示してください。
  2. 車の情報(メーカー、モデル、価格)を管理する構造体配列を使い、価格が最も高い車を表示してください。
  3. 構造体配列を使って、全商品の合計価格を計算してください。

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

解説:構造体配列をループで操作し、価格の比較を行っています。

6. まとめ

構造体配列は、多数の同種データを効率的に管理するための強力な手段です。次回は、動的配列と構造体の組み合わせについて学びます。