こんなプログラムかけますか。入力した点数を10で割っても101から109は10扱いになり、ふるいにかけられません。お教えください
以下の実行例のように, 点数を入力すると成績を判定するプログラムを作成しなさい.
入力された点数が
- 0 点以上 60 点未満のとき D
- 60 点以上 70 点未満のとき C
- 70 点以上 80 点未満のとき B
- 80 点以上 90 点未満のとき A
- 90 点以上 100 点以下のとき S
- 上記以外のとき エラー
と表示すること.
ただし, switch-case 文を用いること (if 文, if-else文, および条件演算子を使用してはならない)
実行結果 1 (黄色い文字は標準入力を表す)
点数を入力> 50
成績判定: D
実行結果 2 (黄色い文字は標準入力を表す)
点数を入力> 70
成績判定: B
実行結果 3 (黄色い文字は標準入力を表す)
点数を入力> 100
成績判定: S
実行結果 4 (黄色い文字は標準入力を表す)
点数を入力> 105
成績判定: エラー
switch-case
Re: switch-case
C言語においては、
比較演算子 (==、!=、<、<=、>、>=) 、論理AND演算子(&&)、論理OR演算子(||)、論理NOT演算子(!)の評価結果は
真のとき1、偽のとき0となるので、例えば
のように書くことで
と等価な処理ができます。
他の判定についても、これを並べるといいでしょう。
「エラー」の処理は、「エラー」の出力処理を最後に置き、
1. D~Sのどれかを出力したら、そこでreturnして「エラー」の出力に行かないようにする
2. D~Sのどれかを出力したかどうかを示すフラグ変数を用意し、出力した状態だったら「エラー」を出力しないようにする
のいずれかで実現すれば、switchのネストが深くならずいいと思います。
比較演算子 (==、!=、<、<=、>、>=) 、論理AND演算子(&&)、論理OR演算子(||)、論理NOT演算子(!)の評価結果は
真のとき1、偽のとき0となるので、例えば
#include <stdio.h>
int main(void) {
int value = 42;
switch (0 <= value && value < 60) {
case 1:
puts("D");
break;
case 0:
puts("Dではない");
break;
}
return 0;
}
#include <stdio.h>
int main(void) {
int value = 42;
if (0 <= value && value < 60) {
puts("D");
} else {
puts("Dではない");
}
return 0;
}
他の判定についても、これを並べるといいでしょう。
「エラー」の処理は、「エラー」の出力処理を最後に置き、
1. D~Sのどれかを出力したら、そこでreturnして「エラー」の出力に行かないようにする
2. D~Sのどれかを出力したかどうかを示すフラグ変数を用意し、出力した状態だったら「エラー」を出力しないようにする
のいずれかで実現すれば、switchのネストが深くならずいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)