後期に入って1回目の授業ということで、簡単に後期の授業の予定 (中間試験まで構造体、以降グラッフィック)といった点を伝えてからの、 説明。 構造体も2年の最後にやっている様ではあるが、 学生も「まだよく解っていない…」とのことで、 あらためて説明を行う。
構造体
最初の説明として、定番の「名前と国語,算数,理科の成績で、クラスの データを扱う…」というネタで、構造体を使わずに記載すると、どうなるか? 途中で、扱うデータ件数が変更になったら、どうするか? 複数クラスのデータを扱うようになったらどうするか? といった変更について、説明を行う。
char name[ 50 ][ 20 ] ; int kokugo[ 50 ] ; int sansu[ 50 ] ; int rika[ 50 ] ;
人数が50と、マジックナンバーのまま。もし、1人分の名前の長さの20が 50であったら、50人クラス→100人との変更要求があれば、1人分の名前の 長さも変更してしまうミスがあるかもしれない。
他のクラスのデータも扱うようになったら?(例:電気科のデータも…)
char e_name[ 50 ][ 20 ] ; int e_kokugo[ 50 ] ; int e_sansu[ 50 ] ; int e_rika[ 50 ] ;
科目名が sansu → sugaku なら、e_sansu → e_sugaku を忘れるかも。 一番の問題は、name,…の入力処理と、e_name,…の入力処理を、 共通化できない。
構造体を使えば、
struct Student { char name[ 20 ] ; int kokugo ; int sansu ; int rika } ; struct Student saitoh = { "saitoh" , 90,92,96 } ; struct Student ei[ 50 ] ; // EI学生 struct Student ee[ 50 ] ; // 電気学生...
構造体の入れ子
説明の中で、構造体の要素参照や、初期化を説明した後、 構造体の入れ子を説明する。 その前に、処理の入れ子として、{} による処理の複文の中に、 さらに{}のブロックがあるのも、処理の入れ子として説明。
struct Birthday { int month ; int day ; } ; struct Student { char name[ 20 ] ; struct Birthday bday int kokugo ; int sansu ; } ;