~/************************* ~ ~ PG班講義第11回 構造体2 ~ PG班講義第11回 構造体2 ~ ~**************************/ [#f34621dd] ~**************************/ ~ ~/* 構造体の応用みたいな感じです */ ~ ~#include <stdio.h> ~ ~struct seiseki average(struct seiseki sei); ~ ~/* 構造体の型枠の宣言 */ ~ ~struct kyouka { ~ int japanese; /* 国語 */ ~ int math; /* 数学 */ ~ int english; /* 英語 */ ~ int japanese; /* 国語 */ ~ int math; /* 数学 */ ~ int english; /* 英語 */ ~}; ~ ~/* 構造体の入れ子 ~ 構造体も入れ子にして使用することができます ~ ※入れ子に用いる構造体は先に宣言しておいてください */ ~ 構造体も入れ子にして使用することができます ~ ※入れ子に用いる構造体は先に宣言しておいてください */ ~ ~struct seiseki { ~ int no; /* 学生番号 */ ~ char name[20]; /* 氏名 */ ~ double average; /* 平均値 */ ~ struct kyouka score; /* 教科別点数 */ ~ int no; /* 学生番号 */ ~ char name[20]; /* 氏名 */ ~ double average; /* 平均値 */ ~ struct kyouka score; /* 教科別点数 */ ~}; ~ ~ ~int main(void) ~{ ~ int i; ~ int i; ~ ~/* 初期化はすべてのメンバを順番に並べることで行えます */ ~ ~ struct seiseki seito[3] = { ~ { 7, "cuctus", 0, 68, 38, 43 }, ~ { 14, "Organic_acid", 0, 65, 54, 5 }, ~ { 33, "YUO", 0, 46, 61, 52 }, ~ }; ~ struct seiseki seito[3] = { ~ { 7, "cuctus", 0, 68, 38, 43 }, ~ { 14, "Organic_acid", 0, 65, 54, 5 }, ~ { 33, "YUO", 0, 46, 61, 52 }, ~ }; ~ ~ for(i = 0; i < 3; i++) { ~ for(i = 0; i < 3; i++) { ~ ~/* 前回ちょっと言いましたが下のように同じ型の構造体は代入が可能です */ ~ ~ seito[i] = average(seito[i]); ~ } ~ seito[i] = average(seito[i]); ~ } ~ ~ for(i = 0; i < 3; i++) { ~ printf("%2d %s %5.1f\n",seito[i].no, seito[i].name, seito[i].average); ~ } ~ for(i = 0; i < 3; i++) { ~ printf("%2d %s %5.1f\n",seito[i].no, seito[i].name, seito[i].average); ~ } ~ ~/* 実行結果 ~ 7 cuctus 49.7 ~ 14 Organic_acid 41.3 ~ 33 YUO 53.0 */ ~ 7 cuctus 49.7 ~ 14 Organic_acid 41.3 ~ 33 YUO 53.0 */ ~ ~ return 0; ~ return 0; ~} ~ ~struct seiseki average(struct seiseki sei){ ~ ~/* 入れ子にされた構造体のメンバへのアクセスはドット演算子を2回用いればできます */ ~ ~ sei.average = (double)(sei.score.japanese + sei.score.math + sei.score.english) / 3; ~ sei.average = (double)(sei.score.japanese + sei.score.math + sei.score.english) / 3; ~ ~/* 関数から構造体を受け取ることができます ~ 以前の講義でreturnで返せる値は1つだけと言いましたが、構造体をreturnで返すことも可能です */ ~ 以前の講義でreturnで返せる値は1つだけと言いましたが、構造体をreturnで返すことも可能です */ ~ ~ return sei; ~ return sei; ~} ~ ~ ~ ~/* 連絡事項 ~ ~ ・サークル棟清掃 ~ 7/6(日)にサークル棟の掃除を行うそうです ~ 来られるように日程を調節しておいてください ~ ・サークル棟清掃 ~ 7/6(日)にサークル棟の掃除を行うそうです ~ 来られるように日程を調節しておいてください ~ ~ ・サークル交流会 ~ 執行主催でサークル交流会が行われるそうです ~ 各サークル数名参加(1、2年主体)で新入生合宿研修みたいな内容らしいです ~ 日程は9/17~9/19です ~ そのうち参加者を募るので興味のある方は考えておいてください ~ ・サークル交流会 ~ 執行主催でサークル交流会が行われるそうです ~ 各サークル数名参加(1、2年主体)で新入生合宿研修みたいな内容らしいです ~ 日程は9/17~9/19です ~ そのうち参加者を募るので興味のある方は考えておいてください ~ ~ ・班内新歓 ~ 検討中です ~ 今月末~来月頭に行うかもしれません */ ~ ・班内新歓 ~ 検討中です ~ 今月末~来月頭に行うかもしれません */