E-mail and Network

プログラミング入門
• 小テスト (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