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


第3回の演習の解答例


多分岐

先週の問4の問題をさらに発展させ,以下のように設定する.

3000円未満 割引なし
3000円以上~5000円未満 5%引き
5000円以上~10000未満 15%引き
10000円以上 31%引き

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

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

1. 金額を入力する.

2. 金額が
2.1 3000円未満 →金額をそのまま表示する
2.2 5000円未満 →金額を5%引きして表示する
2.3 10000円未満→金額を15%引きして表示する
2.4 それ以外 →金額を31%引きして表示する



#include <stdio.h>

void main()
{
	int x;   /* xは最初の金額 */

	printf("金額(円)=");
	scanf("%d", &x);

	if ( x < 3000 ) {

		printf("割引を考慮した金額は%d円です¥n", x);                     /* xが3000未満の時実行 処理1*/

	} else if ( x < 5000 ) {

		printf("割引を考慮した金額は%d円です¥n", x*(100-5)/100);         /* xが5000未満の時実行 処理2*/

	} else if ( x < 10000 ) {

		printf("割引を考慮した金額は%d円です¥n", x*(100-15)/100);        /* xが10000未満の時実行 処理3*/

	} else {

		printf("割引を考慮した金額は%d円です¥n", x*(100-31)/100);        /* xが10000以上の時実行 処理4*/

	}
}

よくある間違いの例



#include <stdio.h>

void main()
{
	int x;

	printf("金額(円)=");
	scanf("%d", &x);

	if ( x < 3000 ) {
		printf("割引を考慮した金額は%d円です¥n", x);
	}

	if ( x < 5000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-5)/100);
	}

	if ( x < 10000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-15)/100);
	} 

	if ( x >= 10000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-31)/100);
	}
}

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


あまり良くない例



#include <stdio.h>

void main()
{
	int x;

	printf("金額(円)=");
	scanf("%d", &x);

	if ( x < 3000 ) {
		printf("割引を考慮した金額は%d円です¥n", x);
	}
	
	if ( x >= 3000 && x < 5000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-5)/100);
	}
	
	if ( x >= 5000 && x < 10000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-15)/100);
	}
	
	if ( x >= 10000 ) {
		printf("割引を考慮した金額は%d円です¥n", x*(100-31)/100);
	}
}

 

このプログラムも、表示は正しいけれど、たとえば、2000円でも4回の条件判断をする。
一方、最初のプログラムでは、1回の条件判断ですむ。


演習課題

(1) 西暦を入力すると,その年が、うるう年かどうかを判定するプログラムを組め.

(4で割り切れ,かつ100では割り切れない年,もしくは400で割り切れる年がうるう年.)

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

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

(3) A君とBさんがじゃんけんをする.グー=1,チョキ=2,パー=3として,A君とBさんの手をそれぞれ入力すると,A君とBさんのどちらが勝ったのかを判定するプログラムを、以下の手順で考える。

  1. A君とBさんの出す手の、考えられる組み合わせとそのときの勝敗を表にする。
  2. プログラムの流れを、例題に習って日本語で書き表す。
  3. フローチャートを書く。
  4. ここまでを、配布した紙に書いて提出。

  5. これらの流れを参考に、プログラムを作成する。

授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出用の回に提出しないと,採点を行わない)