前章までの内容で、四則演算を使った計算ならば、どんな複雑な式も計算出来ます。
しかし、これで満足してしまうのは、あまりにも志(こころざし)が低すぎます。
前章までの方法では、数値は直接プログラムとして毎回書き込んでいましたが、
その時、例え同じ数値が合ったとしても、全てバカ正直に書き込んでいました。
先ほど作成した、10+3、10-3、10×3、10÷3 を計算するプログラムでは、
10、3 と言う数値は同じなのに、何回も書き込んでいました。
つまり、この方法では、10と3 を 20と7 に代えたいと思った場合には、
全ての数値を、わざわざ書き直さなくてはならないのです。
これは、はっきり言って面倒です。
この面倒をなくすためには、数値を記憶しておく手段が必要です。
1度数値を記憶しておき、その数値を取り出して使うような方法があれば、
その記憶させる数値を代えるだけで、全ての数値を変更出来ます。
前項で考えたことを実現する機能がC言語には存在します。それが、変数です。
変数と聞くと、数学を思い出してイヤになる人も多いかもしれませんが、
プログラミングの変数と、数学の変数とは、全くの別物です。
変数とは、数値を保存しておくためのメモリ領域に名前をつけることです。
これ、ほとんどの入門書では、数値を入れておく箱と説明しますが、
こんなのは、誰もコンピュータに触ったことがなかった時代の説明方法でしょう。
コンピュータをそれなりに使っている人には、メモリと言った方がすっきりします。
コンピュータのメモリとは、横1列に膨大に並べられたロッカーのような構造です。
[ 変数 ]
数値を記憶するメモリに名前をつけて管理する方法
普通ならば、そのロッカーの番号を元に、数値を入れたり出したりするのですが、
毎回毎回、長ったらしい番号をつかっていては面倒なことこの上ありません。
皆さんも、7桁の社員番号でロッカーを区別したくはないだろうと思います。
そこで、それぞれのロッカーに、名前をつけておくことにします。
こうすれば、名前を見ることで、それが何のためのロッカーなのかすぐにわかり、
また、扱いもとても簡単になると言うわけなのです。
メモリに名前をつけて管理することは、前項で説明しました。
つまり、変数を使うには、その変数に名前をつけてやらなくてはいけません。
C言語では、変数に名前をつけることを、変数を宣言すると呼んでいます。
変数を宣言するには、次のような書き方を使います。
型名 変数名;型名とは、記憶しておきたい数値の種類を表す名前です。
変数名とは、その名の通り、変数につける名前のことです。
この名前のつけ方には、下のような決まりがあります。
1、半角アルファベット、半角数字、半角_を使うことが出来る。あれ、これ、どこかでみたことがあるような気がしませんか?
2、1文字目には、数字を使うことは出来ない。
3、あらかじめ決められた予約語も使用することが出来ない。
こけだけのことがわかれば、変数を宣言することが出来ます。
次のプログラムは、int(整数値)という型の変数valueを宣言しています。
変数の宣言は、基本的に、関数の先頭でしか行うことが出来ません。#include <stdio.h> int main(void) { int value; /* 変数宣言の部分 */ return 0; }
このプログラムは、動作させるとエラーになります。#include <stdio.h> int main(void) { printf("Hello\n"); int value; /* 変数宣言の部分 */ return 0; }
[ コンパイラの機能 ]
実は、このプログラムは多くのコンパイラでは動いてしまいます。
それは、C言語の拡張版である、C++(シープラプラ)では使えるからです。
また、近年決められたC言語の新規格であるC99でも使えます。
しかし、元々のC言語では使えないと覚えて下さい。
1度宣言した変数は、その範囲内では自由に使用出来ます。
今回はmain関数の中で宣言しているので、main関数の中では自由に使えます。
なお、当分はmain関数しか使わないので、あまり関係ありません。
変数の使い方は2種類あります。その内の1つが、代入です。
代入とは、変数に数値を記憶させることを意味しています。
変数に数値を代入するには、次のような書き方を使います。
[ 代入 ]
変数に数値を記憶させること。
変数名 = 数値;絶対に勘違いしないで下さい。この = は、数学の等号とは、全く別の意味の記号です。
これだけのことがわかれば、変数に数値を代入する(記憶する)ことが出来ます。
次のプログラムは、int(整数値)型の変数 value に 10 を代入します。
#include <stdio.h> int main(void) { int value; /* 変数宣言の部分 */ value = 10; /* 代入の部分 */ return 0; }
変数もう1つの使い方は、数値の代わりとして使うことです。
これに関しては、特にこれといった書き方があるわけではありません。
数式の中に変数名を書くと、その変数の記憶している数値に置き換わります。
数値の表示や計算など、今まで数式を使ってきた全ての場面で応用可能です。
次のプログラムは、変数に記憶された値を表示する例です。
このプログラムの実行結果は、次のようになります。#include <stdio.h> int main(void) { int value; /* 変数宣言の部分 */ value = 10; /* 代入の部分 */ printf("%d\n",value); /* 表示の部分 */ return 0; }
この変数を使えば、この章の先頭で取り上げた問題が解決します。
10
このプログラムの実行結果は、次のようになります。#include <stdio.h> int main(void) { int left,right; left = 10; right = 3; printf("%d\n",left + right); printf("%d\n",left - right); printf("%d\n",left * right); printf("%d\n",left / right); printf("%d\n",left % right); return 0; }
このプログラムの良い所は、変数に代入する数値を書き換えるだけで、
13
7
30
3
1
変数には、数式の計算結果を直接代入することが可能です。
次のプログラムでは、value には、10+30 の結果が代入されます。
このプログラムの実行結果は、次の通りになります。#include <stdio.h> int main(void) { int value; value = 10 + 30; printf("%d\n",value); return 0; }
更に、既に変数が覚えている値に直接計算することも可能です。
40
このプログラムの実行結果は、次の通りになります。#include <stdio.h> int main(void) { int value; value = 10; value += 30; printf("%d\n",value); return 0; }
このプログラムのポイントは、+=演算子にあります。
40
この演算子の部分は、次のように書き換えることも可能です。
この書き方は、プログラムに慣れていない人にとって奇妙に移るようです。value = value + 30;
この書き方で変数の値の増加が実現出来るなら、+=演算子などは不要にも思えますが、
+=演算子を使えば、変数を書くのは1つだけで良いので、記述が楽という利点があります。
同じような機能を持つ演算子は他の計算にも用意されています。
演算子 | 機能 | |
+= | 変数の値との加算を変数に代入 | |
-= | 変数の値との減算を変数に代入 | |
*= | 変数の値との乗算を変数に代入 | |
/= | 変数の値との除算を変数に代入 | |
%= | 変数の値との余算を変数に代入 |
このプログラムの実行結果は、次の通りになります。#include <stdio.h> int main(void) { int value; value = 10; printf("%d\n",value); value++; printf("%d\n",value); value--; printf("%d\n",value); return 0; }
プログラミングでは、変数の値を1増やすことは非常に多く、この演算子は便利です。
10
11
10