2.変数・配列

2-1. 変数の説明と宣言
2-2. 文字型の取り扱い
2-3. 実数を扱うには
2-4. データ型の拡張
2-5. 定数
2-6. 配列を使う

2-1. 変数の説明と宣言

◆変数とは

数学で変数といえば未知数であったり、ある関数の要素だったりします。

とにかく、使う変数を宣言することから事は始まります。
ということで変数の宣言の仕方

int a ; /* 整数型の変数 a を宣言 */

これで a という変数が宣言されました。これでこの変数を使うことが出来ます。
次に、どうやって使うか。

a = 10 ;

はい、ここでは変数 a に10を『代入』しました。C言語では(=)は右の数字を左に代入する記号として使われています。
ですから、

a = 3 + 5 ; /* a に 8 が代入されます。*/
a = 10 ;

としても何ら問題はないのです。
これを理解するのに1年間かかりました。(小学3年の時ですけど…)

こうやって変数に計算結果や定数を代入できますが、これだけでは画面に表示されないので『見えません』

そんなわけで、今日は変数を表示させるところまで行きましょう。
下のプログラム

#include<stdio.h>
main()
{
int a = 1; /* 初期値1の整数 a */
printf("%d\n",a);
}

実行すると画面に1と表示されます。

解説:
ここでprintf関数は新たな使い方をしています。%dは10進整数を表示する変換指定です。
そして、文字列の後、(,)カンマで区切って変数名を書きます。
もちろん文字列と組み合わせて表示することが出来ます。
その例を以下に示します。

#include<stdio.h>
main()
{
int a = 1;
printf("変数 a の値は%dである\n",a);
}

出力結果:
変数 a の値は1である

となります。%dの位置にちょうど数値が入っていることがわかります。
また、複数の変数を表示することが出来ます。

#include<stdio.h>
main()
{
int a = 1, b = 2, c = 3;
printf("各変数の値は a = %d, b = %d, c = %d である\n",a,b,c);
}

出力結果:
各変数の値は a = 1, b = 2, c = 3 である

%dと変数の順番が対応しているのがわかります。
このようにprintfを使うことで変数の中身も表示できます。

◆変数を宣言します

まず、基本的な変数の宣言から

int a;

これは、整数型の変数 a を宣言するという意味になります。
intはinteger(整数)の意味になります。
また、複数の変数を宣言する場合

int a, b, c ;

このように、同じ型の変数はカンマで区切ることにより続けて宣言できます。
よって上の変数宣言の形式は、

    データ型 変数名1,変数名2,・・・ ;

となっています。
それでは、変数の宣言はどこにすればよいのでしょうか?
変数はプログラム中すべての領域で宣言できますが、宣言をしたブロック内の範囲でしか使用できません。
これは、共同作業でプログラムを組んだ場合、同名の変数が存在する時があります。そのとき違う目的で宣言された変数が共有されてしまうと処理がうまくいかなくなります。
そのためC言語では変数の有効な領域に制限が設けられています。

●変数名に使える名前(識別子)
A~Z,a~z,0~9,_が使用できます。ただし先頭の文字には数字が使えません。
また、変数名や後に出てくる関数名など自分で定義するものの名前は識別子と呼ばれこの規則が適用されます。

◆データのいろいろ

変数のデータ型について基本的なものを以下に示します。[]で囲まれた部分は省略可能であることを示しています。

    文字型 char
    整数型 int
    実数型 float
 倍精度実数型 double

この4つが基本的なデータ型です。intについては上でも少し書いていますがもっと詳しくすると、

整数型(int)
 データ長:16または32ビット
 扱える値:16ビットの場合 -32,768~32,767
      32ビットの場合 -2,147,483,648~2,147,483,647
となります。(32ビットになると普通の電卓の範囲を越えてますね~)

いま、『ビット』という単語が出てきましたがここでちょっと説明します。
ビットと呼ばれるのは2進数の1桁に相当します。細かいことは省きますが16ビットというときは10進数(普段使う進法)になおすと、2の16乗=65536になります。つまり16ビットは65536種類の数値が扱えるので正と負と0を含むと上のような範囲になるわけです。

またintが16ビットなのか32ビットなのかはコンピューターの処理系によって異なります。(現在のコンピューターは大抵32ビットです)

int a=1000;

さて、変数aを上で宣言しました。今までと違うのは宣言と同時に値を代入しています。これは、

int a; a=1000;

と同じになります。このように変数は宣言と同時に初期値を代入することが出来ます。

なお、intは整数型なので整数以外のものは代入してはいけません。

int a=10.2 ; /* 小数を代入している */

このような代入をした場合コンパイラによって『警告』がでるか、小数点以下が切り捨てられるという事故が起きます。

そのほか注意すべきなのは数値が範囲の外に出ないことです。(オーバーフロー)
具体的に電卓だと E マークつくような計算をしないことです。