C言語基礎|整数型と実数型

整数型と実数型 ― 数値の「型」を意識しよう

これまでのプログラムでは、int 型を使って整数を扱ってきましたね。
int 型はとても便利ですが、整数しか表せないという特徴があります。

一方、私たちの身の回りには、

  • 平均点
  • 身長
  • 割合
  • 温度

のように、小数を含む値がたくさんあります。
C言語では、こうした値を扱うために 実数型(浮動小数点型) が用意されています。

この記事では、

  • 整数型と実数型の違い
  • 演算結果がなぜ変わるのか
  • 型を意識することの大切さ

を、プログラムを通して学んでいきましょう。

整数だけで平均を求めるとどうなる?

まずは、二つの点数を読み込んで、平均点を計算するプログラムを考えてみます。
内容は元の例と似ていますが、メッセージと変数名を変更しています。

サンプルプログラム

プロジェクト名:chap2-5-1 ソースファイル名:chap2-5-1.c

Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。

// 二つの点数を読み込んで平均点を表示(整数版)
#include <stdio.h>

int main(void)
{
    int score1, score2;

    puts("二つのテストの点数を入力してください。");
    printf("1回目の点数:");
    scanf("%d", &score1);
    printf("2回目の点数:");
    scanf("%d", &score2);

    printf("平均点は%d点です。\n", (score1 + score2) / 2);

    return 0;
}

実行例

二つのテストの点数を入力してください。
1回目の点数:41
2回目の点数:44
平均点は42点です。

なぜ 42.5 ではなく 42 になるの?

41 と 44 の平均は、本来なら 42.5 ですよね。
それなのに、プログラムでは 42 と表示されました。

理由はとてもシンプルです。

👉 int 型は整数しか扱えないから

int 型の特徴

項目内容
扱える値整数のみ
小数部分保存できない
除算結果小数部は切り捨て

このプログラムでは、

(score1 + score2) / 2

という計算をしていますが、

  • score1 + score2 → 整数
  • 2 → 整数
  • 整数 ÷ 整数 → 整数

というルールで計算され、小数部分は自動的に切り捨てられます。

( ) が演算の順序を決めている

ここで使われている ( ) は、演算の順序を明確にするための記号です。

演算順序の違い

意味
(score1 + score2) / 2合計を求めてから 2 で割る
score1 + score2 / 2score2 を 2 で割ってから加算

C言語では、加算よりも乗除算のほうが優先されます。
そのため、意図した計算を行うには ( ) を使うことがとても大切です。

実数を扱う double 型とは?

では、平均を 42.5 のように正しく表示したい場合はどうすればよいでしょうか。

そこで登場するのが double 型 です。

int 型と double 型の違い

扱える値
int整数10, -3, 42
double実数3.14, 42.5, -0.01

double 型を使うことで、小数を含む計算結果を正しく扱えるようになります。

型を意識することが大切

この例から分かる大事なポイントは次の2つです。

  • 同じ計算式でも、型が違うと結果が変わる。
  • 演算結果の型は、オペランドの型に影響される。

プログラムが「間違っている」のではなく、
型のルールどおりに正しく動いている、という点がとても重要です。

今後は、

  • 実数の平均
  • 割合や比率
  • 型の変換(キャスト)

といった内容につながっていきますので、
「この値は整数? 実数?」と考えるクセを、ここで身につけておきましょう 。