2.データの型
次に、データの型についての説明です。データの型とは、「犬小屋を作る」の例で言えば、「どんな釘を使うか。どんな板を使うか。」になります。
たとえば、「この変数は整数。この変数は実数。この変数は文字。」のようなことですね。
このデータの型をしっかりと決めておかないと不具合がおこることがあります。
例えば、「この変数は整数だ」ということを書いていたはずなのにそこに実数を入れようと思うと、「この変数は整数じゃないと駄目だよ!」といったエラーになります。
では、どんな型があるのか?
まずは、int・float・double・charの4つを覚えて欲しいと思います。
intは整数、floatとdoubleは実数、charは文字です。
floatとdoubleはどちらも実数ですが、計算するとき違いが出ます。
doubleのほうが計算精度が高いので、基本的にはdoubleを使ったほうがいいのではないかなと思いますね。
(前回は、doubleの変数に%fで値を代入しようと思ったのですができなかったので、floatにしましたが。)
前回の例を使うと
まずは、int・float・double・charの4つを覚えて欲しいと思います。
intは整数、floatとdoubleは実数、charは文字です。
floatとdoubleはどちらも実数ですが、計算するとき違いが出ます。
doubleのほうが計算精度が高いので、基本的にはdoubleを使ったほうがいいのではないかなと思いますね。
(前回は、doubleの変数に%fで値を代入しようと思ったのですができなかったので、floatにしましたが。)
前回の例を使うと
char moji;
int seisuu;
float jissuu;
変数mojiには文字、変数seisuuには整数、変数jissuuには実数が入っているということになります。int seisuu;
float jissuu;
プログラム例(type.c)
1: #include<stdio.h> 2: 3: int main(){ 4: int x = 12; 5: double y = 3.141592; 6: double z = 42.195; 7: char a = 'A'; 8: 9: printf("int x = %d\n",x); 10: printf("double y = %f\n",y); 11: printf("double y = %4.2f\n",y); 12: printf("double y = %10.4f\n",y); 13: printf("double y = %-10.4f\n",y); 14: printf("double z = %f\n",z); 15: printf("double z = %4.2f\n",z); 16: printf("double z = %10.2f\n",z); 17: printf("char a = %c\n",a); 18: 19: return 0; 20: }
1行目~3行目と9行目~20行目は今までの内容なので割愛します。
4行目~7行目について。
ここで、int型のx、double型のyとz、char型のaをつくり、それぞれに値を持たせる(初期値を与える)作業をしています。
値を持たせるためには、(変数 = 値)と書いてやればいいです。
変数に文字を与えたい場合は、「'」(シングルクォーテーション)でくくらなければなりません。
ここで、int型のx、double型のyとz、char型のaをつくり、それぞれに値を持たせる(初期値を与える)作業をしています。
値を持たせるためには、(変数 = 値)と書いてやればいいです。
変数に文字を与えたい場合は、「'」(シングルクォーテーション)でくくらなければなりません。
誤解のないように言っておくと、9行目から17行目のint・double・charと=は、出力したときに「この変数はこの型だったよ」ということをわかりやすくするために書いただけなので、書かなくても値の出力は出来ます。
例えば
ただ、「プログラム書いた人以外」がみたときにちょっと意味のわかりにくい感じになってしまいます。
例えば
9: printf("%d\n",x);
10: printf("%f\n",y);
11: printf("%4.2f\n",y);
12: printf("%10.4f\n",y);
13: printf("%-10.4f\n",y);
14: printf("%f\n",z);
15: printf("%4.2f\n",z);
16: printf("%10.2f\n",z);
17: printf("%c\n",a);
というように書いても、出力はできます。10: printf("%f\n",y);
11: printf("%4.2f\n",y);
12: printf("%10.4f\n",y);
13: printf("%-10.4f\n",y);
14: printf("%f\n",z);
15: printf("%4.2f\n",z);
16: printf("%10.2f\n",z);
17: printf("%c\n",a);
ただ、「プログラム書いた人以外」がみたときにちょっと意味のわかりにくい感じになってしまいます。
また、このプログラムでは変数の宣言と初期値を与える作業を一行でおこなっていますが、これを別々に書いて……
int x;
double y;
double z;
char a;
x=12;
y=3.141592;
z=42.195;
a='A';
と書くこともできます。double y;
double z;
char a;
x=12;
y=3.141592;
z=42.195;
a='A';
また、ちょっと補足なのですが、C言語における「=」は「右辺の値を左辺に代入する」という記号です。
なので、x=1のときにx=x+1とかくと、xの値は2になります。
このへんが、数学とちょっと違うところですね。
この辺は、計算記号の話でなれてもらわなければいけないところですね。
なので、x=1のときにx=x+1とかくと、xの値は2になります。
このへんが、数学とちょっと違うところですね。
この辺は、計算記号の話でなれてもらわなければいけないところですね。
では、練習問題。
int型の変数x、double型の変数y、char型の変数aを作り、xに45、yに0.05、aにtを代入しましょう。
そのあと、xを%d、yを%fと%4.2f、zを%cと%dで出力しましょう。(type2.c)
文字を%d(つまりは整数型)で出力するとどうなっているかな?
そのあと、xを%d、yを%fと%4.2f、zを%cと%dで出力しましょう。(type2.c)
文字を%d(つまりは整数型)で出力するとどうなっているかな?
おまけ
float型とdouble型についての補足。自分で書いててあってるか間違ってるかがわからなくなってきたので、話半分でみてください。
また、学びだしたころには特に気にしなくてもいいことなので、興味のある人だけご覧ください。
本文中では「基本的にはdoubleを使ったほうがいい」と書きました。
「基本的に」と書いたのは「個人がちょっと勉強する際に作るようなプログラムでは」doubleでいいということがあるからです。
「それならfloatなんていらないでしょ?」と誤解してしまうかもしれませんが、float型にも利点はあります。
float型は、精度が低い反面、使うメモリ(領域)が少ないという利点があります。
パソコンで変数を使うときには、どこかにその値を覚えるための領域を作っているのですが、その領域が狭くてすみます。
「じゃあ、なんで精度を落としてでも使う領域を狭くするほうがいいのか」という疑問がでてくるかと思います。
それは、コンピュータのメモリが限られていることに起因します。
メモリ以上のことは、コンピュータは覚えられません。
なので、大きなプログラムを作る際には、やりたいことを全部精度よくさせようと思うと、コンピュータが覚え切れない!ということがおこるわけですね。
そこで、「計算の精度がちょっとくらい悪くてもいいや」というところで、使うメモリの少ないfloat型を用意してやるわけです。
「基本的に」と書いたのは「個人がちょっと勉強する際に作るようなプログラムでは」doubleでいいということがあるからです。
「それならfloatなんていらないでしょ?」と誤解してしまうかもしれませんが、float型にも利点はあります。
float型は、精度が低い反面、使うメモリ(領域)が少ないという利点があります。
パソコンで変数を使うときには、どこかにその値を覚えるための領域を作っているのですが、その領域が狭くてすみます。
「じゃあ、なんで精度を落としてでも使う領域を狭くするほうがいいのか」という疑問がでてくるかと思います。
それは、コンピュータのメモリが限られていることに起因します。
メモリ以上のことは、コンピュータは覚えられません。
なので、大きなプログラムを作る際には、やりたいことを全部精度よくさせようと思うと、コンピュータが覚え切れない!ということがおこるわけですね。
そこで、「計算の精度がちょっとくらい悪くてもいいや」というところで、使うメモリの少ないfloat型を用意してやるわけです。
また、精度を高くしようと思うと、どうしても時間がかかります。
円周率を3.14で計算しようと思うと、3で計算するときより長い時間がかかるのと同じです。
ある程度の精度でも速く計算することに意味があるもの(例えば天気の予測とか)なんかでは、多少の精度を落としてでも、とにかく計算をさせようということです。
円周率を3.14で計算しようと思うと、3で計算するときより長い時間がかかるのと同じです。
ある程度の精度でも速く計算することに意味があるもの(例えば天気の予測とか)なんかでは、多少の精度を落としてでも、とにかく計算をさせようということです。
このように、同じ実数と言っても、ちょっと違いがあるわけです。
さらにおまけで言っておくと、整数にもint型以外の型があったりします。
私は、習うとき以外には使ったことがないのでここでは書きませんが、興味のある人は調べてみるのもよいかと思います。
さらにおまけで言っておくと、整数にもint型以外の型があったりします。
私は、習うとき以外には使ったことがないのでここでは書きませんが、興味のある人は調べてみるのもよいかと思います。
記事自体は結構早いこと作っていたのですが、イマイチ説明が微妙です……。
このあたりは、ホント、「慣れてもらう」しかないような気がします……。(←言い逃れ)