Presentation is loading. Please wait.

Presentation is loading. Please wait.

理化学研究所 第 10 回 構造体 半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻 鹿児島大学 プログラミング基礎演習.

Similar presentations


Presentation on theme: "理化学研究所 第 10 回 構造体 半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻 鹿児島大学 プログラミング基礎演習."— Presentation transcript:

1 理化学研究所 第 10 回 構造体 半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻 鹿児島大学 プログラミング基礎演習

2 理化学研究所 配列 ( 復習 ) ▶同じ型の変数の組 ■ 順番が付いている ▶C言語での表現方法 ■ 配列の各要素 aa[0], aa[1], aa[2],… 番号は 0 から始まることに注意! ■ 配列全体 aa ▶配列:同じ型の変数をセットで使える

3 理化学研究所 構造体 ▶異なる型のデータをワンセットで扱う ■ 「定食」「セットメニュー」 ■ 構造体のメンバー:セット中の単品のこと ライス 割り箸 味噌汁 トンカツ トンカツ定食

4 理化学研究所 構造体のメンバー ▶任意の型をメンバーにすることができる ■ int, char, long, float

5 理化学研究所 総理大臣の構造体 List10-1( 教科書 p.243) #include struct souri { int rekidai; char name[20]; int ninki; int looks; }; int main(void); void print_souri(struct souri s); int main(void) { struct souri ito, kuroda; ito.rekidai=1; strcpy(ito.name,"Ito Hirobumi"); ito.ninki=100; ito.looks=85; kuroda.rekidai=2; strcpy(kuroda.name,"Kuroda Kiyotaka"); kuroda.ninki=90; kuroda.looks=95; print_souri(ito); print_souri(kuroda); return(0); } void print_souri(struct souri s) { printf("%d 代総理大臣 \n",s.rekidai); printf(" 人気 =%d, ルックス =%d",s.ninki,s.looks); printf(" 合計 =%d\n\n",s.ninki+s.looks); return; }

6 理化学研究所 構造体の定義 List10-1( 教科書 p.243) struct souri { int rekidai; char name[20]; int ninki; int looks; }; メンバーの名前と型を宣言 構造体であること 構造体の中身を定義 構造体の種類名(構造体タグ)

7 理化学研究所 構造体変数 ▶構造体タグを変数の型名にできる ■ あとは普通の変数と同じように書けば良い struct souri ito, kuroda; 構造体の種類名(構造体タグ) 構造体である変数名

8 理化学研究所 構造体のメンバー ▶構造体変数とメンバー名を「. 」でつなぐ ■ 通常の変数と同じになれば同じに扱える ito.rekidai=1; strcpy(ito.name,"Ito Hirobumi"); ito.ninki=100; ito.looks=85; kuroda.rekidai=2; strcpy(kuroda.name,"Kuroda Kiyotaka"); ito.ninki=90; ito.looks=95; 文字列複写関数

9 理化学研究所 文字列の複写 ▶文字列=文字の配列 ■ 1文字ずつ代入しても良い ito.name[0]='I'; ito.name[1]='t'; ito.name[2]='o'; ito.name[3]=' '; ito.name[4]='H'; ito.name[5]='i'; ito.name[6]='r'; ito.name[7]='o'; ito.name[8]=NULL; strcpy(ito.name,"Ito Hiro"); 最後は NULL 文字 (文字列の終識別)

10 理化学研究所 文字列の複写 ▶こんな裏技 ■ 「文字位置 [0] から複写」となる ■ 「 n 文字目からの複写」とできる ■ 型宣言 strcpy(&(ito.name[0]),"Ito Hiro");

11 理化学研究所 配列の構造体メンバー ▶文字列と同じく、配列もメンバーにでき る struct souri { int rekidai; char name[20]; int point[5]; } 配列

12 理化学研究所 総理大臣の構造体 List10-1( 教科書 p.243) #include struct souri { int rekidai; char name[20]; int ninki; int looks; }; int main(void); void print_souri(struct souri s); int main(void) { struct souri ito, kuroda; ito.rekidai=1; strcpy(ito.name,"Ito Hirobumi"); ito.ninki=100; ito.looks=85; kuroda.rekidai=2; strcpy(kuroda.name,"Kuroda Kiyotaka"); kuroda.ninki=90; kuroda.looks=95; print_souri(ito); print_souri(kuroda); return(0); } void print_souri(struct souri s) { printf("%d 代総理大臣 \n",s.rekidai); printf(" 人気 =%d, ルックス =%d",s.ninki,s.looks); printf(" 合計 =%d\n\n",s.ninki+s.looks); return; }

13 理化学研究所 構造体の配列 ▶構造体も配列にできる struct tontei { int ライス ; int 味噌汁 ; int トンカツ ; char 割 箸 ;} struct tontei lunch[4]; トンカツ定食 [0] トンカツ定食 [1] トンカツ定食 [2] トンカツ定食 [3]

14 理化学研究所 構造体の初期化 ▶型宣言の際に初期値を代入できる struct souri { int rekidai; char name[20]; int ninki; int looks; } struct souri ito={1,"Ito Hirobumi", 100, 85}; 「配列の初期化」と似た記法

15 理化学研究所 構造体メンバーが構造体 !? ▶問:構造体は構造体のメンバーにできる か? ▶答:できる struct seiseki { int ninki; int looks; } struct souri { int rekidai; char name[20]; struct seiseki point; } メンバーである構造体

16 理化学研究所 構造体のメンバー ▶配列もメンバーにできる ■ 「トンカツの皿」も構造体 トンカツとキャベツと付け合わせ トンカツ キャベツ

17 理化学研究所 多重構造体へのアクセス ▶普通に重ねれば良い struct seiseki { int ninki; int looks; } struct souri { int rekidai; char name[20]; struct seiseki point; } ito; ito.point.ninki=100; ito.point.looks=85; メンバーのメンバー

18 理化学研究所 総理大臣の構造体 多重構造体を用いた例 #include struct seiseki { int ninki; int looks; }; struct souri { int rekidai; char name[20]; struct seiseki point; }; int main(void); void print_souri(struct souri s); int main(void) { struct souri ito, kuroda; ito.rekidai=1; strcpy(ito.name,"Ito Hirobumi"); ito.point.ninki=100; ito.point.looks=85; kuroda.rekidai=2; strcpy(kuroda.name,"Kuroda Kiyotaka"); kuroda.point.ninki=90; kuroda.point.looks=95; print_souri(ito); print_souri(kuroda); return(0); } void print_souri(struct souri s) { printf("%d 代総理大臣 \n",s.rekidai); printf(" 人気 =%d, ルックス =%d", s.point.ninki,s.point.looks); printf(" 合計 =%d\n\n",s.point.ninki+s.point.looks); return; }

19 理化学研究所 構造体タグの変数型化 ▶構造体タグを新たな変数型として定義 ■ struct と書かなくても良くなる typedef struct souri { int rekidai; char name[20]; int ninki; int looks; } Souri; Souri ito={1,"Ito Hirobumi", 100, 85}; 初期化する場合 「変数型の定義」の意 味 新たに定義された「変数 型」

20 理化学研究所 typedef の使用例 変数型 Souri の使用例 #include struct seiseki { int ninki; int looks; }; typedef struct souri { int rekidai; char name[20]; struct seiseki point; } Souri; int main(void); void print_souri(Souri s); int main(void) { Souri ito, kuroda; ito.rekidai=1; strcpy(ito.name,"Ito Hirobumi"); ito.point.ninki=100; ito.point.looks=85; kuroda.rekidai=2; strcpy(kuroda.name,"Kuroda Kiyotaka"); kuroda.point.ninki=90; kuroda.point.looks=95; print_souri(ito); print_souri(kuroda); return(0); } void print_souri(Souri s) { printf("%d 代総理大臣 \n",s.rekidai); printf(" 人気 =%d, ルックス =%d", s.point.ninki,s.point.looks); printf(" 合計 =%d\n\n",s.point.ninki+s.point.looks); return; }


Download ppt "理化学研究所 第 10 回 構造体 半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻 鹿児島大学 プログラミング基礎演習."

Similar presentations


Ads by Google