C プログラミング (C Programming)

[2017/09/23, H.Aman]
[← 演習のページへ戻る]

サンプルプログラム 2 の内容

一つの整数を読み込み,その値と,その値を 0.8 倍したものをそれぞれ出力しています.
 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4: 	 int x;
 5:      double y;
 6:
 7:      printf("一つの整数を入力してください:");
 8:      scanf("%d", &x);
 9:
10:      y = x * 0.8;
11:
12:      printf("x = %d\n", x);
13:      printf("0.8 x = %f\n", y);
14:
15:      return 0;
16:   }

5 行目:double y;

 1:   #include <stdio.h>
 2:  	
 3:   int main(void){
 4: 	 int x;
 5:      double y;
 6:

整数に 0.8 を掛けて得られる値は小数点の付く実数になってしまうことが多いです.
(※もちろん元の整数が 10 や 100 ならば,0.8 を掛けても 8 や 80 になるので整数のままですが,整数全体で見れば,そうなるものの方が珍しいですね.)

そこで,実数を格納できる変数を用意することにします.
このサンプルプログラムでは y という名前の変数にしていますが,
その型は int ではなく double と宣言します.

コンピュータ上で実数を扱う場合,通常は浮動小数点数(floating-point number)という形式を採用しています.
この場合の double というのは,倍精度浮動小数点数(double-precision floating-point number)という意味です.
特別に指定しない限り, C 言語では,実数は double 型の値として扱われます.

10 行目:y = x * 0.8;

 6:
 7:      printf("一つの整数を入力してください:");
 8:      scanf("%d", &x);
 9:
10:      y = x * 0.8;
11:

次に,計算式での型の扱いについて説明します.

10 行目の右辺では,int 型(整数)の x と double 型(実数)の 0.8 が混在しています.

int 型と double 型のデータ表現方式は全く異なるので,どちらかに揃えないとコンピュータは計算ができません.
幸い,この場合は int 型がより表現範囲の広い double 型へ自動的に(正確には暗黙的に)変換されて計算に用いられるようになっています.
プログラムで特別に指示する必要はありません.

13 行目:printf("0.8 x = %f\n", y);

10:      y = x * 0.8;
11:
12:      printf("x = %d\n", x);
13:      printf("0.8 x = %f\n", y);
14:
15:      return 0;
16:   }

printf 関数による出力でも,実数を扱う場合は書式の指定が変わります

上で述べたように,int 型と double 型のデータ表現方式は全く異なるので,
実数を %d で表示させようとするとおかしな数字が出力されます.(コンパイルのエラーにはなりませんので要注意)

実数を出力する場合,printf の書式指定では %d ではなく %f を指定します.