プログラミング入門 • 小テスト (10分ほど) • 小テストの解答 • 今回の講義内容: ファイルの入出力 プログラム入門(第11回) 1 プログラミング入門 • • • • • • • • • • • • • 1 2 3 4 5 6 7 8 9 10 11 12 13 授業概要 プログラムの作成から実行まで (教科書 1.1~1.6, 2.1) 変数と標準入出力 (教科書 3.1~3.2,2.2,2.4,6.4) 演算子 (教科書 4.1~4.9) 制御文,条件判断と分岐 (教科書 5.1~5.2,5.6~5.7) 繰り返し処理 (教科書 5.3~5.5,5.8) 配列と文字列 (教科書 3.3~3.4) 2次元配列 (教科書 3.3) 関数Ⅰ (教科書 7.1~7.3) 関数Ⅱ (教科書 7.4) (ローカル変数とグローバル変数) 構造体 (教科書 9.1) ファイルの入出力 (教科書 12.1~12.3) プログラミング評価 プログラム入門(第11回) 2 Program language C • Structure • Structure & Array 今回の学習の目標 •構造体について •配列と構造体との違い •構造体の使い方 •構造体を配列にして使う プログラム入門(第11回) 3 p.230 構造体とは • 複数の(異なる)データや変数を1つの塊りにしたもの sankaku tate (int) 値 値 値 値 yoko (int) menseki (float) ばらばらに管理 値 値 tate yoko menseki (int) (int) (float) 一つの塊りとして管理 プログラム入門(第11回) 4 配列と構造体の違い 配列 data[5] [0] [2] [1] [3] [4] sankaku 値 tate (int) 各要素は 同じデータ型 構造体 値 yoko (int) 値 それぞれのデータ型は 異なっていても良い menseki (float) プログラム入門(第11回) 5 配列と構造体の違い • 配列 – 変数名は1つ data[5] – それぞれの要素は同じデータ型 • 構造体 – 構造体中の変数名は自由に付けられる – それぞれの変数のデータ型は異なっても良い プログラム入門(第11回) 6 p.232 構造体の書式 • 構造体の宣言(型枠の宣言) struct 構造体タグ名 { 構造体宣言の並び}; struct area { int tate; int yoko; float menseki; }; • 構造体を使う宣言(記憶領域の確保) struct 構造体タグ名 構造体名; struct area t; プログラム入門(第11回) 7 p.233 構造体の使い方:メンバーの指定 struct area 構造体の宣言 型の名前は area とする { int tate; 構造体のメンバー(1) int yoko; 構造体のメンバー(2) float menseki; 構造体のメンバー(3) }; : struct area sankaku ; 構造体を使った変数 sankaku の宣言 : 構造体のメンバーを指定するときは sankaku.tate = 20; 構造体変数名 .メンバー名 のように記述する sankaku.yoko = 10; sankaku.menseki = (float)( sankaku.tate * sankaku.yoko ) / 2.0 ; data = sankaku.menseki; 構造体メンバーから値を他の変数へ代入 プログラム入門(第11回) 8 構造体を使った例 area という構造 体タグ名を定義 • 構造体の書式 struct area { 構造体 int tate; int yoko; float menseki; 構造体の中身 }; • 構造体の使用方法 void main ( void ) { struct area t; 構造体 タグ名 構造体 変数名 scanf(“%d”,&t.tate); scanf(“%d”,&t.yoko); t.menseki = (float)(t.tate * t.yoko) / 2.0; 異なるデータ型を混在可能 構造体を使うときは (構造体変数名).(中身の変数名) 構造体を 使う宣言 printf(“%f\n”,t.menseki); } プログラム入門(第11回) 9 例:area 構造体 area 値 値 値 tate yoko menseki t.tate t.yoko t.menseki プログラム入門(第11回) t area 構造体を t とい う名前で使う それぞれの変数を使うとき は t.tateのように t. を変数 名の前につける 10 例題 • 以下のプログラムを隣または周りの人に説明する. – test11a.c (プログラム例(1) ) • ヒント – 三角形と四角形の面積を同時に求めるプログラム – 使う構造体は以下のとおり struct area { int tate; int yoko; float menseki; }; – 三角形と四角形の構造体の変数名は別々に確保 – 入力するデータ(縦,横)はそれぞれ1回だけキーボードから入力 プログラム入門(第11回) 11 構造体の使い方 struct area { int yoko; int tate; float menseki; }; struct area t; struct area s; いちいち s.yoko = t.yoko; s.tate = t.tate; 等のように各変数の代入文 を書く 必要性がない. scanf("%d",&t.tate); scanf("%d",&t.yoko); s = t; これだけで yoko tate menseki の各データが t から s に代入される プログラム入門(第11回) 12 Program language C • Structure • Structure & Array プログラム入門(第11回) 13 p.235 構造体と配列 • 配列で構造体を使うことが可能 srruct area data[3]; 配列の宣言 構造体名の宣言 構造体の宣言 プログラム入門(第11回) 14 seiseki 構造体 構造体を使う宣言(記憶領域の確保) struct 構造体タグ名 構造体配列名; struct seiseki t [3]; 構造体 seiseki 値 値 t[0] t[1] 値 値 値 値 値 値 no kokugo suugaku 値 値 値 no kokugo suugaku avg 値 avg no kokugosuugaku avg 使い方例 t[2].no t[2] 値 値 プログラム入門(第11回) 値 値 no kokugo suugaku avg 15 例題 • 面積の計算の例 (prog11a_1.c) (プログラム例(2) ) – 隣の人(または周りの人)にこのプログラムを 説明する – 特に構造体と配列,そしてその使い方に注意 プログラム入門(第11回) 16 Program language C • Structure • Structure & Array プログラム入門(第11回) 17 課題 • 右の構造体は試験成績データと1人分の平 均点を保存する構造体である. • 複数人の学生の成績を入力し,それぞれの 教科の平均点,それぞれの学生の平均点を 算出する. • それぞれの学生の平均点は average に入れ る • 今回の入力データは3件で以下の通り. – 001 番 国語 30 点,数学 40 点 物理 45 点 – 002 番 国語 80 点,数学 77 点 物理 63 点 – 003 番 国語 55 点,数学 38 点 物理 87 点 • それぞれの確認データ毎に画面に出力した 結果とソースファイルを webrep に登録のこ と struct seiseki { int number; int japanese; int math; int physics; float average; }; プログラム名 prog11d.c 画面出力 prog11d.txt • 期限 1月10日(水)まで プログラム入門(第11回) 18 その他 プログラム入門(第11回) 19 構造体と関数 • 構造体全部のデータを関数の引数として 渡すことが可能 • アドレスによってデータの場所を渡す プログラム入門(第11回) 20 p.235 sankaku 構造体 構造体を使う宣言(記憶領域の確保) struct 構造体タグ名 構造体配列名; struct area t [3]; t[0] 値 値 値 tate yoko menseki 構造体 area 値 値 t[1] 値 値 値 tate yoko menseki 値 tate yoko menseki 使い方例 t[2].tate t[2] 値 値 値 tate yoko menseki プログラム入門(第11回) 21
© Copyright 2024 ExpyDoc