第12回:構造体

 ファイルの取り扱いは,せっかくの計算結果を保存するためにとても重要なテクニックなので,よく復習しておいてください.今週は,構造体を学びます.

 ここで復習  配列は,同じ型のデータをまとめて扱う手段でした.では,異なる型はまとめて扱うことはできないのでしょうか.たとえば,みんなのレポート提出状況をチェックするえんま帳を例にとると,

学年
番号
氏名
1回目
2回目
平均
成績
2
1
1
アベ
50
70
60.0
B
2
1
2
イトウ
80
60
70.0
B

 データは,学年や各回の点数が整数型,氏名が文字列型,平均点が浮動小数点型となっていて,一つの配列で取り扱うことができないようです.

 そこで,構造体は,異なる型のデータをまとめて扱うための手段です.例を見てみましょう.


構造体の定義

 構造体を利用するには,異なった型をまとめて一つの構造体(一種の型)を定義します.

struct seiseki{
    int gakunen;
    int kumi;
    int bangou;
    char simei[25];
    int ten_1;
    int ten_2;
    float heikin;
    char hantei;
};

												

 次に,定義した構造体を適用する変数を定義します.

struct seiseki list2002;

 変数の定義と同時に初期化したいときは...

struct seiseki list2002 = {2,1,1, "アベ",10,20,0,'A'};

構造体の使い方

 構造体の要素一つ一つのことをメンバと呼びます.メンバを利用する方法を見てみましょう.

printf("%d %s %f\n", list2002.bangou, list2002.simei, list2002.heikin);

 メンバへ値を代入するときも同様です.

list2002.bangou = 3;
list2002.simei = "ウエダ";


構造体の配列

 通常の変数と同じように,定義した構造体変数についても配列を考えられます.

struct seiseki list2002[10];

 初期化するなら,

struct seiseki list2002[10] = {
    {2,1,1, "アベ",10,20,0,},
    {2,1,2, "イトウ",5,10,0,},
};

演習

 下記の成績データをファイルから読み込んで,各学生の2回のテストの平均点を計算し,成績を判定するプログラムを,構造体を用いて作成せよ.

2,1,1,アベ,50,60

2,1,2,イトウ,70,45

2,1,3,ウエダ,90,53

2,1,4,エンドウ,75,65

2,1,5,オカダ,30,15

2,1,6,カトウ,90,76

2,1,7,キダ,80,56

2,1,8,クリタ,86,95

成績対応表
A
80点以上
B
60点以上
C
50点以上
F
50点未満