第3回. 変数と計算 Written by Rorrim さて、第3回となりましてやっとプログラムらしくなってきました。 今回は「変数と計算」をお勉強しましょう。 それからちょっとした制御文を次回学びます。 そのあと、「関数」に入りましょうね。 それでは、張り切ってまいりましょ〜。 まず簡単に変数を定義するなら、これは「変化する値」と言う事です。 Cのプログラム上でこれを書くならばこうです。 ------------------------------------------------ int x; x = 3; ------------------------------------------------ つまり変化させる値としてxを定義して 変化する値として3を代入しています。 この場合、x、3共に変数といえるでしょう。 言い換えればこれは、xと言う代数をint型で定義して、 そのxに3という値を代入しています。 さてここでいうint型とは、何でしょうか? 英語で言うとInteger Typeという訳で整数型です。 intの様にデータのタイプを決定するものをデータ型と言います。 また、プログラムで使用する変数とその型を処理系に 知らせる働きを持つものを「宣言」と言います。 では、実際に足し算のプログラムを書いてみましょう。 ------------------------------------------------ #include main() { 1 int x; 2 float y; 3 float z; 4 x = 3; 5 y = 7.8153; 6 z = x + y; 7 printf("%d + %f = %f¥n",x,y,z); } ------------------------------------------------ これをコンパイルして実行すると以下の様に表示されます。 ------------------------------------------------ 3 + 7.815300 = 10.815300 ------------------------------------------------ さてこのプログラムを見ていきましょう。 1.int型については整数を定義するものであると先程書きましたので Float型について書きます。 2. Float型とは「浮動小数点型」といって実際には、 ビット長で32、±2.9387e^-39〜±1.7014e^+38までの数を表現できます。 データ型にはこの他long int,short int,char,double等があります。 基本データ型の種類 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 種別 型指定子 数値の範囲 -------------------------------------------------------------------- | int整数型 int -32,768〜+32,767 | long型整数 long -2,147,483,648〜+2,147,483,647 | short型整数 short -32,768〜32,767 | 文字型 char ASCII-code | 浮動小数点型 float ±2.9387e^-39〜±1.7014e^+38 | 倍数精度型 double 2^-63〜2^63 -------------------------------------------------------------------- まあこれらは、そんなに深く考えないで一応の基準程度だと思ってください。 私は、小数点が付けばfloat型、整数はint型、 大きい数はlon型としか思ってません。(笑) 4. ここでxに3を代入しています。 気を付ける点は「代入」であって「等式」ではない、という事です。 つまり代入式は「x = 3」等といった「=」で表され、 等式は「x == 3」等といった「==」で表されます。 また、等式は条件文などで使われます。 これについては、いずれなんか書きます。 6. ここで代入式を用いて実質的な計算をしています。 7. 計算の表示です。 %dは、10進数表示(decimal)の事で、%fは浮動小数点(float pointing) の事です。 ここではprintf関数で表示させる順番に注意が必要です。 順番は、 printf("%d + %f = %f¥n", x, y, z);となります。 ↑---------------↑ ↑ ↑ ↑-------------| | ↑-----------| (ちょっと分かり難いかな?) こののプログラムをちょっといじくって%dと%fの 「変換仕様」の違いについて考えましょう。 変更箇所は一個所です。 ------------------------------------------------------- 7 printf("%d + %f = %d¥n",x,y,z); ------------------------------------------------------- さあ出力はどうなるでしょう? 答えは、「3 + 7.815300 = 1076207983」です。 これは、まず「3」をdouble型に変換して計算する為に 変換の際の誤差を考慮して計算しためです。 これを回避したければ、「x」に「3」ではなく「3.0」を代入してください。 これらを含めプログラム的に正しい(?)例は以下のようになります。 ------------------------------------------------- #include main() { int x = 3; float y = 7.8153; printf("%d + %f = %f¥n", x, y, x+y); } ------------------------------------------------- どうでしょうか? かなりすっきりしたプログラムになりました。 この様に「z」へのメモリの割り当てを省いたのは、 システムへの負荷を少なくする為です。 皆さんは、バックグラウンドで動作させるプログラムを書く場合、 なるべくシステムに負荷を与えないプログラムを書くように心がけて下さい。