C言語

【C言語】第6章第10回:構造体を使った応用プログラム

構造体を活用すると、実際のプロジェクトで役立つ多様なプログラムを作成できます。この章では、構造体を使った応用的なプログラムを学びます。

0. 記事の概要

この記事を読むメリット

  • 実践的なスキル習得:構造体を使った応用プログラムの作成方法を学べます。
  • データ管理の強化:複雑なデータ構造を効果的に操作するスキルを習得できます。
  • 応用力の向上:多様なプログラム設計に対応できる知識が身につきます。

この記事で学べること

  • 構造体を使った簡易データベースの作成
  • 構造体を利用したファイル操作
  • 実践的なプログラム例とその解説

活用のイメージ

例えば、学生の成績を管理するシステムや、商品在庫を管理するプログラムを構造体を用いて構築することで、効率的なデータ操作が可能になります。

1. 構造体を使った簡易データベース

1.1 学生情報を管理するプログラム

#include <stdio.h>

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

// 学生情報を表示する関数
void displayStudent(Student student) {
    printf("Name: %s, Age: %d, Grade: %.2f\n", student.name, student.age, student.grade);
}

int main() {
    // 学生データの配列を初期化
    Student students[3] = {
        {"Alice", 20, 85.5},
        {"Bob", 22, 90.0},
        {"Charlie", 19, 78.5}
    };

    // 学生情報を表示
    for (int i = 0; i < 3; i++) {
        displayStudent(students[i]);
    }

    return 0;
}
動作説明
  1. 構造体の定義:学生名、年齢、成績を管理するStudent構造体を定義します。
  2. 構造体配列の初期化:3人分の学生データを配列studentsに格納します。
  3. 情報の表示:
    • forループで各学生データを関数displayStudentに渡します。
    • 関数内でデータを出力します。

2. 構造体を使ったファイル操作

2.1 学生情報をファイルに保存する

#include <stdio.h>

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

int main() {
    // 学生データの初期化
    Student student = {"Alice", 20, 85.5};

    // ファイルにデータを保存
    FILE *file = fopen("student_data.txt", "w");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }
    fprintf(file, "Name: %s\nAge: %d\nGrade: %.2f\n", student.name, student.age, student.grade);
    fclose(file);

    printf("Student data saved to file.\n");
    return 0;
}
動作説明
  1. 構造体の定義:同じStudent構造体を使用します。
  2. ファイルの作成と書き込み:
    • fopenでファイルを開きます。
    • fprintfを使い、構造体データをファイルに保存します。
  3. ファイルのクローズ:fcloseでファイルを閉じます。

3. 練習問題

以下の課題に挑戦して、構造体を使った応用力を高めましょう。

  1. 学生の成績データをファイルから読み込み、表示するプログラムを作成してください。
  2. 商品の在庫データを構造体配列で管理し、CSVファイルに保存するプログラムを作成してください。
  3. 従業員情報を構造体で管理し、指定した従業員を検索して表示するプログラムを作成してください。

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

問1の解答

#include <stdio.h>

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

int main() {
    // ファイルから学生データを読み込み
    FILE *file = fopen("student_data.txt", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    Student student;
    fscanf(file, "Name: %s\nAge: %d\nGrade: %f\n", student.name, &student.age, &student.grade);
    fclose(file);

    // データの表示
    printf("Name: %s\nAge: %d\nGrade: %.2f\n", student.name, student.age, student.grade);
    return 0;
}
動作説明
  1. ファイルの読み込み:fopenを使い、student_data.txtを読み込みモードで開きます。
  2. データの取得:fscanfを使い、ファイルから構造体studentにデータを読み込みます。
  3. データの表示:構造体メンバーをprintfで出力します。
  4. ファイルのクローズ:fcloseでファイルを閉じます。

5. まとめ

構造体を活用することで、複雑なデータ操作やファイル管理が効率的に行えます。次回は、さらに高度な構造体操作や応用プログラムを学びます。