C言語応用 構造体 構造体 構造体とは 構造体とは、いくつかのデータを「ひとまとめ」にした データ構造である。 たとえば、学生の名前、身長、体重をひとつのデー タとして扱いたい場合など。 構造体 氏名 身長 体重 構造体 定義 struct gstudent { char name[20]; int height; float weight; }; struct xyz a,b; 枠組みの宣言 struct gstudent { char name[20]; int height; float weight; } a,b; オブジェクトの定義 http://www.center.nitech.ac.jp/~sfukui/ouyou/list13-1.c 構造体 メンバの表し方 複数のオブジェクトの集まりを扱うという性質上、配列と構 造体には、数多くの共通点がある。両者をまとめて集合体 と呼ぶ。 int a[3]; a[0] a[1] a[2] 変数名[添え字] 使用例 c.x = 5; b = 3 + c.x; struct xyz { int x; long y; double z; } c; c.x c.y c.z 変数名.メンバ名 構造体 構造体と配列の類似点 構造体変数の初期化は、配列と同様に、{ }で初期 化子を囲んだものを与えることによって行う。 配列 int a[6] = {3,5,7,6,4,2}; 構造体 struct xyz c = {15,100,10.5}; 構造体 配列化する 構造体も配列化 することができる。 struct xyz { int x; long y; double z; } d[2]; c[0].x c[0].y c[0].z c[1].x c[1].y c[1].z 構造体 構造体と配列の相違点 配列は「同じ型」のデータの集合を効率よく表すための データ構造である。一方、構造体は、一般には「異なる型」 のものの集合を効率よく表すデータ構造である。 配列の変数は、たとえ要素数が同じであっても、代入を行 うことはできない。しかし、同じ型の構造体は、代入を行う ことができる。 配列 構造体 int a[6],b[6]; struct xyz a,b; a = b; /* エラー */ a = b; /* OK */ http://www.center.nitech.ac.jp/~sfukui/ouyou/list13-2.c 構造体 学生データの構造体とソート 学生の名前、身長、体重のデータをひとまとめ にしたデータ構造を struct gstudent 型として宣言 し、身長順にソートを行うプログラムを考える。 http://www.center.nitech.ac.jp/~sfukui/ouyou/list13-3.c 構造体 構造体とポインタ ポインタで構造体を指すこともできる。 struct xyz { int x; long y; double z; } a; struct xyz *p; p = &a; (*p).x = 20; (*p).y = 100; (*p).z = 3.14; or p = &a; p->x = 20; p->y = 100; p->z = 3.14; http://www.center.nitech.ac.jp/~sfukui/ouyou/list13-4.c 構造体 補足 構造体の変数の宣言において struct xyz a; sturct をいちいちつけるのは面倒であるので、 typedef struct { int x; long y; float z; } xyz; と宣言すれば、 xyz a; として変数宣言ができる。 演習 x座標およびy座標のペアとして構成される構造体 point を定義せよ。(両座標は整数であるとする)。 x座標およびy座標のメンバに値を設定し、その構造体を 返す関数 struct point pointof(int a,int b){ ・・・ } を作成せよ。 2つの座標 a,b間の距離を計算する関数 double distanceof(struct point a, struct point b){ ・・・ } を作成せよ。
© Copyright 2024 ExpyDoc