Structures, Unions, Enumerations, and Type Definitions

(構造体 (struct)、共用体 (union)、列挙型 (enum)、typedef)

Computing Practice I

6th lecture, May 19, 2016

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

Martin J. Dürst

AGU

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

Today's Schedule

 

ミニテスト

 

不正行為について

 

C 言語の応用: gcc

 

前回の演習結果

05A1 05B1 05B2 05B3 05C1 05C2
100点 79 47 54 36 9 2
60点 9 41 34 52 59 61
エラー - - - - 12 14
未提出 1 1 1 1 9 12

 

前回の演習問題について

 

前回の演習: 05C1

 

前回の演習: 05C2

 

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

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

 

Importance of Data

 

Main Data Types in C

Basic Types

Derived Types

 

Simple Example of a Structure (struct)

typedef struct {     // declaration of type Person
char name[40];
double height; /* m */
int weight; /* kg */
} Person;

Person student = { "Taro Aoyama", 1.70, 70 }; // definition and initialization
double bmi = student.weight / // use
(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; (本授業で ◎)

 

参考: 使用可能な定義:

 

Structures and Functions

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

 

Example of Structures as Arguments and Return Values

Complex add(Complex a, Complex b)
{
Complex result;
/* calculate the real/immaginary parts of result from the real/immaginary parts of a and b */
return result;
}

 

Unions (union)

 

Enumeration Types (enum)

 

Example of Enumeration Type

Make 03C2 and 03C3 (rock, paper, scissors) easier to read:

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

 

演習についての補助

 

演習問題の概要

入出力の詳細に注意

 

次回までの準備

 

Glossary

structure
構造体
union
共用体
enumeration type
列挙型
lifetime
寿命
graduation certificate
卒業証明証
social security
社会保障
basic type
基本型、基本的なデータ型
derived type
派生型
floating point numbers
浮動小数点数
pointer
ポインタ
pass by value
値渡し
complex number
複素数
real part
実部
immaginary part
虚部
superimpose
重ねる
data conversion
データ変換
object-orient(ed/ation)
オブジェクト指向