C言語入門ブログ

C言語を、本当に初歩から学んで、その内容を書いていきます。

変数と、変数の出力方法について

さて、今回はC言語における『変数』というものについてです。
『変数という概念がある』ということは、プログラムが一般の電卓より強い理由の1つです。
頑張って説明すると、『変数』とは、『覚えてほしい数字に名前をつけて結びつけ、後で名前を書いたらその名前に結びついた数字を利用できるシステム』といったところでしょうか。
電卓では、数字を覚えておくことは(普通の電卓なら)出来ませんね。
そんなことを言っても分かりにくいので、説明をします。

また、今回は
・変数について
・変数の使い方を理解するための、出力の仕方について
の2つを一気に学びます。少し長いですが、なんとか最後まで通して読んで頂けると嬉しいです。

変数の使い方について

変数を活用する手順としては、
1,変数の名前を決めて、プログラム内で宣言する
2,変数の中に数字を代入する
となります。


また、変数というものには、というものがあります。しかし今回は、変数が覚えるのは整数のみとして、やっていきます。

まず、宣言の仕方ですが、

int 名前;

と書きます。
つまり、変数の名前(英数字のみ、また、先頭を数字にすることは不可能)を『suuji』としたいなら、

int suuji;

と書きます。;(セミコロン)を忘れないようにして下さい。
これで、プログラムに、『suuji』という名前の変数を使うよ、中に入るのは整数の予定だよ、ということを伝えます。

そして次に代入です。これは、次のように書きます。

変数の名前 = 入れたい数字;

こちらも、セミコロンを忘れないようにして下さいね。
つまり、先ほど宣言した『suuji』という名前の変数に『5』という数字を結びつけたい場合は、こう書きます。

int suuji;
suuji = 5;

これで、『suuji』という名前の変数が作られ、その中身として『5』が結びつきます。
『int』というのは、その変数が整数であることを表しています。よって、例えば3.5のようなものを入れることはできません。ご注意を。とりあえずしばらくは整数だけの話をします。

変数を表示する出力方法について


さて、ただプログラムの中で変数が現れたところで、何が起きているか分かりません。
そこで、何が起きているか把握するためには、前回までで覚えた、『出力』を使う必要があります。

前回までは

printf("Hello!");

といった、自分で打ち込んだ文章を表示するだけのプログラムでしたが、これは変数を表示することもできます。

その書き方は、

printf("%d",変数の名前);

です。ちょっと直感的に分かりにくいですね。ちなみに、""を忘れるというミスが多いため、注意して下さい。
まずは、上の変数宣言と併せて、本当に動作するのか実感するため、以下のコードをideone上で実行してみましょう。

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 4;   //aに4を代入
    printf("%d",a);  //変数aの中身を表示する
	return 0;
}

これを実行すると、結果として『4』と表示されるハズです。

せっかくなので、

a = 4;

の『4』を他の数字に変えてみて、実行して下さい。0や-5など、色々試してみて下さい。
注意ですが、普通数学では『=』という記号は『左と右の数字が等しい』というのを表すのに対し、プログラム上では『左の名前の変数に、右のものを代入する』ということを表します。

さて、動作を確認してみたところで、何がどうなっているのか解説です。上の

printf("%d",a);

のうち、『%d』というのが今回初めて出てきたものですね。
これは、そのまま『%d』と表示するのではなく、『%dのところに,(コンマ)の後に書いてある名前の変数の中身』を表示します。
『%d』が『変数の中身』に置き換わるということです。
さてでは、こうやるとどうなるでしょうか。

#include<stdio.h>
int main()
{
	int a;   //変数aを宣言
	a = 4;   //aに4を代入
    printf("a is %d",a);
	return 0;
}

これをideone上で実行してみて下さい。

そのまま『%d』のところがすっぽりと『4』に変わったものが表示されるので、

a is 4

という結果になるハズです。

ちなみに、この『%d』というのが""の中に複数ある場合、後ろに『%d』の数と同じ数の変数をコンマで区切って書くと、それぞれが順番に置き換わって表示されます。
例えば、次のコードを実行してみて下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを宣言
        int b;  //変数bを宣言
	a = 4;   //aに4を代入
        b = 7;   //bに7を代入
    printf("a is %d, b is %d",a,b);
	return 0;
}

その結果は、次のようになるハズです。

a is 4, b is 7

それぞれ、1つ目の%dがaの中身に、2つ目の%dがbの中身に置き換わっているのが分かります。
この置き換えは便利ですが、『%d』の数と後ろに書く変数の数が同じになるように注意して下さい!
たとえば、次に書く2つは、どちらもエラーになります。

printf("%d %d",a);
printf("%d %d",a,b,c);

さて、結構紹介したところで、1つ目の練習問題です。

☆練習問題1.上のコードに付け足して、変数cを宣言し、cに12を代入して、『a is 4, b is 7, and c is 12』を表示するようなプログラムを書いて、ideone上で実行して合っているか確かめて下さい。ただし、printf("a is %d, b is %d, and c is 12")という書き方をせず、ちゃんと()内に%dを3つ使って書いて下さい。

練習問題の解答例は、この記事の一番下に書いておきます。


そしてこの『%d』の使い方が分かれば、これからの勉強がグッとしやすくなります。
つまり、数字を操作したりした後の結果が分かりやすくなります。
ではここで、下のようなコードを試してみましょう。

#include<stdio.h>
int main()
{
	int a;   //変数aを宣言
	a = 4+3;   //aに4+3を代入
    printf("a is %d",a);
	return 0;
}

ideone上で実行すると、どうなるでしょうか。
4+3を計算した結果である、7が出力されているハズです。

他に計算で使える記号(演算子と言います)として、
『-』,『*』,『/』があり、それぞれ引き算、かけ算、割り算です。
また、注意としてですが、整数同士を割り算した場合、答えが分数になる場合でも、整数の商が計算されます
理解を深めるため、次のようなコードを実行してみて下さい。

#include<stdio.h>
int main()
{
	int a;   //変数aを宣言
	a = 7/3;   //aに7÷3を代入
    printf("a is %d",a);
	return 0;
}

7÷3は、分数で言うと7分の3、小数で言うと2.333...となるハズです。
しかし上のコードを実行すると、2が出力されますね。
これはつまり、7÷3=2余り1となり、商である2がaに代入されたということです。
たまに忘れることがあるので、注意しましょう。

ではここで、今回最後の練習問題です。

練習問題2.aに代入する計算式を色々変えて理解を深めるため、以下の4つの問題に取り組んでみましょう。基本的に、上のコードを一部変更して、問題に取り組んで下さい。
練習問題2-1.aに5+5を代入して、ちゃんと10が出力されることを確かめましょう。
練習問題2-2.aに2-6を代入して、負の値というものが計算できるのかを確かめてみましょう。
練習問題2-3.aに2+3×4を代入して(上に書いてあるように、かけ算は『×』ではありません、注意!)、足し算とかけ算の優先順位が、現実のものと一緒になっているのか違うのか確かめてみて下さい。
練習問題2-4aに9-4-3を代入して、結果が(9-4)-3になるのか、9-(4-3)になるのか確かめてみましょう。


というわけで、今回は以上です。
これ以降はこの変数と、変数を出力する方法を使って、勉強を進めていきます。
次は入力の話になると思います。

練習問題の解答例

練習問題1

#include<stdio.h>
int main()
{
	int a;   //変数aを宣言
    int b;  //変数bを宣言
    int c;  //変数cを宣言
	a = 4;   //aに4を代入
    b = 7;   //bに7を代入
    c = 12;  //cに12を代入
    printf("a is %d, b is %d, and c is %d",a,b,c);
	return 0;
}

練習問題2
2-1

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 5+5;   //aに4を代入
    printf("a is %d",a);
	return 0;
}

ちなみにもちろん、aがどうなっているかが確認できればOKなので、"a is "というのがなくても大丈夫です。自分の思うようにやって下さい。
また、もちろん、自分でプログラムを書く場合(そしてそんなに長くない場合)は、コメントを付けなくて結構です。

2-2

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 2-6;   //aに4を代入
    printf("a is %d",a);
	return 0;
}

実行すると出力は-4となりますね。このように、整数型の変数には、負の数を入れることも出来ます。

2-3

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 2+3*4;   //aに2+3*4を代入
    printf("%d",a);
	return 0;
}

×はプログラムコードでは『*』を使います。注意して下さい。
これの出力は14になります。このように書くとかけ算が優先されて、2+(3*4)となる訳ですね。実際の優先順位と一緒です。
ちなみに優先順位を変えたい時は、現実と同じように、()を使えば良いです。つまり、

a = (2+3)*4;

と書けばよいです。よければ試してみて下さい。


2-4

#include<stdio.h>
int main()
{
	int a;   //変数aを作ることを宣言
	a = 9-4-3;   //aに9-4-3を代入
    printf("%d",a);
	return 0;
}

また、これの出力は2になりますね。つまり、引き算は左から順に、(9-4)-3と行われるわけです。
右側を先にして欲しい場合は、2-3と同じように、()を付けて

a = 9 - (4-3);

と書けばよいです。
こちらもよければ試してみて下さい。

これで練習問題の解説は以上です。分かりにくいところがあればコメント等で教えて頂けると嬉しいです。