#1 変数を覗いてみよう (1) (98年11月7日 初版)

1.1 変数とは

 コンピュータが行う数値計算は、数学が扱う<数の世界>とは違って、整数、実数や 
複素数のいずれも有限の桁の数として扱います。つまりコンピュータの<数の世界>は 
現実の<数の世界>をモデル化したものです。そのため、その演算は数学とは違った独 
自の算法(アルゴリズム)でもって行われます。ここでは、数がどのように表現され 
るかについて基礎概念を整理します。 


1.1.1 変数  変数は、プログラムで使用する数や文字などの値を記憶するめのメモリ内の格納 場所です。変数はそれを使う前に必ず名前とデータ型を宣言しておかなければなり ません。 int a; // 宣言 は整数型の型宣言で、変数名 a で整数値を格納するメモリ領域がつくられます。 また、すべての変数は変数名と型と値を持ちます。 a = 10; // 代入文 とすると、変数 a の格納場所に値10が代入されます。代入演算子=は、等号の意 味でないことに注意しましょう。C/C++では記号=は等号の意味で使われることは ありません。代入演算子は記号=の右側の値(右辺値)を左側の変数(左辺値)に 代入することを意味します。つまり、 変数名 = 値; という形式の文を代入文といいます。  変数名は2つの意味で使われます。1つは、変数名はコンピュータのメモリ内 の位置です。上の代入文( a = 10; )では変数名aで識別された場所に値を格納す ることを意味します。  そして2つ目は、メモリに格納されている値を意味します。次のコードで、 int a, b; // 宣言 a,bのための領域が割り当てられる。まだ値は代入されていない a = 10; // 代入 値10を代入 b = a; // 代入 変数 aの持つ値10を代入 3行目の代入文は、変数bに10が代入されます。左辺値のbは格納場所ですが、 右辺値のaは場所aに格納されている値10を意味します。

1.1.2 算術計算  コンピュータが行う算術演算は整数と実数とでは別々の演算回路が使われます。 このため、多くのコンピュータ言語では整数と実数とでは異なる演算規則に従いま す。  算術演算子には、加算+、減算−、乗算*、除算/、剰余(余り)%があります。 ただし、余り%は整数型のデータでしか使えません。整数型int型の四則演算の プログラムを示します。

// lst01_01.cpp 
//整数の四則演算 

#include <iostream.h> 

int main() 
{ 
    int a, b, c; 

    cout << "2つの整数を入力してください:"; 
    cin >> a >> b; 

    c = a + b; // 加算 
    cout << a << " + " << b << " = " << c << endl; 
    c = a - b; // 減算 
    cout << a << " - " << b << " = " << c << endl; 
    c = a * b; // 乗算 
    cout << a << " * " << b << " = " << c << endl; 
    c = a / b; // 除算 
    cout << a << " / " << b << " = " << c << endl; 

    return 0; 
}
         ソースファイル ( lst01_01.cpp )
実行結果を次に示します。

コンパイル/リンクの仕方はこちら

GNUのコンパイラ gcc/g++ の日本語文字コードについての注意
2つの整数を入力してください:123 456      
123 + 456 = 579 
123 - 456 = -333 
123 * 456 = 56088 
123 / 456 = 0

結果が正しく計算されていないことに注意してください。除算が0になっています。 
整数型同士の四則演算では、結果は整数型になります。この場合、除算では小数点 
以下が切り捨てられます(四捨五入されるのではありません)。正しく計算するに 
は、実数型で除算します。実数のことを、そのデータの格納の仕方から浮動小数点 
型(floating point)と呼びます。浮動小数点型にはfloat型やdouble型がありま 
す。浮動小数点型同士のの四則演算では、結果は浮動小数点型となります。つまり 
1/2 は0 となり、1.0 / 2.0 は 0.5 となります。1は整数型の定数ですが、1.0 
は浮動小数点型の定数です。 

 算術式の計算では、代数学の計算と同じように乗除算は加減算よりも先に計算さ 
れます。また式の中に括弧( )があると、括弧の中の計算が優先されます。 

a + b * c 

は、まず b * c が計算されて、その結果に a の値が加算されます。 

( a + b ) * c または c * ( a + b ) 

では加算 a + b が先です。注意が必要なのは除算です。 

     1 
------------ 
 a + b + c 

といった分数は 1.0 / ( a + b + c ) と分母に括弧が必要です。誤りやすいのは、 

 2        1 
---×------------ 
 3     a + b + c 

を、2/3 * ( a + b + c ) や 2.0/3.0 * ( a + b + c ) とすると間違いです。 
正しくはは 2.0/3.0/( a + b + c ) または 2.0/ ( 3.0 * ( a + b + c ) ) とな 
ります。 

(注) <整数型>同士の算術演算の結果は<整数型>で、<浮動小数点型>同士の演算結果は 
<浮動小数点型>です。また、<整数型>と<浮動小数点型>との算術演算では<浮動小数点 
型>となります。しかし、複数の型が混合した計算は避けるべきです。 


【演習問題 1.1】float型の浮動小数点数についての四則計算プログラムを
書きなさい。  回答のプログラム



[補足]宣言文の位置について

 C言語では、変数の型宣言はブロックの最初に行わなければなりません。つまり、関
数のなかで使う変数(ローカル変数)はすべて先頭の所で宣言(定義)します。Cプロ
グラムでは、まず使用する変数の型宣言の羅列があって、その後に実行文が続きます。
 これに対して、C++ではプログラムの中のどこでも行うことができます。変数が必要
になった所で宣言(定義)することができます。そのためC++では、次のようなコード
が可能でよく使われます。

    for(int i = 0; i < 10; i++){
        // .......
    }

ここで制御変数 i はforループ内で有効なローカル変数となります。
 ただしコンパイラによっては少し注意が必要で、次のようなプログラム
#include <iostream.h>

int main()
{
    for(int i = 0; i < 5; i++){   
        cout << i << endl;
    }

    for(int i = 10; i > 5; i--){     
        cout << i << endl;
    }

    return 0;
}
は、GNU g++ やBorland C++ / C++ Builder では有効ですが、Visual C++では、制御変
数 i が再定義(2回以上初期化)されたと解釈してコンパイルエラーになります。

| 目次 | 次のページ |

Copyright(c) 1998,1999 Yamada, K