C言語

【C言語】第6章第9回:構造体を活用したデータ管理例

構造体を使うことで、関連するデータをひとまとめにして管理することができます。この章では、構造体を使ったデータ管理の実践例を学びます。

0. 記事の概要

この記事を読むメリット

  • データの管理能力向上:構造体を使った効率的なデータ管理方法を学べます。
  • 実践的なスキル習得:複数データの一括処理や操作が可能になります。
  • 応用力アップ:実際のプロジェクトで役立つ設計力が身につきます。

この記事で学べること

  • 構造体を使ったデータ管理の基本
  • 構造体配列と操作例
  • 実践的な応用例とその解説

活用のイメージ

例えば、学生情報や商品の在庫を管理する際、構造体を使うことでデータの一括管理が容易になります。本記事を通じて、効率的なデータ管理技術を身につけましょう。

1. 構造体を使ったデータ管理の基本

1.1 単一データの管理例

#include <stdio.h>

// 商品情報を表す構造体
typedef struct {
    char name[50];
    float price;
    int stock;
} Product;

int main() {
    // 商品データの初期化
    Product product = {"Laptop", 150000.0, 5};

    // データの表示
    printf("Product: %s\n", product.name);
    printf("Price: %.2f\n", product.price);
    printf("Stock: %d\n", product.stock);

    return 0;
}
動作説明
  1. 構造体の定義:Product構造体を定義し、商品名、価格、在庫数をメンバーとして設定します。
  2. 構造体変数の初期化:Product型の変数productを初期化します。
  3. データの表示:printfを使って構造体メンバーのデータを出力します。

2. 構造体配列の活用

2.1 複数データの一括管理

#include <stdio.h>

// 商品情報を表す構造体
typedef struct {
    char name[50];
    float price;
    int stock;
} Product;

int main() {
    // 商品の配列を初期化
    Product products[3] = {
        {"Laptop", 150000.0, 5},
        {"Tablet", 50000.0, 10},
        {"Smartphone", 80000.0, 7}
    };

    // データの表示
    for (int i = 0; i < 3; i++) {
        printf("Product: %s, Price: %.2f, Stock: %d\n",
               products[i].name, products[i].price, products[i].stock);
    }

    return 0;
}
動作説明
  1. 構造体の定義:商品情報を管理するProduct構造体を定義します。
  2. 構造体配列の初期化:Product型の配列productsを初期化します。
  3. データの表示:forループを使い、各商品のデータを出力します。

3. 練習問題

以下の課題に挑戦して、構造体を活用したデータ管理を理解しましょう。

  1. 従業員情報(名前、役職、給与)を管理するプログラムを作成してください。
  2. 商品情報を配列で管理し、在庫数が少ない商品を特定するプログラムを作成してください。
  3. 学生情報(名前、成績)を管理し、最高得点の学生を出力するプログラムを作成してください。

4. 練習問題の解答と解説

問3の解答

#include <stdio.h>

// 学生情報を表す構造体
typedef struct {
    char name[50];
    int grade;
} Student;

int main() {
    // 学生情報を配列で管理
    Student students[3] = {
        {"Alice", 85},
        {"Bob", 92},
        {"Charlie", 78}
    };

    // 最高得点の学生を特定
    int maxIndex = 0;
    for (int i = 1; i < 3; i++) {
        if (students[i].grade > students[maxIndex].grade) {
            maxIndex = i;
        }
    }

    // 結果の表示
    printf("Top Student: %s\n", students[maxIndex].name);
    printf("Grade: %d\n", students[maxIndex].grade);

    return 0;
}
動作説明
  1. 構造体の定義:学生名と成績を管理するStudent構造体を定義します。
  2. 構造体配列の初期化:3人の学生情報をStudent型の配列に格納します。
  3. 最高得点の学生を特定:
    • forループを使用して、配列内で最も高い成績を持つ学生を見つけます。
    • 最大成績を持つ学生のインデックスをmaxIndexに格納します。
  4. 結果の表示:最高得点を持つ学生の名前と成績を出力します。

5. まとめ

構造体を活用することで、複雑なデータを効率的に管理できます。次回は、構造体を用いた大規模なデータ操作について学びます。