第7回 論理演算と条件分岐 (6/4)


前回の演習の答え

肥満度を表す指標に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を入力したらどうなるか?


解答例:

#include <stdio.h>

void main()
{
    float weight, height, BMI;

    printf("体重は?[kg]"); scanf("%f", &weight);
    printf("身長は?[m]"); scanf("%f", &height);

    BMI = weight / height / height;

    printf("BMI値は,%2.1fです\n", BMI);
}

さて,ここで肥満度(表の左側)の判定結果を画面に表示するためにはどうしたらよいか考えてみよう.

手始めに,BMI値が25以上だったら「肥満です」と画面に表示されるようにしよう.

プログラムを作成するときは,課題が与えられたらいきなりプログラミングに取りかからず,必ず計算手順(アルゴリズム)を検討する.ここで,肥満度を判定するにはBMI値を計算しなくてはならないから,おおまかな計算手順は

1. 身長・体重を入力する

2. BMI値を計算する

3. 肥満を判定する

となる.それぞれを,詳細に検討すると,

1.1 身長を入力する

1.2 体重を入力する

2. BMI値を計算する

3.1 BMI値が25未満か?

3.1T 成立するとき 「肥満ではありません」
3.1F 不成立のとき 「肥満です!」

したがって,最終的な計算手順は

1.1 身長を入力する
1.2 体重を入力する

2. BMI値を計算する

3.1 BMI値が25未満か?
3.1T 成立するとき 「肥満ではありません」
3.1F 不成立のとき 「肥満です!」

これを,C言語を用いてプログラムにしてみよう.


比較演算子

プログラムでは,変数や数の大小を比較して,その結果によって処理を変えることを条件分岐と呼びます.

数の大小を比較する演算子を比較演算子と呼び,比較の条件が成立した場合を「真(True)」,不成立の場合を「偽(False)」といいます.

演算子
はたらき
使い方
意味
==
等しい
a == b
a と b は等しい
<
小なり
a < b
a は b より小さい
>
大なり
a > b
a は b より大きい
<=
以下
a <= b
a は b 以下
>=
以上
a >= b
a は b 以上
!=
等しくない
a != b
a と b は等しくない

注意: =>, =<, =! などはありません.


論理演算子

複数の条件を組み合わせて,より複雑な条件を作るためには,論理演算子を用います.

演算子
はたらき
使い方
意味
&&
かつ
a && b
||
または
a || b
!
〜ではない
!a

if文

英語でif〜, then〜. は,「もし〜ならば,〜」と使います.C言語でも同様に条件によってプログラムの手順を切り替える(制御する)ために用います.アルゴリズムを表現するために用いるフローチャートで表すと,

となり,条件が成り立つときは処理1を実行し,成り立たないときは何もしません.

さらに,if〜, then〜, else〜.となると,

このように,条件が成り立つときは処理1を実行し,成り立たないときは処理2を実行するという構造になります.では,これを使って,上のプログラムを作ってみましょう.

#include <stdio.h>

void main()
{
    float weight, height, BMI;

    printf("体重は?[kg]"); scanf("%f", &weight);
    printf("身長は?[m]"); scanf("%f", &height);

    BMI = weight / height / height;

    printf("BMI値は,%2.1fです\n", BMI);

    if(BMI < 25.0)
        printf("肥満ではありません\n");          /* BMIが25未満の時実行 処理1*/
    else
        printf("肥満です!!\n");                /* BMIが25以上の時実行 処理2*/
}

ブロック

上の例で,処理1,処理2の所には,基本的に一つの分子か書けません.複数の処理を行いたいときは,まとめて{ }でくくって一つのブロックと見なします.


    if(BMI < 25.0)
    {
        printf("肥満ではありません\n");          /* BMIが25未満の時実行 処理1*/
        printf("よかったね.");
    }
    else
    {
        printf("肥満です!!\n");                /* BMIが25以上の時実行 処理2*/
        printf("ダイエットしましょう");
    }

または,場所を節約して,


    if(BMI < 25.0){
        printf("肥満ではありません\n");          /* BMIが25未満の時実行 処理1*/
        printf("よかったね.");
    }else{
        printf("肥満です!!\n");                /* BMIが25以上の時実行 処理2*/
        printf("ダイエットしましょう");
    }

と書きます.


多分岐

それでは一番はじめに戻って,肥満度をより細かく判定するにはどうしたらよいでしょうか.

複数の条件のどれに当てはまるかを検討するためには,if文を組み合わせて使います.考え方は,

1.1 身長を入力する
1.2 体重を入力する

2. BMI値を計算する

3.1 BMI値が
3.1A 18.5未満 「やせすぎです」
3.1B 25未満 「普通です!」
3.1C 30未満 「肥満度1です!」
3.1D 35未満 「肥満度2です!」
3.1E 40未満 「肥満度3です!」
3.1F それ以外 「肥満度4です!」

#include <stdio.h>

void main()
{
    float weight, height, BMI;

    printf("体重は?[kg]"); scanf("%f", &weight);
    printf("身長は?[m]"); scanf("%f", &height);

    BMI = weight / height / height;

    printf("BMI値は,%2.1fです\n", BMI);

    if(BMI < 18.5)
        printf("やせすぎです\n");               /* BMIが18.5未満の時実行 処理1*/
    else if(BMI < 25)
        printf("普通です\n");                   /* BMIが25未満の時実行 処理2*/
    else if(BMI < 30)
        printf("肥満度1です\n");              /* BMIが30未満の時実行 処理3*/
    else if(BMI < 35)
        printf("肥満度2です\n");              /* BMIが35未満の時実行 処理4*/
    else if(BMI < 40)
        printf("肥満度3です\n");              /* BMIが40未満の時実行 処理5*/
    else
        printf("肥満度4です\n");              /* BMIが40以上の時実行 処理6*/
 }

演習

1.自然数nを入力し,偶数か奇数か判定する

2.テストの点数(0点から100点の整数)を入力し,その値によって,優,良,可,不可を表示する.

点数
成績
80点以上
60点以上80点未満
50点以上60点未満
50点未満
不可