第3章 数と宣言 定義(1) 定義(2) 定義(3) 変数と定数

第3章 数と宣言
テーマ
zいくつかの定義
z変数と定数
9データの型
9数値のプリント
9宣言
定義(1)
•
•
•
•
トークン(token):最小単位の単語
式(expression):トークンの合成
式文: 式;
文(statement):
式文,ラベル文,複文,制御文
z定数の規則
定義(2)
定義(3)
• キーワード(keyword):Cの予約語 <例>
auto, break, case, char
• 演算子(operator): 値の処理の方法を示
す識別子 <例> i = 0; x += 3; j++;
• 識別子(identifier):変数,関数,型に付け
る名前 <例> int i; printf()
• 定数(constant):一定値として扱われる数
値,文字
<例> pai = 3.14; key = 'a';
• 文字列定数(string literal):定数として扱
われることもある
<例> printf("file name is ")
• 区切り子(punctuator, delimiter):スペース,
改行,タブなど
変数と定数
• 変数(variable)
<例> x = y + z;
• 定数(constant)
<例> x = 256;
• コンパイラ(Preprocessor)用定数
<例> #define NULL '¥0'
#define
• プリプロセッサー(preprocessor)は
#がつく識別子を処理する
<例> #include, #define, #if
• #define ADDRESS "東京都目黒区大岡山212-1"とすると
main()のなかで,printf(ADDRESS);は
printf("東京都目黒区大岡山2-12-1");と同
じ
• 慣習的に大文字のみの識別子
C言語,東京工業大学,鈴木 博
1
識別子の慣習
識別子の制限
• 半角31文字以内
<例>
/*123456789012345678901234567890123*/
very_long_abcdef_variable_name1
• 全角はダメ
<ダメな例> 太郎=1; 花子=2;
• 通常小文字のみ
<例> abcdefg
<例外> lengthOf Pipe
• #defineで定義されるものは大文字
• アセンブラ言語等により外部で定義された変
数には先頭にアンダースコア(_)
<例> _flag
• 長い変数にも _:
<例> length_of_pipe
データの型(type)
• 主なもの
char, int, float, double
<例> char c;
int
i;
• 修飾語(modifier)
unsigned, short, long
<例> unsigned int c;
long
int i;
デフォルト(default)
• 特に指定しないときに使う規則
• signed char, unsigned char
→ char はデフォルトで signed char のこと
C言語,東京工業大学,鈴木 博
キャラクター
• ASCII → 表参照
• 文字の表示;
• 10進表示;
• HEXA表示;
a,
A,
1,
%
97,
65,
49,
37
61,
41,
31,
25
データの型と数値範囲の例
名称
バイト数
char
1
-128
数値の範囲
int
2
-32,768
∼ 32,767
float
4
3.4E-38
∼ 3.4E+38
1.7E-308
∼ 127
double
8
unsigned char
1
0 ∼ 255
∼ 1.7E+308
unsigned (int)
2
0 ∼ 65,535
short int
2
long (int)
4
int と同じ
-2,147,643,648
∼ 2,147,643,647
2
変数(unsigned char)の内部
0 0 0 0 0 0 0 0
= 0
1 1 1 1 1 1 1 1
M SB
LS B
= 255
変数(signed char)の内部
符号ビット: 1 なら負の数
0 なら正の数
8 ビット,1 バイト
1 0 0 0 0 0 0 0
= -1 2 8 + 0
0 1 1 1 1 1 1 1
= 127
(a) un signed char
(b) signed char
変数(int)の内部
signed/unsigned char
128
127
符号ビット: 1 なら負の数
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
= -3 2 7 6 8 + 0
0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
= 32767
signed char
0 なら正の数
(c) in teger
0
-128
0
128
255, 256
unsigned char
数値のプリント
#include <stdio.h>
#define ALPHA 65
main ( ) {
char a;
int ch;
a= ALPHA;
ch= ALPHA;
printf("%d¥n", sizeof(a));
printf("%d¥n", sizeof(ch));
printf("%c, %d, %o, %x, %u¥n", a, a, a, a, a);
printf("%c, %d, %o, %x, %u¥n", -a,-a, -a, -a, -a);
printf("%c, %d, %o, %x, %u, %u¥n",
ch, ch, ch, ch, ch, -ch);
printf("%e, %f, %5.2f, %5.0f¥n",
(double)-ch, (double)(unsigned)-ch,
(double)-ch,(double)-ch);
1
4
A, 65, 101, 41, 65
A , -65, 37777777677, ffffffbf, 4294967231
A, 65, 101, 41, 65, 4294967231
-6.500000e+01, 4294967231.000000, -65.00, 65
}
C言語,東京工業大学,鈴木 博
3
入出力フォーマット・コード
printf(), scanf()に使う
コード
%d, %i
%o
%x, %X
%u
%c
宣言
意味(xx 型データを→yy 型に変換する)
int → 符号つき 1 0 進数
int → 符号なし 8 進数(頭に 0 は不要)
int → 符号なし 1 6 進数(頭に 0 x は不要)*2
int → 符号なし 1 0 進数
int → unsigned cha r に変換した1文字
%s
char * → 精度で指定した文字数の,または´ 0
%f
double → [ Š ]mm.d d の 1 0 進数,dd の数は精
までの文字列
度*1 で指定
%e, %E
double → [ Š ]mm.dde ± xx の 1 0 進数,dd の
%g, %G
double → f と e の短いほうの表現を使い,前後
%p
void → ポインタとしてプログラムの中でフォ
%n
int * → この回に出力した文字数を引き数に
数は精度*1 で指定*2
のゼロは省略*2
ーマットを定める
• 変数は:
あらかじめその名前とデータの型を宣言
(declaration, declare)する.
• 複雑な宣言の例
int
a, i, number; /*複数のint変数*/
char c, buffer[1000]; /*配列*/
long int
population = 100000000;
/*初期化*/
書き込む
定数の規則
文字列の構造
• デフォルトはint
ただし2バイトの数値
1バイト以下の数値でもint
文字列
T
• intに入らない数値は自動的にlong
123L, 123lとすれば,強制的にlong
I
T
E
C
H
¥0
文字列の後ろには
ナル(null)¥ 0 がつく
• 浮動小数点
3.1415, 123E-12, 1.123e13
• 単引用符'a','¥0','¥033' → 文字定数
Cプログラムの定形
' a' と "a" のちがい
'a ' =
"a " =
char
a
a
¥0
string
#include <stdio.h>
#define ESC ‘033’ Tab
/*header file*/
/*preprocessor constant*/
int
/*external variable*/
flag;
main(int argc, char *argv[])
/*function and
arguments*/
{
/*block starts here*/
int i;
/*automatic variable*/
printf(“%d”, i);
/*processing*/
}
/*block ends here*/
Indent
C言語,東京工業大学,鈴木 博
4
Cにおける記号の使い方
記号
{
}
意 味
例
ブロックの表示,関数の定義,
main(){
}
1計算単位であることを示す
(
式を囲んだり,計算を優先させる
*(p--)
[ ]
)
配列の要素の番号を囲む
buf [ ]
Õ
ASCI I コードを生成する文字を囲む
Ōa Õ
Ó
文字列定数を囲む
Ņabc Ó
,
変数や演算子の切れ目を示す
.
ストラクチャのメンバを示す
int i, j;
mem.name
:
ラベルの終わりを示す
;
文の終わりを示す(;は文に含まれる)
#
プリプロセッサ
C言語,東京工業大学,鈴木 博
case
Ō1 Õ:
int c;
#define
5