![]() |
|
変数とは何なのか変数の意味と基本的な使い方を知る 数値を記録するには?なんだか文字が表示できるだけでつまらないですね。それでは今回は、どのプログラム言語でも必ず使われている「変数」にいて勉強しましょう。はっきり言って、変数を知らなければ何もできません。プログラムの柔軟性はこの変数のうまい使い方によって決まってきます。 変数は、数値を記録するために使います。数学で言う変数とは違います。たとえば電卓で何か数字を押して「M+」を押すと、その数値が記録され、「MR」を押すと記録した数値が出てきますね。変数はちょうどその電卓のメモリーのようなものです。値を取っておくものに他なりません。 しかし何が何でも記録できるわけではなく、ちゃんと記録できる種類があります。その種類のことを型と言っています。以下にその型を表にしたので見てください。
ん〜あんまりピンとこないですね。こういうときは実際に使ってみましょう。これをある方は「論よりソース」と言うらしいです(^_^;。以下のソースコードを見てください。
変数を使うときは、まず最初に「{」の直後で、
を明確にしておかなくてはなりません。これを明確にすることを変数の宣言と言います。この例では、i1,i2という名前のint型の変数を宣言(つまり整数を記憶できるi1,i2というメモリーを用意)しています。 そして、宣言した変数に値を記憶させるには「=」を使います。この例では、まず「i1 = -100;」でi1に-100という数値を記憶させています。次になんと「i2 = i1;」としています。これはどういうことになるかというと、i2にi1の内容を記憶させることになります。つまりi1には、直前に-100という数値が入っているので、i2にも-100が入ることになります。 ところで、その変数の中身がどうなってるかを私達が知る方法をまだ知りませんよね。それを知るには、前に文字や数値を表示するのに使ったprintf関数が使えます。このように変数を指定すると、変数の中身を読んできて、表示してくれます。 実行結果はもう分かりますね。もちろん、「-100」が表示されます。 このprintf関数の「%」の使い方についてもっと知りたい人は、ここを押してください。 変数を使って計算をする●計算結果を代入する さあ、もうちょっと話を進めてみましょう。欲のある方は、もう「i1とi2を足した数値をi3に入れられたら...」と思っているかもしれません。実は、簡単にできてしまうんです。
あ、何も言わずに「int i1, i2, i3;」と書いてしまいましたが、同じ型の変数をたくさん宣言するとき、こういう書き方もできるんです。この方が楽ですよね。 さて、このプログラムを実行すると、画面には何が出てくるでしょうか。直感的に分かりますね。そう、「30」という数字が画面に出てきます。 このように計算した結果を変数に代入することもできます。C言語では、この「+」の事を演算子と言い、特にこのような、足したり掛けたり計算に使う演算子を算術演算子と言います。まぁ、そういう名前がついている程度の認識でかまいません。以下に算術演算子の表を書いておきます。
「i1 = i2+i3*i4」等と書くこともでき、この時は以前説明したように、四則演算に基づいて「i3*i4」がはじめに計算されて、その後にi2が足されます。括弧を使って優先順位を変えることもできます。「i1 = ((i2+i3)*i4+i5)*i6」というように、括弧を何重にもすることができます。 ●「=」は等号ではない ところで、このプログラムの場合、どうなると思いますか?
あ、また何も言わずに「int i = 100;」等と書いてしまいましたが、最初から変数に入れる数値が分かっている場合、このようにして宣言と同時にiを100で初期化してしまうことも可能です。ところで... もしあなたが「i = i + 50;」をあたかも数学の等式のように見てしまっていたら、この例は異様に感じるはずです。しかし、これはプログラムとして立派になりたち、またよく使われるので、特別に「i += 50;」という書き方を許されているほどです。これは次のように手順立てて考えてみれば納得できます。
よって、画面には「150」が表示されます。(もし、この「i = i + 50;」を連続して実行させた場合、iの値は50ずつ増えていくことになります。このテクニックはのちのち役に立ちます) この例の場合、「i += 50;」と書くことができることはもう言いましたが、特に「i += 1;」の時はさらに特別な書き方が許されていて、「i++;」と書くことができます。もちろん引き算もあって「i--;」という書き方もできますが、残念ながら「i**;」等はありません(考えてみれば当たり前なんですが)。これらのことをインクリメント・デクリメント演算子と言います。 定数の種類●8進数、16進数 さて、何気なく「i1 = 10;」などと書いてしまっていますが、この「10」にも立派な名前があります。その名も「定数」。.....当たり前ですね。だけど、ちょっと気をつけなきゃいけません。「i1 = 10;」と「i1 = 010;」、同じもののように見えますが、まったく違います。後者は「8」が代入されてしまいます。実は、「0」を先頭に書くと8進数とみなされます。また、「0x」を先頭につけると16進数とみなされます。だから、「i1 = 10;」は、「i1 = 0xA」と書いても同じ事になります。 ●文字 次に、「'A'」のように一重引用符「'」で1バイト文字を囲むと、文字コードを表現することになります(1バイト文字は内部では0から255までの数値として表現されています)。この値は、char型です。このようにわざわざ文字コードを調べなくても、下の例のようにして直接文字を書いて使うことができます。応用すると「'\n'」もアリです。これは改行コードを表現しています。しかし「'悪'」これはだめです。2バイト文字だからです。 逆に文字コード(char型)から文字を表示することができます。printf関数で「%c」を指定すると、数値に対応した文字が表示されます。
この例では、変数cに‘A’の文字コードが入り(文字ではなく数値が入ります)、printf関数でその文字コードに対応する文字を表示しています。そのため、画面には「A」が表示されるわけです。 ●整数/実数 以前述べたように、「10」と、「10.0」も大きな違いです。後者の「10.0」は整数ではなく実数とみなされます。しかし「i1 = 10.0」としても、i1には「10」という整数値が入ります。ここら辺の話はちょっと深いので、今は深くは触れません。 まとめ。
(1997/01/30, 1999/03/13 改) | |||||||||||||||||||||||||||||||||||||||||
![]() |
著作権は全て小出 俊夫にあります。KID's World © 1996-2003 Toshio Koide.