第10回 http://www.fit.ac.jp/~matsuki/lecture.html プログラミングⅡ 第10回 http://www.fit.ac.jp/~matsuki/lecture.html
連絡 小テスト 授業開始直後と終了直前に小テストを2行います 授業開始直後テスト(復習テスト)⇒前回の復習 授業終了直前テスト(本テスト)⇒その日の内容の復習 本テストの成績(正答率)が50%以下の場合は、宿題を出します(レポートとは別)。 宿題を決められた期日までに提出しない場合は、欠席扱いにします
宿題の提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が7割未満の場合 提出は、PDFファイルを印刷して、それに答えを書いて提出すること。
プログラミングに関する質問時間 月曜日と金曜日の12:00から13:00までは, CAE室で,プログラミングに関する質問を受け付けています. 遠慮なく相談に来てください.
今日の内容 構造体の基礎 構造体の記述方法 構造体型の宣言 構造体変数の宣言 メンバにアクセスする typedefで型に名前を付ける 構造体の初期化 構造体の代入
構造体とは int int int int double 配列: 構造体: 「同じ型」のデータをひとまとめにしたもの 「異なる型」のデータをひとまとめにしたもの 書込め int int int 書込め int double char
構造体の概念 複数の型の変数をひとまとめにしたもの まとめられた要素をメンバという (例)携帯電話の連絡先データ 書込め 書込め 電話番号:char tel[16];(16ケタ) 名前:char name[20];(20文字) 年齢:int age; 体重:double weight; 書込め メンバ tel[16] name[16] age weight 書込め 4つのメンバで1セット(一人分)
構造体の宣言 構造体の宣言は2つのステップがある。 (1) 構造体型の宣言 どのような型の変数や配列をまとめるかを決定 (1) 構造体型の宣言 どのような型の変数や配列をまとめるかを決定 (2) 構造体変数の宣言 構造体型を持った変数を用意 書込め 書込め
(1)構造体型の宣言 構文 struct 構造体型名 { 型名 識別子; ・・・ }; セミコロンに注意 書込め
(1)構造体型の宣言 例 struct Car { int num; double gas; char name[20]; }; 書込め セミコロンに注意 メンバ(構造体の要素) num gas name[20] int型 double型 char型配列
(2)構造体変数の宣言 struct 構造体型名 構造体変数名; struct Car car1; 構文 例 書込め 書込め 構造体を利用することができる.
メンバへのアクセス 宣言した構造体のメンバに値を格納しよう. メンバにアクセス⇒ドット演算子(.)を使う 構文 例 構造体変数名.メンバ 書込め 構文 構造体変数名.メンバ 例 ナンバーに1234を設定 car1.num = 1234; car1.gas = 25.5; strcpy(car1.name, “マックィーン号”); ガソリン量に25.5を設定 名前にマックィーン号を設定 (注意)strcpy(a,b) bをaにコピー(代入) 書込め
struct Car { int num; double gas; char name[20]; }; 書込め 書込め 書込め #include <stdio.h> #include <string.h> /*構造体型のCarの宣言*/ struct Car { int num; double gas; char name[20]; }; main() { struct Car car1; car1.num = 1234; car1.gas = 25.5; strcpy(car1.name, “マックィーン号”); printf(“車のナンバーは%d ガソリンの量は%f 車の名前は%s\n”, car1.num, car1.gas, car1.name); } サンプルプログラム1 (メンバにアクセス) 書込め 構造体型はグローバルとして宣言した方が便利 構造体変数の宣言 書込め 書込め
書込め 書込め 書込め struct Car car1; #include <stdio.h> #include <string.h> /*構造体型のCarの宣言*/ struct Car { int num; double gas; char name[20]; }; main() { struct Car car1; printf(“ナンバーは?”); scanf( “%d”, &car1.num); printf(“ガソリンの量は?”); scanf( “%lf”, &car1.gas ); printf(“車の名前は?”); scanf( “%s”, car1.name); printf(“車のナンバーは%d ガソリンの量は%f 車の名前は%s\n”, car1.num, car1.gas, car1.name); } サンプルプログラム2 (キーボードから入力) キーボードから入力 書込め 書込め 書込め
構造体の記述方法
長い型名に,新しい名前をつけ直すこと命令がある typedefの使い方 構造体型で構造体変数を宣言するとき, struct Car car1; という具合に,長い型名を書くはめになる. 型名 長い型名に,新しい名前をつけ直すこと命令がある typedef 書込め
typedefの使い方 構文 typedef 型名 識別子 例 typedef double W W gas; gas = 25.3; 書込め double型を「W」という名前で使えるように設定
typedefの使い方 型の名前を設定することができる struct Car { int num; double gas; char name[20]; }; struct Car car1; car.num = 1234; typedef struct Car { int num; double gas; char name[20]; } Car; Car car1; car1.num = 1234; 書込め 「struct Car」型 を 「Car」という名前の型 に設定 書込め 書込め
typedef struct Car { 書込め #include <stdio.h> #include <string.h> /*構造体型のCarの宣言*/ typedef struct Car { int num; double gas; char name[20]; }Car; main() { Car car1; car1.num = 1234; car1.gas = 25.5; strcpy(car1.name, “マックィーン号”); printf(“車のナンバーは%d ガソリンの量は%f 車の名前は%s\n”, car1.num, car1.gas, car1.name); } サンプルプログラム3 (typedefの使用例) 書込め typedefを使って「struct Car」を「Car」に設定 構造体変数の宣言 書込め
nameメンバーに”マックィーン号”を格納 構造体の初期化 構造体を宣言すると同時に値を格納する 構文 構造体型名 構造体変数名 = {値,値, ・・・}; numメンバーに1234を格納 書込め 例 Car mycar = {1234, 25.5, “マックィーン号”}; nameメンバーに”マックィーン号”を格納 書込め gasメンバーに25.5を格納 書込め
#include <stdio. h> #include <string. h> /. 構造体型のCarの宣言 #include <stdio.h> #include <string.h> /*構造体型のCarの宣言*/ typedef struct Car { int num; double gas; char name[20]; }Car; main() { Car mycar = { 1234, 25.5, “バットマンCAR” }; printf(“車のナンバーは%d\n”, mycar.num); printf(“ガソリンの量は%f\n ”, mycar.gas); printf(“車の名前は%s\n”, mycar.name); } 実行例 車のナンバーは1234 ガソリンの量は25.5 車の名前はバットマンCAR typedefを使う場合,ここの 構造体型名(Car)は書かなくても良い 書込め mycarという構造体変数を宣言し,同時に初期化(順番に注意!) 書込め
構造体の代入 構造体変数を別の構造体変数に代入すると,メンバーもまとめて代入(コピー)される. 例 書込め 構造体変数を別の構造体変数に代入すると,メンバーもまとめて代入(コピー)される. 例 Car mycar = {1234, 25.5, “マックィーン号”}; Car yourcar; yourcar = mycar; yourcar.num = mycar.num; yourcar.gas = mycar.gas; strcpy(yourcar.name, mycar.name); 書込め この代入文ひとつで,mycarのすべてのメンバ値がyourcar側にも代入される
mycarのデータをyourcarに代入 (まとめてメンバー値をコピー可!) 書込め #include <stdio.h> #include <string.h> /*構造体型のCarの宣言*/ typedef struct { int num; double gas; char name[20]; }Car; main() { Car mycar = { 1234, 25.5, “バットマンCAR” }; Car yourcar; yourcar = mycar; printf(“your車のナンバーは%d\n”, yourcar.num); printf(“your車のガソリンの量は%f\n ”, yourcar.gas); printf(“your車の名前は%s\n”, yourcar.name); } 実行例 your車のナンバーは1234 your車のガソリンの量は25.5 your車の名前はバットマンCAR 構造体型名は省略可(省略済) 書込め mycarのデータをyourcarに代入 (まとめてメンバー値をコピー可!) 書込め