C言語

【C言語】第6章第1回:構造体の基本と定義方法

構造体は、異なる型のデータをまとめて管理するためのC言語の基本的な機能です。この章では、構造体の基本的な概念と定義方法について学びます。

1. 構造体とは?

1.1 構造体の概要

構造体は、異なるデータ型を1つにまとめて扱えるデータ構造です。たとえば、学生情報を管理する際、名前(文字列)、年齢(整数)、成績(浮動小数点数)を1つの構造体としてまとめることができます。

1.2 構造体を使う理由

  • データ管理が容易:関連するデータを1つの単位で管理できます。
  • 可読性の向上:コードの意味が分かりやすくなります。
  • 柔軟性:異なるデータ型を1つにまとめられます。

2. 構造体の定義方法

2.1 基本的な構造体の定義

例:学生情報を管理する構造体

#include <stdio.h>

// 構造体の定義
struct Student {
    char name[50];
    int age;
    float grade;
};

int main() {
    // 構造体変数の宣言
    struct Student student1;

    // データの代入
    student1.age = 20;
    student1.grade = 85.5;
    sprintf(student1.name, "John Doe");

    // データの表示
    printf("Name: %s\n", student1.name);
    printf("Age: %d\n", student1.age);
    printf("Grade: %.2f\n", student1.grade);

    return 0;
}

解説:

  • structキーワードを使って構造体を定義します。
  • 構造体変数を作成してデータを代入・表示します。

2.2 構造体の別名定義

例:typedefを使った定義

#include <stdio.h>

// 構造体の別名定義
typedef struct {
    char name[50];
    int age;
    float grade;
} Student;

int main() {
    // 構造体変数の宣言
    Student student1;

    // データの代入
    student1.age = 22;
    student1.grade = 90.2;
    sprintf(student1.name, "Alice Smith");

    // データの表示
    printf("Name: %s\n", student1.name);
    printf("Age: %d\n", student1.age);
    printf("Grade: %.2f\n", student1.grade);

    return 0;
}

解説:

  • typedefを使うことで、構造体の型名を簡略化できます。
  • 構造体の宣言時にstructを省略できます。

3. 構造体の初期化方法

3.1 リテラルでの初期化

例:構造体のリテラル初期化

#include <stdio.h>

// 構造体の定義
typedef struct {
    char name[50];
    int age;
    float grade;
} Student;

int main() {
    // 構造体変数のリテラル初期化
    Student student1 = {"Charlie Brown", 19, 88.5};

    // データの表示
    printf("Name: %s\n", student1.name);
    printf("Age: %d\n", student1.age);
    printf("Grade: %.2f\n", student1.grade);

    return 0;
}

解説:リテラルを使用すると、簡潔に構造体を初期化できます。

4. 練習問題

以下の課題に挑戦して、構造体の基本を理解しましょう。

  1. 本(タイトル、著者、価格)を管理する構造体を定義し、初期化してデータを表示してください。
  2. 車(メーカー、モデル、価格)を管理する構造体を定義し、typedefを使用して簡単に記述してください。
  3. 2人の学生情報を構造体に格納し、両者の成績を比較して高い方を表示してください。

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

問3の解答

#include <stdio.h>

// 構造体の定義
typedef struct {
    char name[50];
    float grade;
} Student;

int main() {
    // 構造体変数の初期化
    Student student1 = {"John", 85.0};
    Student student2 = {"Alice", 90.5};

    // 成績の比較
    if (student1.grade > student2.grade) {
        printf("%s has the higher grade: %.2f\n", student1.name, student1.grade);
    } else {
        printf("%s has the higher grade: %.2f\n", student2.name, student2.grade);
    }

    return 0;
}

解説:構造体を使って2人の学生情報を比較し、高い成績を持つ学生を表示します。

6. まとめ

構造体を使用することで、異なる型のデータをまとめて管理することができます。次回は、構造体の初期化やアクセス方法をさらに深掘りします。