プログラミング実習

プログラミング論
第五回
変数とは?
本日の内容

変数とは?
– 変数の型

変数の値を出力する
– 整数型の場合
変数の宣言(データ型)
 値の代入
 整数型変数の出力
 変換仕様(書式)
 メッセージ付出力
 複数の変数値の出力

変数とは?


コンピュータでは,入力された数値データ
や文字データを,いろいろと加工(処理)
して,仕事をする(結果を出す)ものです。
入力されるデータは一つではありません
し,何度も変更,利用されます。
ということは。。

データは,どこかに保管されていて,いつで
も何度でも変更,利用できるという事ですね。
変数とは?




コンピュータの中には,データを保管するため
の箱を用意することができます。
この箱の中身は,いろいろと「変化」します。
だから,このデータが保管されている箱のこと
を「変数」といいます。
箱には,だいたい自由に名前を付けることがで
きます。その名前を「変数名」といいます。
– アルファベット(大文字,小文字),数値,_ ,だけが
使えます。
– 数字で始まる名前は付けることができません。
次のプログラムを実行しましょう。
~変数の値を出力する~
// ensyu5.c
// 「10+20」の答えを計算して表示する
#include <stdio.h>
int main(void)
{
int a, b, c;
a = 10;
b = 20;
c = a + b;
printf("%d\n",c);
return 0;
}
まずは,ここから考えましょう。
// ensyu5.c
// 「10+20」の答えを計算して表示する
#include <stdio.h>
int main(void)
{
int a, b, c;
a = 10;
b = 20;
c = a + b;
printf("%d\n",c);
return 0;
}
変数の宣言
int a, b, c; の意味を考えましょう。


これは,「int型(integer : 整数)の変数とし
て,3つの変数を用意する。変数名は,そ
れぞれ a, b, c である。」という意味です。
C言語では,「これから,これらの変数を使
うので準備してください」というお願いを,プ
ログラムの最初に必ず行っておく必要があ
ります。
変数の宣言
// ensyu5.c
// 「10+20」の答えを計算して表示する
#include <stdio.h>
int main(void)
{
// int a, b, c;
a = 10;
b = 20;
c = a + b;
printf("%d\n",c);
return 0;
}
コメント文にして
無視してみましょう
コンパイル結果は
どうなりますか?
変数の宣言

こんなエラーが表示されます
エラー E2451 : 未定義のシンボル a
エラー E2451 : 未定義のシンボル b
エラー E2451 : 未定義のシンボル c


「こんな名前のものは定義されていない
から分からない」ってことですね。
つまり,「使いたいのなら,ちゃんと最初
に定義しなければならない」ってことです。
変数の宣言


int a, b, c; は,
int a;
int b;
int c;
のように,3行に渡って記述することもできます。
もちろん,
int a; int b; int c;
と1行に3文書くこともできます。
実際にプログラムで確認しましょう。
変数の宣言
int a, b, c; の意味を考えましょう。


これは,「int型(integer : 整数)の変数とし
て,3つの変数を用意する。変数名は,そ
?
れぞれ a, b, c である。」という意味です。
C言語では,「これから,これらの変数を使
うので準備してください」というお願いを,プ
ログラムの最初に必ず行っておく必要があ
ります。
変数の型




1~10の間に,「整数」はいくつあるでしょう?
では,同じく1~10の間に,「実数」はいくつある
でしょう?
実数だったら,何桁もの数字を表現しなければ
ならないので,大きい箱を用意する必要がありま
す。整数だったら(この場合)2桁で十分ですね。
最初に「整数ですよ」と分かっていれば,小さめ
の箱を用意すればいいので,効率がよい,と言
えます。
変数の型




プログラムの最初に変数を定義するとき,
それが,「整数」なのか「実数」なのか「文
字」なのか,決めておく必要があります。
これを「変数の型を定義する」といいます。
ensyu5.cでは,どの変数も整数型として
定義されているので,10や20が代入され
ています。
では,試しに,5.5などのような実数値を
代入してみたらどうなるでしょう?
変数の型
警告もエラーも出ずに,とりあえず実行できて結果
が出力されます。
でも,実数としては出力されません。どう処理されて
いるのでしょう?
a = 5.5;
b = 20.7;
c = a + b;
a には,5 が代入されます。
b には,20 が代入されます。
c には,25 が代入されます。
つまり,小数点以下は切り捨て(丸める)られることになります。
変数の型

それでは,次に,ものすごく大きな値を入
れてみましょう。
int a, b, c;
a = 2147483649;
b = 2147483650;
c = a + b;
変数の型



前ページの例の場合,答えは「3」と表示
されるはずです。
つまり,あまりに大きい数字だと,箱の中
に入れきれなくて誤動作してしまう,とい
うことです。
この場合,4バイトの大きさの箱しか用意
されていないため,表現できる数字は次
の範囲の整数になります。注意しましょう。
-2147483648 ~ +2147483647
次は,ここを考えてみましょう。
// ensyu5.c
// 「10+20」の答えを計算して表示する
#include <stdio.h>
int main(void)
{
int a, b, c;
a = 10;
b = 20;
c = a + b;
printf("%d\n",c);
return 0;
}
値を代入する

今まで何気なく使ってきましたが,
a = 10;
というのは,「変数aに10という値を代入
する」という意味であり,「aが10と等しい」
という意味ではありません。
10
a
値を代入する

それでは,これはどういう意味でしょう?
a=a
a+50;
まず,今のaの値
を取り出します。
その値に50
を加えます
50を加えた結果を
aの箱に戻します
a
つまり,aの値が50大きくなります。
値を代入する

この場合は。
c = a + b;


この場合は,aとbの和を計算して,その
結果をcに代入します。
aとbの値は元のままで変化しません。
値を代入する:演習

ensyu5.cにおいて
– 問題1

a = 10; の文の後に,a = a+10; の文を挿入して,結果を
確認しましょう。
– 問題2

a = 10; の文の前に,a = a+10; の文を挿入して,結果を
確認しましょう。問題1の場合と結果が違う場合は,その理
由を考えましょう。
– 問題3

a = 10; の文を消して,a = a+10; の文だけにしたらどう
なるでしょう。
値の代入:プログラムの流れ
int
a, b, c;
a
b
c
3つの箱が
用意される。
a, b, c の最初の値は不定であり分からない
10
a=10; b=20;
a
10
c=a+b;
a
20
b
20
b
c
30
c
a, bの値は変化しない
aに10,bに20
が代入される。
cに30が代入
される。
つぎは,ここに注目。
// ensyu5.c
// 「10+20」の答えを計算して表示する
#include <stdio.h>
int main(void)
{
int a, b, c;
a = 10;
b = 20;
c = a + b;
printf("%d\n",c);
return 0;
}
整数型変数の出力
printf(“%d\n”,c);






これは,整数型変数cの値を出力するための指示です。
初めて見るのは,%のついた部分ですね。
%dは,「変換仕様」または「書式」と呼ばれる記号で
す。”d”の部分が変わることでいろんな意味になります。
%dは,「10進数の整数」という意味です。
つまり,「ここに10進数の整数値を出力してください」と
いう意味になります。
どの変数の値を出力するかは,” “, の後ろに変数名
を記入します。
整数型変数の出力

出力させる値は変数で指定する必要はな
く,次のように式を書く書き方もできます。
printf(“%d\n”, a+b);

実際に上のようにprintf文を書き直して,
きちんと出力されることを確認してくださ
い。
変換仕様

代表的な変換仕様を次に示します。
変換仕様

意味
%o
8進数で出力する。
%d
10進数で出力する。
%x または %X
16進数で出力する。
%f
浮動小数点数として出力する。
%c
文字として出力する。
%s
文字列として出力する。
%o, %x で出力させてみましょう。
メッセージ付出力

メッセージを付けて,次のように出力させ
ることもできます。
printf(“cの値は%dです。\n”, c);
cの値が30だとすると,
次のように出力されます。
cの値は30です。
Z:\C>
複数の変数出力

ひとつのprintf文で複数の変数の値を出
力することができます。
printf(“aの値は%dで,bの値は%dです。\n”, a, b);

この場合,最初の%dが最初の変数aに,二番
目の%dが二番目に書かれた変数bに,それぞ
れ対応します。
aの値が10,bの値が20とすると,次のように出力されます。
aの値は10で,bの値は20です。
Z:\C>
演習

ensyu5.cにおいて
– 「10+20=30」と出力されるように
printf文を作りなさい。赤の部分
は変数値が出力されるようにし
なさい。
– %dは,%3dと指定することによ
り,「10進数3桁の整数で出力す
る」と桁数を指定できる。この機
能を利用して,aの値,bの値,a
とbの和であるcの値を,右のよう
に桁をそろえて縦書きに出力す
るようにprintf文を作りなさい。
5
+100
---105
赤の部分は変数の
値の出力とします。