計算機実習 I

第六回 (2015 年 5 月 14 日)

構造体、共用体、列挙型

http://www.sw.it.aoyama.ac.jp/2015/CP1/lecture6.html

Martin J. Dürst

AGU

© 2005-15 Martin J. Dürst 青山学院大学

目次

ミニテスト

C 言語の応用: gcc

前回の演習結果

05A1 05B1 05B2 05B3 05C1 05C2
100点 87 58 76 38 22 7
60点 8 37 17 54 54 52
エラー - - 2 1 9 9
未提出 - - - 2 10 27

前回の演習問題について

前回の演習: 05C1

[昨年度資料につき削除]

前回の演習: 05C2

[昨年度資料につき削除]

自覚: 分かることと分からないこと

本授業について、一番分かることと一番分からないことそれぞれ三つ列挙しなさい。

プログラミング上のデータの大切さ

データ型の大まかな分類

C の基本的なデータ型

(basic types)

C の派生データ型

(derived types)

 

構造体 (struct) の簡単な例

typedef struct {     // 型 Person の宣言
char name[40];
double height; /* m */
int weight; /* kg */
} Person;

Person student = { "Taro Aoyama", 1.70, 70 }; // 定義と初期化
double bmi = student.weight / // 利用
(student.height * student.height);

構造体

(structure)

 

新型の宣言: typedef

(教科書 pp. 272-273 参照)

typedef の作成方法と使用方法

例: 4×4 の行列 (三次元グラフィックス、ゲーム等で多用)

  1. 変数の定義: 宣言したい型の変数を定義
    例: double a[4][4];
  2. 型名に置換: その変数名を型名に変更
    例: double Matrix[4][4];
  3. typedef の完成: 定義全体の前に typedef を付与
    例: typedef double Matrix[4][4];
  4. typedef の使用: 既存の型名と同様
    例: Matrix a;

参考: 構造体の宣言の種類

  1. 歴史的な原型 (構造体タグ使用)
    struct Person {...}; (本授業で ×)
  2. 構造体タグを使った定義の後に typedef
    struct Person {...};
    typedef struct Person Person;
    (本授業で ×)
    (構造体タグtypedef による型名は同一でも別でもよい)
  3. 構造体タグと typedef の組合せ
    typedef struct Person {...} Person; (本授業で ×)
  4. 構造体タグの省略 (推奨)
    typedef struct {...} Person; (本授業で ◎)

 

参考: 使用可能な定義:

構造体と関数

double bmi (Person p)
{
return p.weight
/ (p.height * p.height);
}

展望: データ + 機能 (関数) ⇒ オブジェクト (object)

(C++ の classstruct の拡張)

構造体の戻り値

引数でも戻り値でも構造体が使用可能

具体例:

Complex add(Complex a, Complex b)
{
Complex result;
/* a と b の実部と虚部から result の実部と虚部を計算 */
return result;
}

列挙体 (enum)

列挙体の応用例

例: 03C203C3 (階段じゃんけん) の分かりやすい改造:

typedef enum
{ Rock, Scissors, Paper } Janken;
Janken moveA, moveB;
...
if (moveA == Paper)
pointA += 5;

共用体 (union)

演習についての補助

演習問題の概要

入出力の詳細に注意

次回までの準備