苦しんで覚えるC言語

数値を記憶する


記憶の必要性


前章までの内容で、四則演算を使った計算ならば、どんな複雑な式も計算出来ます。
しかし、これで満足してしまうのは、あまりにも志(こころざし)が低すぎます。

前章までの方法では、数値は直接プログラムとして毎回書き込んでいましたが、
その時、例え同じ数値が合ったとしても、全てバカ正直に書き込んでいました。
先ほど作成した、10+3、10-3、10×3、10÷3 を計算するプログラムでは、
10、3 と言う数値は同じなのに、何回も書き込んでいました。

つまり、この方法では、10と3 を 20と7 に代えたいと思った場合には、
全ての数値を、わざわざ書き直さなくてはならないのです。

これは、はっきり言って面倒です。
この面倒をなくすためには、数値を記憶しておく手段が必要です。
1度数値を記憶しておき、その数値を取り出して使うような方法があれば、
その記憶させる数値を代えるだけで、全ての数値を変更出来ます。

目次に戻る

変数というメモリ


前項で考えたことを実現する機能がC言語には存在します。それが、変数です。
変数と聞くと、数学を思い出してイヤになる人も多いかもしれませんが、
プログラミングの変数と、数学の変数とは、全くの別物です。

変数とは、数値を保存しておくためのメモリ領域に名前をつけることです。
これ、ほとんどの入門書では、数値を入れておく箱と説明しますが、
こんなのは、誰もコンピュータに触ったことがなかった時代の説明方法でしょう。
コンピュータをそれなりに使っている人には、メモリと言った方がすっきりします。
変数
数値を記憶するメモリに名前をつけて管理する方法
コンピュータのメモリとは、横1列に膨大に並べられたロッカーのような構造です。
ロッカーの端っこから、1つ1つに番号がつけられています。
そして、コンピュータで扱われる数値は、そのロッカーのどこかに入っています。

普通ならば、そのロッカーの番号を元に、数値を入れたり出したりするのですが、
毎回毎回、長ったらしい番号をつかっていては面倒なことこの上ありません。
皆さんも、7桁の社員番号でロッカーを区別したくはないだろうと思います。

そこで、それぞれのロッカーに、名前をつけておくことにします。
こうすれば、名前を見ることで、それが何のためのロッカーなのかすぐにわかり、
また、扱いもとても簡単になると言うわけなのです。

目次に戻る

変数の宣言


メモリに名前をつけて管理することは、前項で説明しました。
つまり、変数を使うには、その変数に名前をつけてやらなくてはいけません。

C言語では、変数に名前をつけることを、変数を宣言すると呼んでいます。
変数を宣言するには、次のような書き方を使います。

型名 変数名;
型名とは、記憶しておきたい数値の種類を表す名前です。
とりあえずは、整数を意味するintを覚えておいて下さい。

変数名とは、その名の通り、変数につける名前のことです。
この名前のつけ方には、下のような決まりがあります。

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
この変数を使えば、この章の先頭で取り上げた問題が解決します。
つまり、10 や 3 と言う数値を変数に記憶させてしまい、その変数で計算すれば、
数値を変更したくなったとしても、書き換える場所は1ヶ所で済むのです。
次のプログラムは、変数を使って、四則演算の計算を行う例です。

#include <stdio.h>

int main(void)
{
	int left;
	int 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
このプログラムの良い所は、変数に代入する数値を書き換えるだけで、
後の計算の数値も全て置き換わるので、変更が1回で済むと言う点にあります。
実際に、left,right に代入する数値を変えてみて下さい。

目次に戻る

代入と演算を同時に


変数には、数式の計算結果を直接代入することが可能です。
次のプログラムでは、value には、10+30 の結果が代入されます。

#include <stdio.h>

int main(void)
{
	int value;
	value = 10 + 30;
	printf("%d\n",value);
	return 0;
}
このプログラムの実行結果は、次の通りになります。

40
更に、既に変数が覚えている値に直接計算することも可能です。
次のプログラムは、変数valueに記憶されている数値に30を加える例です。

#include <stdio.h>

int main(void)
{
	int value;
	value = 10;
	value += 30;
	printf("%d\n",value);
	return 0;
}
このプログラムの実行結果は、次の通りになります。

40
このプログラムのポイントは、+=演算子にあります。
この演算子は、左側の変数の値を、右側の数だけ増加させるという機能があります。
先ほどは、既に代入されていた 10 に 30 を加えた値が代入されたのです。

この演算子の部分は、次のように書き換えることも可能です。

value = value + 30;
この書き方は、プログラムに慣れていない人にとってはかなり奇妙な表現です。
だって、value と value+30 が等しいと書かれているのですから。
しかし、C言語では、= は←の意味であることを思い出せば解決します。
この式は、value に 30 を足した数値を value に代入するという意味なのです。

この書き方で変数の値の増加が実現出来るなら、+=演算子などは不要にも思えますが、
+=演算子を使えば、変数を書くのは1つだけで良いので、記述が楽という利点があります。
同じような機能を持つ演算子は他の計算にも用意されています。
演算子機能
+=変数の値との加算を変数に代入
-=変数の値との減算を変数に代入
*=変数の値との乗算を変数に代入
/=変数の値との除算を変数に代入
%=変数の値との余算を変数に代入
更に、変数の値を1増やす、あるいは1減らす、1増減専用の演算子があります。
変数の値を1増やす演算子は++演算子で、インクリメントと呼ばれます。
逆に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;
}
このプログラムの実行結果は、次の通りになります。

10
11
10
プログラミングでは、変数の値を1増やすことは非常に多く、この演算子は便利です。

目次に戻る