苦しんで覚えるC言語

数値を記憶する


第1項:記憶の必要性

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

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

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

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

目次に戻る

第2項:変数というメモリ

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

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

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

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

目次に戻る

第3項:変数の宣言

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

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言語では使えないと覚えて下さい。

目次に戻る

第4項:変数への値の代入

1度宣言した変数は、その範囲内では自由に使用出来ます。
今回はmain関数の中で宣言しているので、main関数の中では自由に使えます。
なお、当分はmain関数しか使わないので、あまり関係ありません。

変数の使い方は2種類あります。その内の1つが、代入です。
代入とは、変数に数値を記憶させることを意味しています。
代入
変数に数値を記憶させること。
変数に数値を代入するには、次のような書き方を使います。

変数名 = 数値;
絶対に勘違いしないで下さい。この = は、数学の等号とは、全く別の意味の記号です。
ここでの = は、右側の数値を、左側の変数に記憶させる、ということを意味しています。
つまり、この= は ← の記号の代わりだと考えて下さい。

これだけのことがわかれば、変数に数値を代入する(記憶する)ことが出来ます。
次のプログラムは、int(整数値)型の変数 value に 10 を代入します。

#include <stdio.h>

int main(void)
{
	int value;	/* 変数宣言の部分 */
	value = 10;	/* 代入の部分 */
	return 0;
}

目次に戻る

第5項:変数を数値の代わりに使う

変数もう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 に代入する数値を変えてみて下さい。

目次に戻る

第6項:代入と演算を同時に

変数には、数式の計算結果を直接代入することが可能です。
次のプログラムでは、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増やすことは非常に多く、この演算子は便利です。

目次に戻る