第4回 多分岐・これまでの復習問題


第3回の演習の解答例(5/20以降表示可能)


多分岐

先週の発展問題のように,肥満度を細かく判定するにはどうしたらよいか.

複数の条件のどれに当てはまるかを検討するためには,if() - else if() - else を組み合わせて使う.

基本的な分岐の流れは,以下のようにプログラム中の上から順に判定・分岐がされる.

1.1 今の体重を入力する
1.2 目標体重を入力する

2. 必要な消費カロリーを計算する

3.1 消費カロリーの値が
3.1A 0未満 「ビリーとトレーニングする必要はありません」
3.1B 2500未満 「ビリーと1週間くらい運動だね」
3.1C 10000未満 「ビリーと1ヵ月頑張ってみよう」
3.1D 20000未満 「ビリーと2ヵ月頑張ってみよう」
3.1E 30000未満 「ビリーと3ヵ月頑張ってみよう」
3.1F 40000未満 「ビリーと4ヵ月頑張ってみよう」
3.1G それ以外 「やっぱり食生活から見直そう」



#include <stdio.h>

void main()
{
    float a, b, c;   /* aは今の体重,bは目標体重,cは必要な消費カロリー */

    printf("今の体重は?[kg]");
    scanf("%f", &a);
    
    printf("目標体重は?[kg]");
    scanf("%f", &b);

    c = (a-b) * 7500;

    printf("あなたはあと%fkcal消費する必要があります.¥n", c);

    if ( c < 0 ) {
 
        printf("ビリーとトレーニングする必要はありません¥n");              /* cが0未満の時実行 処理1*/
 
    } else if ( c < 2500 ) {
 
        printf("ビリーと1週間くらい運動だね¥n");                  /* cが2500未満の時実行 処理2*/
 
    } else if ( c < 10000 ) {
 
        printf("ビリーと1ヵ月頑張ってみよう¥n");              /* cが10000未満の時実行 処理3*/
 
    } else if ( c < 20000 ) {
 
        printf("ビリーと2ヵ月頑張ってみよう¥n");              /* cが20000未満の時実行 処理4*/
 
    } else if ( c < 30000 ) {
 
        printf("ビリーと3ヵ月頑張ってみよう¥n");              /* cが30000未満の時実行 処理5*/

    } else if ( c < 40000 ) {
 
        printf("ビリーと4ヵ月頑張ってみよう¥n");              /* cが40000未満の時実行 処理6*/
 
    } else {
 
        printf("やっぱり食生活から見直そう¥n");              /* cが40000以上の時実行 処理7*/
 
    }
}

ダメな例



#include <stdio.h>

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

    printf("今の体重は?[kg]");
    scanf("%f", &a);
    
    printf("目標体重は?[kg]");
    scanf("%f", &b);

    c = (a-b) * 7500;

    printf("あなたはあと%fkcal消費する必要があります.¥n", c);

    if ( c < 0 ) {
        printf("ビリーとトレーニングする必要はありません¥n");
    } 

    if ( c < 2500 ) {
        printf("ビリーと1週間くらい運動だね¥n");
    } 

    if ( c < 10000 ) {
        printf("ビリーと1ヵ月頑張ってみよう¥n");
    } 

    if ( c < 20000 ) {
        printf("ビリーと2ヵ月頑張ってみよう¥n");
    } 

    if ( c < 30000 ) {
        printf("ビリーと3ヵ月頑張ってみよう¥n");
    } 

    if ( c < 40000 ) {
        printf("ビリーと4ヵ月頑張ってみよう¥n");
    } 

    if ( c >= 40000 ) {
        printf("やっぱり食生活から見直そう¥n");
    }
 }

なぜダメなのかを考えてみよう!!


あまり良くない例



#include <stdio.h>

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

    printf("今の体重は?[kg]");
    scanf("%f", &a);
    
    printf("目標体重は?[kg]");
    scanf("%f", &b);

    c = (a-b) * 7500;

    printf("あなたはあと%fkcal消費する必要があります.¥n", c);

    if ( c < 0 ) {
        printf("ビリーとトレーニングする必要はありません¥n");
    } 

    if ( 0 <= c && c < 2500 ) {
        printf("ビリーと1週間くらい運動だね¥n");
    }

    if ( 2500 <= c && c < 10000 ) {
        printf("ビリーと1ヵ月頑張ってみよう¥n");
    } 

    if ( 10000 <= c && c < 20000 ) {
        printf("ビリーと2ヵ月頑張ってみよう¥n");
    }

    if ( 20000 <= c && c < 30000 ) {
        printf("ビリーと3ヵ月頑張ってみよう¥n");
    } 

    if ( 30000 <= c && c < 40000 ) {
        printf("ビリーと4ヵ月頑張ってみよう¥n");
    } 

    if (c >= 40000 ) {
        printf("やっぱり食生活から見直そう¥n");
    }

 }


演習

提出する時は,用紙の右上に年,組,番号,名前を明記すること!!

1.何時間,何分,何秒と3つの整数をキーボードから入力すると,秒数に換算して画面に表示するプログラムを組め.(例えば時間,分,秒をそれぞれ 1,30,15と入力すると,5415と画面に表示する.)

2.テストの点数(0点から100点の整数)をキーボードから入力し,その値によって以下の通り,S,A,B,C,Fを画面に表示するプログラムを組め(elseをしっかり用いること).

    点数      成績 
90点以上 S
80点以上90点未満 A
70点以上80点未満 B
60点以上70点未満 C
60点未満 F

3.整数nをキーボードから入力し,まずnの正負を判断し,次に偶数か奇数かを判定し,画面に出力するプログラムを組め.(0を入力した時には「入力された数は0です」と画面に出力しよう)

4.西暦を入力し,うるう年かどうかを判定するプログラムを組め.(4で割り切れ,かつ100では割り切れない年,もしくは400で割り切れる年がうるう年.)

5.整数1~40のどれかの数を入力すると,それが3の倍数もしくは3のつく数字の場合は「アホ」と,それ以外は「正常」と表示されるようプログラムを組め.

6.A君とBさんがじゃんけんをする.グー=1,チョキ=2,パー=3として,A君とBさんの手をそれぞれ入力すると,A君とBさんのどちらが勝ったのかを判定するプログラムを組め.

7.1日の作業時間を入力し,アルバイト料を求めるプログラムを組め.基本は7時間以内で,時間単価は850円である.7時間を越えた場合の計算方式は次の通りである.

・10時間以内の場合

7時間を越えた部分につき,単価900円

・10時間を越えた場合

7時間を越えた部分は単価900円,10時間を越えた部分は単価1000円として計算する.そして全体を1.2倍する.