プログラムの中でデータを保持する事のできる領域を変数と呼ぶ。 例えて言うならば箱のようなものである。 変数に対する操作としては、次の3種類がある。
C 言語では代入や参照を行う前にあらかじめ変数を準備する作業が必要である。 宣言の際には変数の型と名前を組み合わせなければならない。 変数は幾つ作っても良く、区別するために名前をつける。 名前には英数字および _(アンダースコア)を用いることができる。ただし、数字から始まることはできない。
int i; /* int 型の変数として i を準備する */ double very_long_variable_number_1; /* 長い変数名の例 */
変数名 = 式;
という形式で式の値を変数名に記憶させることができる。
i = 1; /* 変数 i に 1 を代入 */ very_long_variable_number_1 = 3.1415926535;
'=' の左辺以外で変数が現れるときには、変数の参照となる。 実行の時点でその変数に代入されている値が使われる。
int i, j;
double pi;
i = 1; /* 変数 i に 1 を代入 */
j = i + 1; /* 変数に i + 1 の結果を代入。
* この場合 i には 1 が入っているので
* j は 11 となる */
i = i + 1; /* i の内容に対して 1 を加えた結果を
* 変数 i に代入。上の結果の代入先が
* i になっているだけである。
* "=" を数学的な意味で考えると
* 意味不明になるので注意。
*/
pi = 3.1415926535;
「整数」を表すための型として次のものが用意されている。
| 型名 | データサイズ(バイト) | 表現できる値の範囲 | |
|---|---|---|---|
| 符合付 | 符合無 | ||
char |
1 | -128 〜 127 | 0 〜 255 |
short |
2 | -32768 〜 32767 | 0 〜 65535 |
int |
2 または 4 (※1) | -32768 〜 32767 または | 0 〜 65535 または |
| -2147483648 〜 2147483647 | 0 〜 4294967295 | ||
long |
4 (※2) | -2147483648 〜 2147483647 | 0 〜 4294967295 |
実数(浮動小数点)を表現する変数には次のものが用意されている。
| 型名 | データサイズ(バイト) | 表現できる値の範囲 | おおよその有効桁数 |
|---|---|---|---|
| float | 4 | -3.4×1038〜3.4×1038 | 10進数で7桁程度 |
| double | 8 | -3.4×10308〜3.4×10308 | 10進数で14桁程度 |
実数型には、符合無の型はなく、必ず符合付きである。
メモリ上の番地を表現するポインタを格納できる 変数である。上に出てきたすべての型に対するポインタ変数が存在する。
変数の中に入っている値を参照するには、printfを利用するのが簡単である。
前回も使用した printf は書式(format)と変数を指定すると、書式にしたがって変数の中身を表示する。
書式指定はman 3 printf として参照できるマニュアルに現れる言葉に従うと
%[フラグ文字][フィールド幅][. 精度][長さ修飾子]変換指定子
と書くことができる。
省略可能。
省略された場合は、出力は左詰め、数値が入らない桁は空白、 正符合は出力されない。
省略可能。省略された場合は、出力に必要な桁数で表示される。
出力に使用する最小の幅を10進数で指定する。 情報が出力されない桁はデフォルトでは空白文字が出力される。 もし、出力に必要な桁数が指定桁数を越えた場合は、フィールド幅は拡げられる。
省略可能。
ピリオド(".")とそれに続く10進数という形式で指定する。 整数の場合(変換指定子が d, i, o, u, x の場合)は 表示される最小の桁数を指定することになる。 実数の場合(変換指定子が e, f,g の場合)は、 小数点以下の表示桁数を指定する。
省略可能。
整数、実数型とも複数の型が存在しているので、大きさの異なる型として表現したい場合に使用する。
使い方を誤ると、意味不明の出力を得るので注意。
省略不可。
引数を表現する際にどのように変換するかを指定する。代表的なものとしては次のようなものがある。
d,i: 符合付 10進数に変換する
o: 符合無 8進数に変換する
u: 符合無 10進数に変換する
x: 符合無 16進数に変換する
f: 固定小数点形式の10進数に変換する(ddd.dddd)
e: 浮動小数点形式の10進数に変換する(d.dddde[+|-]dd)
g: f もしくは、 g のうち、桁数が少ない方で表現する
~tacha/kadai02/test_printf.c
int main() {
int i;
double t;
i = 12;
t = 314.15926535;
printf("i = %d\n", i);
i = 23;
printf("i = %d\n", i);
printf("i = %1d\n", i);
printf("i = %2d\n", i);
printf("i = %5d\n", i);
printf("i = %05d\n", i);
printf("i = %o\n", i);
printf("i = %x\n", i);
printf("t = %f\n", t);
printf("t = %e\n", t);
printf("t = %6.2f\n", t);
}
c で利用可能な演算子には次のようなものがある。
| 2項演算子 ( a ◎ b の形で用いるもの) | |||
|---|---|---|---|
| * | 積 | i = 12 * 25 | 300 |
| / | 商 | i = 30 / 6 | 5 |
| % | 剰余 | i = 34 % 6 | 4 |
| + | 和 | i = 11 + 20 | 31 |
| - | 差 | i = 81 - 42 | 39 |
| < | 未満 | 8 < 5 | 偽(0) |
| <= | 以下 | 5 <= 5 | 真(1) |
| >= | 以上 | 6 >= 5 | 真(1) |
| > | より大きい | 4 > 5 | 偽(0) |
| == | 等しい | 4 == 5 | 偽(0) |
| != | 等しくない | 4 != 5 | 真(1) |
| && | 論理AND (論理積) | (3 == 3) && (8 < 5) | 偽(0) |
| && | 論理OR (論理和) | (3 == 3) || (8 < 5) | 真(1) |
下記の表で上にあるものほど優先順位が高い
| 演算子 | 結合順序 |
|---|---|
| () [] -> . | 左から右 |
| ! ~ ++ -- -(type) * & sizeof | 右から左 |
| * / % | 左から右 |
| + - | 左から右 |
| << >> | 左から右 |
| < <= > >= | 左から右 |
| == != | 左から右 |
| & | 左から右 |
| ^ | 左から右 |
| | | 左から右 |
| && | 左から右 |
| || | 左から右 |
| ?: | 右から左|
| = += -= 等 | 右から左 |
| , | 左から右 |