計算機実習 I
第二回:
定数の記述、基本的なデータ型、
変数の定義と使い方 (数値、文字列)
Martin J. Dürst
duerst@it.aoyama.ac.jp, O 棟
529号室
データ型 (data type)
- 共通の性質を持つ値 (value) の集合
- 名前が付いている (無名も可)
- 可能な演算が決まる
- 変数、引数はデータ型を持つ
- 簡単なデータ型から複雑なデータ型が作れる
- 簡単な演算から複雑な演算が作れる (関数)
処理系
- C の仕様書の「処理系によって」が多い
- C は計算機に近い高級プログラム言語
- 処理系とは:
- 機械 (バイトのビット数、レジスタの大きさ等)
- オペレーティング・システム
- コンパイラ
- 標準ライブラリ
C のデータ型
基本データ型 (simple types)
- 整数、0 以上の整数 (integer)
- 浮動小数点数 (floating point)
「導出」データ型 (derived types)
「疑似」データ型 ("simulated" types)
- 文字 (character)、文字列 (character string, string)
- ブール型 (boolean)
- 列挙型 (enumeration)
数学とプログラミングの違い
- 数学に数は無限にあるが、大体のデータ型は有限
- 数学の変数は真に未定であるが、プログラムの変数は
(たとえゴミであっても) 常に値を持つ
- 数学の = は「等しい」であるが、プログラムの =
は代入である
C の整数
signed char (char) |
unsigned char (char) |
short int / short |
unsigned short int / unsigned short |
int |
unsigned int |
long int / long |
unsigned long int / unsigned long |
C の int 型の条件
処理系によって各データ型の大きさ
(ビット数、バイト数)
が違うが、次の条件を満たさないといけない:
- char
は「機械で文字を表す型」(但し、普通は英字等だけ、漢字は別の話)
- sizeof(char) は 1 に固定
- int
は「機械が普通に表現できるもの」(すなわち、レジスタの大きさ、但し、ポインタと同じかそれ以上の大きさ)
- sizeof(char) <= sizeof(short) <= sizeof(int) <=
sizeof(long)
文字と文字列
- 一文字の定数には(一重)引用符を使う
- 文字列には二重引用符を使う
- 'A' と "A" は別物
- 文字は数字として扱われる
- 文字列は配列として扱われる
- 文字列の長さの決め手: 最後に 0
- 配列の長さを指定するときに加味しないといけない
- しかし、
strlen
関数は文字そのものしか数えない
漢字の文字列
従来のやりかた:
- 漢字一字あたり複数 (通常 2) の
char
(バイト) を使う
- 処理系によって直接文字列に書ける
- 符号化 (日本の Windows の場合:
Shift_JIS
)
によって処理が複雑
新しいやりかた (参考):
- 処理系のすべての文字を表せるデータ型
wchar_t
- この文字の数字には ユニコードを使うのが普通
- 文字定数
L'例'
- 文字列定数
L"文字列の例"
- それ用の関数
8 進数と 16 進数の定数
- ビットで考えるときに非常に便利
- 昔は 8 進数が多かったが、最近は 16 進数が人気
- 16 進数では 1 バイトを二桁で表せる
存在しない定数
short
の定数はなぜないのか
- 計算、引数は少なくとも
int
の大きさで行われる
short
の初期化はコンパイラがチェックできる
char
の定数も文字定数以外ない
変数 (variable) の定義の書き方
- 基本のデータ型の部分
- 識別子等の部分
- 初期化の部分
例: unsigned int i, j[5], k = 7;
配列のindex
- 重要: 最初の index は 0
int a[5];
は a[0]
から a[4]
まで (計 5 個) を用意する
for
の典型例
int a[5], i;
for (i=0; i<5; i++) /* 作業 */;
次回の準備
- C: ドライブに作ったプログラムを忘れずに Z:
ドライブに移す
- 今日の復習
- 新訂新 C 言語入門の第 4 章 (pp. 75-93) を読む