ログイン
編集不可のページディスカッション情報添付ファイル

2011-10-09 05:23:53時点のリビジョン1

メッセージを消す
alstamber/Clanguage/type

MMA

変数には型がある

変数というものを扱い始めてそれなりに時間が経ちました。だいぶその概念にも馴染めたのではないでしょうか。
ところで今まで使ってきた変数は皆「int型の変数」というもので、整数しか扱えないものでした。
このままでは永遠に小数を変数に格納したりなんてことはできなさそうです。

変数について説明するとき

C言語では文字を格納する変数、整数を格納する変数、小数を格納する変数、などがそれぞれ区別されています。

ということを書きました。C言語ではその中に格納されるデータの種類やその大きさに応じて変数の種類がある程度決まっているわけです。
これをと呼んでいます。int型の変数というのは「intという型の変数」ということだったわけですね。
型は色々種類があります。一覧してみましょう。

名前

範囲

int

-2,147,483,648~2,147,483,647

char

-128~127

float

-3.40282*1038 ~ 3.40282*1038

double

省略(floatより扱える範囲が大きい)

他にもたくさんあるわけですが、FPで使うのは多分これくらいです。もしかしたらlongというintよりも扱える範囲が大きい整数の型も出てくるかもしれないです。
基本的には上2つが整数を扱う型で、下2つが小数を扱う型です。
しかしcharを整数を扱う型としてそのまま使うことは少なく、文字一文字を入れる型として使うことが多いです。
(コンピュータの中では文字も数字として扱われているということはコンピュータ・リテラシーでやったと思います)

じっさいにこれらの型の変数を使ってみるとこんなかんじです。

   1 int a;
   2 char b;
   3 double c;
   4 
   5 a = 2222;
   6 b = 'c'; //' ' で囲むと文字という意味になる。ここではcという文字をbという変数に代入している。
   7 c =3.14159265;

上のソースでさり気なく使っていますが、//という文字を書いておくとそれより後ろにかいた文字はすべてプログラムとは無関係としてコンパイルの時に無視されます。
この機能を使うとソースコードにメモ書きができるので長いソースコードを書くときに便利ですね。
この機能はコメントと呼ばれているので、覚えておきましょう。ソースコードを書くときにコメントを付ける癖をつけておくと後で助かることが多いです。

型変換

複数の型が出てくると、違う型の組み合わせの計算をしたときにどうなるのかが気になります。そのことについて触れてみましょう。

暗黙的な型変換

本来違う型同士では計算をすることができません。しかしこっちが特別ソースコードに書かなくてもコンパイラ側で無難に型を合わせてくれるようになっています。
これを暗黙的な型変換と呼んでいます。まあことばよりも実際に何をしているのかを見てみるほうが大事ですので見てみましょう。

代入

代入の時には左側の変数の型に合わせられます。

   1 int a;
   2 double pi = 3.14;
   3 
   4 a = pi;

piには3.14という小数が入っていますが、aに代入するとaはint型なので、小数点以下は全て切り捨てられて3が代入されます。

数式

数式の中に違う型の変数が出てきたときは、一番精度の高い型に合わせられます。
整数だけしか表せない型よりも小数も表せる型の方が精度が高いですし、またfloatよりもdoubleのほうが表せる数が多いので

char < int < float < double

の順で精度が上がって行きます。

   1 int a,b;
   2 double c;
   3 a = 2;
   4 b = 3;
   5 c = 1.5;
   6 
   7 c = a * b + c;

これだと、7.5がcに格納されます。

キャスト

強制的に別の型にしたいということがたまにあります。例えば

   1 int a = 5;
   2 int b = 2;
   3 double c;
   4 
   5 c = a / b;

とすると、int型同士の割り算なので答えもint型になり、小数点以下は切り捨てられてcには2.0が代入されます。
しかし小数の答えである2.5が欲しいことがあるでしょう。そういう時は強制的に型をint型でなくdouble型にすればよいのです。

   1 int a = 5;
   2 int b = 2;
   3 double c;
   4 
   5 c = (double)a / b;

さっきのプログラムと違うのは、(double)というのが増えている点です。こう書くと後ろのa / bの結果が強制的にdouble型になります。
これを明示的な型変換、あるいはキャストといいます。

演習問題

問一 キーボードから半径[cm]を入力させ、円の面積[cm2]を求めるプログラムを作りなさい。なおπ=3.14とします。

半径は? 3
半径3cmの円の面積は28.260000000cm2です。