【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. 練習問題
以下の課題に挑戦して、構造体の基本を理解しましょう。
- 本(タイトル、著者、価格)を管理する構造体を定義し、初期化してデータを表示してください。
- 車(メーカー、モデル、価格)を管理する構造体を定義し、
typedef
を使用して簡単に記述してください。 - 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. まとめ
構造体を使用することで、異なる型のデータをまとめて管理することができます。次回は、構造体の初期化やアクセス方法をさらに深掘りします。