計算機実習 I

第六回 (2014 年 5 月 15 日)

構造体、共用体、列挙型

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

Martin J. Dürst

AGU

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

目次

ミニテスト

不正行為

前回の演習問題について

前回の演習: 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 の拡張)

列挙体 (enum)

列挙体の応用例

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

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

共用体 (union)

演習についての補助

演習問題の概要

次回までの準備