先週の問4の問題をさらに発展させ,以下のように設定する.
3000円未満 | 割引なし |
3000円以上~5000円未満 | 5%引き |
5000円以上~10000未満 | 15%引き |
10000円以上 | 31%引き |
複数の条件のどれに当てはまるかを検討するためには,if() - else if() - else を組み合わせて使う.
基本的な分岐の流れは,以下のようにプログラム中の上から順に判定・分岐がされる.
1. 金額を入力する. 2. 金額が |
#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さんのどちらが勝ったのかを判定するプログラムを、以下の手順で考える。
- A君とBさんの出す手の、考えられる組み合わせとそのときの勝敗を表にする。
- プログラムの流れを、例題に習って日本語で書き表す。
- フローチャートを書く。
ここまでを、配布した紙に書いて提出。
- これらの流れを参考に、プログラムを作成する。
授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出用の回に提出しないと,採点を行わない)