第6回 型変換と文字入力 (5/21)


第5回の演習の答え

a = 6, b = 5 のとき,次の各計算結果を表示するプログラムを作成せよ.

a + b

a − b

a × b

a ÷ b

a ÷ b のあまり

底辺が a, 高さ b の三角形の面積

a2 + ab

解答例:

#include <stdio.h>

void main()
{
    int a, b;

    a = 6;
    b = 5;

    printf("a = %d\nb = %d\n", a, b);
    printf("a + b = %d\n", a+b); 
    printf("a - b = %d\n", a-b); 
    printf("a X b = %d\n", a*b); 
    printf("a / b = %d\n", a/b); 
    printf("a %% b = %d\n", a%b); 
    printf("底辺a,高さbの三角形の面積 = %d\n", a*b/2); 
    printf("a^2 + ab = %d\n", (a+b)*a); 
}

結果:

a = 6
b = 5
a + b = 11
a - b = 1
a X b = 30
a / b = 1
a % b = 1
底辺a,高さbの三角形の面積 = 15
a^2 + ab = 66

あれ,結果が思い通りになりませんね.

わり算の結果(商)は,実数になるはずなので,

    printf("a / b = %f\n", a/b); 

としてみましょう.さあ,どうでしょう?

    a / b = 0.000000 

ますますおかしくなりましたね.これは,同じ型同士で演算をすると結果も同じ型になるからです.

上の例だと,

    [整数]=[整数]÷[整数]

となるため,商が正しく求まりません.そこで,別の実数の変数を用意して,

    [実数]=[整数]÷[整数]

となるように,書き換えてみましょう.

#include <stdio.h>

void main()
{
    int a, b;
    float c;

    a = 6;
    b = 5;
    c = a / b;

    printf("a / b = %f\n", c); 
}

結果:

a / b = 1.000000

まだ,おかしいですね.


型の変換

わり算をうまく行うには,

    [実数]=[実数]÷[実数]

としなくてはなりません.そこで,整数から実数に変数の型を 変換 する必要があります.型を変換する演算子を キャスト演算子 と呼びます.

#include <stdio.h>

void main()
{
    int a, b;
    float c;

    a = 6;
    b = 5;
    c = (float)a / (float)b;

    printf("a / b = %f\n", c); 
}

結果:

a / b = 1.200000

やっと,意図した結果が得られました.

このように,計算の途中で型が思い通りにならないことが多く出てきます.気をつけてプログラムを作りましょう.


キーボードからの入力

これまで,プログラム内で扱う値は,あらかじめプログラムに記述してあるものしか,扱えませんでした.

上のプログラムで,変数aや変数bに,値を後から設定できるようにしましょう.キーボードからデータを入力するには scanf()関数を用います.

scanf() 関数は,printf() 関数によく似ていますが,変数の前に必ず & をつけます.この記号の意味は後期に説明します.


キーボードから入力した値を表示するプログラム:

#include <stdio.h>

void main()
{
    int a;
    float b;

    printf("a = "); scanf("%d", &a);
    printf("b = "); scanf("%f", &b);

    printf("a = %d\n", a);
    printf("b = %f\n", b);
}

練習

先週作成したプログラムにおいて,変数a, b をキーボードから入力して計算するように変更してみよう.


演習

肥満度を表す指標にBMIというものがあります.これは1999年にWHOで基準が発表されていますが,18.5から25までが正常範囲とされています.

BMI=体重(kg)÷身長(m)^2

キーボードから体重と身長を入力すると,BMI値を計算して画面に表示するプログラムを作成せよ.

参考:

BMI 判定
18.5未満 やせ
18.5〜25 普通
25〜30 肥満1
30〜35 肥満2
35〜40 肥満3
40以上 肥満4

こんなの簡単!という人へ の研究課題

体重と身長を一つのscanf()関数で入力するにはどうしたら良いだろう?

間違えて,身長に0を入力したらどうなるか?