整数と実数およびその四則演算


 
 数字(整数)の入力(input) と 出力(output) (含む四則計算)

   ここで取り扱う数字は全て整数とする。本授業で2番目のプログラムであるが、早くも変数を用いたプログラムである。変数は数学でいうと y=2x+5 における x や y などのことであるが、コンピュータプログラムにおいては数学の概念が一部通用しないことがあるので注意する。また、変数名は各自、自由につけることができる。ただし、英文字から始まり、数字を混ぜる変数名だけに限定して使用するのがよい(例:u、i1、sigma、dat123)。さらに、変数名には予め決まっているキーワード(do、if、int、long、for等)は使用できないし、一般に大文字小文字の区別があるので注意する。
   さて、下のプログラム(右はその解説)でわからない箇所も多いことと思う。もちろん、記号の全てに意味があるが、C言語は概念的に難しい部分もあるので、多くのプログラムに親しみ覚えていくのも一つの方法であろう。
       前述の方法にならって本プログラムを実行して、2つの整数を入力してみよう。2つの整数を入力する方法はいろいろあるが、例えば 20  3 などのように空白をあけて入力しEnterキーを押せばよい。
   結果の中で、割り算に注目しよう。この場合、変数が整数であるため、割り算の結果は、商にあたる部分しか得られないことを確認する。
   ついでに、実行時エラーを経験してみよう。123  0 のように2番目の数字に0(零)を入力する。この場合、割り算の結果が数学的エラーになるため、エラーメッセージを表示してプログラムは終了する。  

  注:以下のプログラムリストについて
      ブラウザ(インターネットエクスプローラ等)の表示幅を大きめにして閲覧のこと。
 


 ● 数字(整数)の入力(input) と 出力(output) (含む四則計算)
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
/* ex. input & output */
/*      program       */
#include <stdio.h>
/*
     comment !!
*/
int main(void)
{
    int i1,i2;
    int j1,j2,j3,j4;
 
    scanf("%d %d",&i1,&i2);
 
    j1 = i1 + i2;
    j2 = i1 - i2;
    j3 = i1 * i2;
    j4 = i1 / i2;
 
    printf("%d %d\n",i1,i2);
    printf("%d %d %d %d\n",j1,j2,j3,j4);
 
    return 0;
}
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
/* ---- */ で囲まれた部分はコメントです。
中は自由に書くことができます。
入出力を行うときに必要
-
コメント部は複数行もOKです。
-
プログラムの最初に実行される部分(main関数)
-
整数(integer)変数の宣言。区切りに , や ; が必要。
同上
-
2つの整数をキーボードから入力する。
     &i1の&をアドレス演算子という。
     %dは整数の入出力に用いる。
-
空白は自由に入れられる。
-
-
入力値の表示
出力値の表示
 
戻り値を0とする。本講義では固定。
 


 ●
 プログラムの再利用について

   プログラムを何種類か構築していくと、前に作ったものに似ているプログラムを作らなければならないときがある。そのとき、最初から入力していたのでは効率が悪い。この場合、まず前のプログラムを名前を変えてコピーする。そして、そのコピーしたファイルを書き換えるとよい(オリジナルは保存しておく)。なお、コピー元のファイルを雛型あるいはテンプレートと呼ぶことがある。

   $ cp abc.c xyz.c  [Enter]  : ファイル”abc.c”を”xyz.c”としてコピー 
  
   上記の他にの他に、テキスト・エディタで名前を変えて保存する方法もあるので利用してほしい。
      また、”このコンピュータ”を利用してもよいだろう。

 
 

  ◎ プログラムの全体的な流れ
    
プログラムは一般に上から下に実行される。
    
中括弧のくくり{ }が数学の括弧と同じようにひとまとまりの部分を示している。

  ◎ コメント(行)について
    
コメントとはプログラムを記述する人がその内容についてメモを入れるために用いられる。
    
C言語では /* 〜 */ で囲まれた部分である。
    コンピュータからみれば全く不要な行であり、実行には影響しない。
    また、一時的に不要なプログラム行をコメントにしておくことを”コメントアウト”するといい、
    必要になったときに再び /* 〜 */ をとるといった便利な使い方もできる。

  ◎ C言語特有の記述について
    
しばらくは以下のような記述が続く。サンプルにならってプログラムを書いてみよう。 

    #include <stdio.h>

    int main(void)
    {

             ここにプログラムを書く

             return 0;
    }

 


  ◆ 演習01 上記プログラムの拡張

   上のプログラム[数字(整数)の入力(input) と 出力(output) (含む四則計算)]を3つの整数が読み込めるように拡張し、
  以下のような演算をできるようにせよ。また、その結果も確認・評価すること。
   j1 = i1 + i2 + i3;
   j2 = i1 - i2 - i3;
   j3 = i1 * i2 * i3;
    j4 = i1 / i2 / i3;

 

 


 ●
 数字(実数)の入力(input) と 出力(output) (含む四則計算)

   ここで取り扱う数字は全て実数(Real)である。コンピュータプログラムにおける実数は、数学の実数とは多少異なる。簡単には、小数点を含む数字と考えればよい(例:0.56、1.23、3.0)。また、整数の5を5.0と書けば実数扱いとなる。上のプログラムと本プログラムを比較してほしい。変数の宣言部が異なるのはもちろん、入出力部も異なっていることに注意すべきである。
       本プログラムを実行して、2つの実数を入力してみよう(例えば 8.0  3.0 [Enter])。
   今度の割り算の結果が、小数部も表示されていることを確認する。なお、この場合でも 0.0 を2番目の数字に入力すると実行時エラーとなる。  
 
 ◆ 注:実数を表現するのにC言語の多くの教科書は float型(浮動小数点型)を主に用いている。この授業では、現在のコンピュータの使用状況に則して、実数表現にdouble型(倍精度浮動小数点型)を用いる。

 

 ● 数字(実数)の入力(input) と 出力(output) (含む四則計算)
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
/* ex. Real input & output */
 
#include <stdio.h>
 
int main(void)
{
    double d1,d2;
    double e1,e2,e3,e4;
 
    scanf("%lf %lf",&d1,&d2);
 
    e1 = d1 + d2;
    e2 = d1 - d2;
    e3 = d1 * d2;
    e4 = d1 / d2;
 
    printf("%f %f\n",d1,d2);
    printf("%f %f %f %f\n",e1,e2,e3,e4);
 
    return 0;
}
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
-
-
-
-
-
-
実数(Real)変数の宣言。
同上
-
2つの実数をキーボードから入力する。
     %lf は double型実数の入力に用いる。
-
-
-
-
-
double型実数の入力値表示
double型実数の出力値表示
-
-
-
 

 
 ●
 プログラムの一部変更

   上でも述べたように、プログラムの一部を変更することはよくある。ここで、上のプログラムの17行、18行目を下の内容に変更してみよう。本プログラムを実行すると、上の結果と異なって表示される(例:16.000000 -> 1.600000E+01)。しかし、これらの数字はコンピュータでは同じ意味である。今回の表示のように E (またはe)を伴った表示形式を指数形式の表示といい、入力や式中にも使うことができる。この形式の意味は以下を参照してほしい。

       1234.567  = 1.234567E+03
       0.0987  = 9.87E-02

       つまり、E の前の数字に10の[Eの後ろの数字]乗したものを示している。この形式はコンピュータでは、古くから用いられているので、エンジニアは必ず読めなければならない。

 
017:
018:
    printf("%lE %lE\n",d1,d2);
    printf("%lE %lE %lE %lE\n",e1,e2,e3,e4);
017:
018:
double型実数の入力値表示(指数形式)
double型実数の出力値表示(指数形式)

 


  ◎ 整数変数と実数変数について
    なぜプログラミング言語には整数と実数の区別があるのか?
    整数と実数の変数ではメモリの使用量が異なる(一般に実数の方が多く消費する)。
    したがって、メモリの効率的な使用の意味合いがある。
    整数変数はなんらかの個数や順番などを示すのに用いる。
    一方、実数変数はそれ以外の広い用途に使用する。

        2進数とコンピュータのメモリについて
    
  ◎ 演算子と優先順位
    C言語において数式における演算子(+や−など)の優先順位は数学と同様であり、高い順に
        括弧()       
        単項+、単項−       
        *、/ (乗算、除算)       
        +、− (加算、減算)    
    等となっている。したがって、以下の実数変数aには、              
        a=4.0+2.0*(1.5+7.5)/3.0-0.5
    9.5が代入される(また、乗算の際に括弧の前であっても”*”が必要であることに注意)。
    なお、優先順位があいまいである場合はとりあえず括弧をつけてみるという方法もある。
    また、C言語には累乗( x )を行う演算子は存在しない。後ほど習う”pow”という数学関数を用いることになるが、
     2乗、3乗ぐらいまでは、変数を単に掛け合わせたほうがよい。

  ◎ C言語における計算結果の画面表示
    C言語において計算結果の画面表示には若干の注意を要する。
    整数を1つ( 変数名 i )表示して改行するには printf("%d\n",i);  というプログラム

    実数を1つ( 変数名 a )表示して改行するには printf("%f\n",a);  というプログラム
                                                               または  printf("%lE\n",a);  というプログラム
        となり、変数のタイプによって使い分ける必要がある。

 

  ◆ 演習02 上記プログラムの拡張

   上のプログラム[数字(実数)の入力(input) と 出力(output) (含む四則計算)]を3つの実数が読み込めるように拡張し、
  以下のような演算をできるようにせよ。また、その結果も確認・評価すること。
      e1 = d1 + d2 + d3;
      e2 = d1 - d2 - d3;
      e3 = d1 * d2 * d3;
      e4 = d1 / d2 / d3;
 

  → 戻る