switch-case

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

switch-case

#1

投稿記事 by 大熊 » 2年前

こんなプログラムかけますか。入力した点数を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
成績判定: エラー

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: switch-case

#2

投稿記事 by みけCAT » 2年前

C言語においては、
比較演算子 (==、!=、<、<=、>、>=) 、論理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で殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る