C言語基礎|型と定数の基本

型と定数の基本 ― 数値にも「種類」がある

これまでの学習では、変数に型があることを見てきましたね。
実はそれだけでなく、プログラム中に直接書かれている数値(定数)にも型があります

この章では、

  • 定数にも型があること
  • 整数と実数で計算結果が変わる理由
  • double 型での演算と注意点

を、具体的なプログラムを使って確認していきます。

定数にも型がある

まず覚えておきたいのは、数値そのものにも型があるという点です。

整数定数

5 や 120 のように、小数点を含まない数値は 整数定数 と呼ばれます。

基本の型
5int
37int

特別な指定をしない限り、これらは int 型として扱われます。

浮動小数点定数

3.14 や 0.5 のように、小数点を含む数値は 浮動小数点定数 です。

基本の型
3.14double
2.0double

小数点が含まれているだけで、自動的に double 型 になる点が重要です。

定数と型の関係

定数
5int
3.14double

このように、見た目の書き方だけで型が決まる ことが多いのが、C言語の特徴です。

double 型を使った演算をしてみよう

ここからは、整数ではなく 実数を使った計算 を行うプログラムを見ていきます。
元の例とは内容を変え、距離と時間から速度を求める プログラムにしてみましょう。

サンプルプログラム(実数値の演算)

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

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

// 実数値を使って速度を計算するプログラム
#include <stdio.h>

int main(void)
{
    double distance, time;

    puts("距離と時間を入力してください。");
    printf("距離(km):"); scanf("%lf", &distance);
    printf("時間(h):");  scanf("%lf", &time);

    printf("平均速度は %f km/h です。\n", distance / time);

    return 0;
}

実行例

距離と時間を入力してください。
距離(km):150.5
時間(h):2.5
平均速度は 60.200000 km/h です。

scanf と printf における double 型の指定

実数を扱うときに、特に注意が必要なのが 変換指定 です。

double 型の読み込み

double 型の変数に値を読み込む場合、scanf では %lf を使います。

  • l は小文字のエル
  • 数字の 1 ではない

という点に注意してください。

変換指定の使い分け

用途int 型double 型
scanf 読み込みscanf("%d", &n);scanf("%lf", &x);
printf 表示printf("%d", n);printf("%f", x);

printf では %f を使う、という点もセットで覚えておくと安心です。

double 型では剰余は求められない

ここで、演算子についても整理しておきましょう。

加算・減算・乗算・除算は、double 型でも問題なく使えます。
しかし、剰余を求める % 演算子だけは例外 です。

なぜ % は使えないのか

  • % 演算子は「割り算の余り」を求める演算子
  • 割り算の余りは、整数どうしでのみ意味を持つ

そのため、

x % y

のような式を double 型で書くと、コンパイルエラー になります。

重要ポイント

項目内容
使用可能+, -, *, /
使用不可%
理由剰余は整数演算専用

型は設計図、変数や定数は実体

ここで、型と値の関係をもう一度整理しておきましょう。

  • :扱える値の種類や計算方法を決める設計図
  • 変数や定数:その設計図に従って扱われる実体

たい焼きで例えるなら、

  • 型 → たい焼きの型
  • 数値(変数・定数) → 焼き上がったたい焼き

という関係です。

まとめ:型と定数を意識しよう

項目ポイント
定数にも型がある5 は int、3.14 は double
小数を含めたいdouble 型を使う
実数の入力scanf では %lf
剰余演算% は整数専用

計算結果が「思った通りにならない」ときは、
変数の型だけでなく、定数の型にも注目する
という意識を持つと、バグに早く気づけるようになります 😊