第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
© Copyright 2025 ExpyDoc