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

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

第 10 回 宿題 出題日: 12 月 14 日 締切日: 12 月 21 日. 提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が 7 割未満の場合 提出は、 PDF ファイルを印刷して、それに答 えを書いて提出すること。
プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
1 例題 ex3b ( 配列 ) 科学科プログラミング. 2 例題 : ex3b  以下の 3 つについて例題を進める ステップ 1 :配列 ステップ 2 :最小と最大 ステップ 3 :文字型の配列.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
課題解説: 関数の引数にポインタを使って2数を入れ替える
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
プログラミング 3 構造体(1).
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
プログラミング論 関数ポインタ と 応用(qsort)
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
プログラミング論 構造体
プログラミング 4 文字列.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
モバイルプログラミング第2回 C言語の基礎 (1).
情報処理Ⅱ 2005年11月25日(金).
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
C言語講座第5回 2017 構造体.
第5回 配列.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

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

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

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

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

理化学研究所 総理大臣の構造体 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; }

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

理化学研究所 構造体変数 ▶構造体タグを変数の型名にできる ■ あとは普通の変数と同じように書けば良い 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"); ito.ninki=90; ito.looks=95; 文字列複写関数

理化学研究所 文字列の複写 ▶文字列=文字の配列 ■ 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 文字 (文字列の終識別)

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

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

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

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

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

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

理化学研究所 多重構造体へのアクセス ▶普通に重ねれば良い 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; メンバーのメンバー

理化学研究所 総理大臣の構造体 多重構造体を用いた例 #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; }

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

理化学研究所 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; }