C言語入門(double型の変数)

C言語

サンチョです!

今回は「int型以外の変数の使い方」について触れていきます。

前回の練習問題の解答例

まずは前回は最後に出した練習問題の解答例です。

#include<stdio.h>
int main() {
    int height = 20;
    int width = 30;
    int area = height * width

    printf("縦の長さが%d、横の長さが%dの四角形の面積は%dです。", height, width, area );
}


こんな感じOKです。

変数の使い方の感覚はつかめたでしょうか?
変数への代入や表示は今後何度も登場するので、早めに慣れておきましょう!

では、解答例の解説は以上とします。
ここからいよいよ本題に入ります!

int型以外の変数

変数を宣言するときは、「型名 変数名」と宣言することは前回説明しました。
型名とは、宣言した変数が取り扱えるデータの種類を指します。

前回使用した「int型」は「整数」を扱うかう型でした。
今回は「実数」を扱う変数について触れていきます。

double(ダブル)型

double(ダブル)型とは

double型は実数(小数点以下の数値も含めた数値)を扱うための型です。
※doubleの兄弟にfloatというものがありますが、ここでは詳しく触れません。
興味があれば、検索して違いを確認してみてください。

小数点以下の値をもつ変数を作りたいときは、double型を使いましょう。

double型をprintf関数で表示する方法

double型はint型と同じ方法では表示できません。
まずは以下のプログラムをコピペして実行してみてください。

#include<stdio.h>
int main() {
    double double_val = 1.5;
    printf("%d\n", double_val);
}

これをそのまま実行すると、表示される数値は「0」になるはずです。
なぜ「0」になるかというと、「%d」が整数しか表示できないためです。

型が違うということは、実はVisualStudioも教えてくれています。
実行した際に出力されたログを見てみてください。

このとおり「型が違うよ?」と教えてくれています。
尚、ここで出ている「warning」はエラーの一種ですが、
プログラムの実行を止めることはありません

実数を表示したければ「%f」を使用する必要があります。
では、上記のプログラムの「%d」を「%f」に変更して実行してみてください。
次のように表示されるはずです。

表示される小数点以下の桁数を変更したい場合

小数点以下の「0」がたくさん表示されるのが嫌なら
%f」を「%0.2f」に修正してみてください。

printf("double_val:%0.2f\n", double_val);

 

このように、小数点以下の値が2桁になります。

値を代入する際の注意点

ここは言葉の説明より、実際に動かすと理解しやすいです。
まずは以下のプログラムをコピペして実行してみてください。

#include<stdio.h>
int main() {
    int int_val = 1.5;
    double double_val = 1.5;
    printf("int_val:%d\n", int_val);
    printf("double_val:%f\n", double_val);
}

int型に「1.5」を代入すると「1」に、double型の場合は「1.500000」になります。

int型には小数点以下の値を入れられる領域がないので、
実数を代入すると小数点以下の値は消えてしまいます。

これはint型の変数にdouble型の変数を代入する場合も同じです。
試しに以下のプログラムをコピペして実行してみてください。
double型が持つ整数部分の値だけが代入されることが観察できます。

#include<stdio.h>
int main() {
    int int_val = 10;
    double double_val = 1.5;
    int_val = double_val;
    printf("int_val:%d\n", int_val);
}
よくある落とし穴

以下のプログラムは、double型の変数に計算式を代入しているのに、
小数点以下が消えてしまいます。

#include<stdio.h>
int main() {
    double d = 2 / 3;
    printf("%f", s);
}

これはコンパイラがプログラムの内容をチェックする際に、
まず右辺の式を解決させてから代入しようとするためです。

この場合は「a / b」というint型の計算式が先に解決されます。
「int型の式」は「計算結果もint型」となるので
この時点で小数点以下の値は失われているということです。
そのため、double型には小数点以下の値が失われた結果しか代入されません。

これを避けるには次のようにプログラムを修正しないといけません。

#include<stdio.h>
int main() {
    double d = (double)2 / 3;
    printf("%f", s);
}

代入前に(double)とつけることによって「この式はdouble型の計算ですよ!」
とコンパイラに伝えることで、小数点以下の値が失われるのを防げます。
これは本当によくある落とし穴なので、実際にコーディングする際はご注意ください。

因みに、このようにして型を変換することをキャストと言います。

練習問題

【問1】
次のプログラムには問題があります。
何行目に問題があるか指摘してください。

#include<stdio.h>
int main() {
    int num1= 1500;
    int num2 = 2000;
    double percent = num1 / num2;
    printf("%dは%dの%0.2d%%です。\n", num1, num2, percent);
}

【問2】
問1のプログラムの問題点を修正してください。

まとめ

今回はdouble型の使い方について学びました。
前回のintと今回のdoubleさえ押さえておけば、
たいていの計算式はつくれるはずです。

次回は「配列」についても触れたいと思います。
次回も、ゆるく学んでいきましょう!

お疲れ様でした!

コメント

タイトルとURLをコピーしました