題組內容
三、假設已經將某位考生的單一科目分數輸入到變數 int nScore 中,並確定其值介於
0~100 之間。請依下列各子題要求分別撰寫出程式片段,將該分數轉換為等級 char
Grade,使得 Grade 與 nScore 之對應為:’A’:90~100、’B’:80~89、’C’:70~79、’D’:
60~69、’E’:0~59。作答時可以使用 C/C++、Java 或 C#其中任何一種語言作答,但
必須註明所採用語言。
⑵使用 switch,且 case 標籤(label)須盡量精簡。(15 分)
詳解 (共 4 筆)
詳解
以C++為例:
此題採用switch,其中case部分為一範圍,故可使用特別寫法,
數字 ... 數字表示,並注意除了最後判斷外,每個case須加上break作為停止判斷。
#include<stdlib.h>
int main(){
int nScore;
char Grade;
switch(nScore){
case 90 ... 100:
Grade='A';
break;
case 80 ... 89:
Grade='B';
break;
case 70 ... 79:
Grade='C';
break;
case 60 ... 69:
Grade='D';
break;
default:
Grade='E';
}
return 0;
}
詳解
switch(score / 10) {
case 10: case 9:
Grade= "A" ;
break;
case 8:
Grade="B";
break;
case 7:
Grade="C";
break;
case 6:
Grade="D" ;
break;
default:
Grade="E" ;
break;
case 6:
Grade="D" ;
break;
default:
Grade="E" ;
}
詳解
switch(nScore/10){
case 9:
Grade='A';
break;
case 8:
Grade='B';
break;
case 7:
Grade='C';
break;
case 6:
Grade='D';
break;
default:
Grade='E';
}
詳解
使用 switch 語句進行分級時,由於 switch 不直接支持範圍比較,我們可以通過一個小技巧來實現:先將分數轉換成一個較小範圍的值,然後在 switch 語句中使用這個值進行匹配。這裡是一個使用 C/C++ 語言的範例:
#include <iostream>
using namespace std;
using namespace std;
int main() {
int nScore = 85; // 假設考生分數是 85
char Grade;
int nScore = 85; // 假設考生分數是 85
char Grade;
switch (nScore / 10) {
case 10:
case 9:
Grade = 'A';
break;
case 8:
Grade = 'B';
break;
case 7:
Grade = 'C';
break;
case 6:
Grade = 'D';
break;
default:
Grade = 'E';
}
case 10:
case 9:
Grade = 'A';
break;
case 8:
Grade = 'B';
break;
case 7:
Grade = 'C';
break;
case 6:
Grade = 'D';
break;
default:
Grade = 'E';
}
cout << "Score: " << nScore << " is equivalent to Grade: " << Grade << endl;
return 0;
}
在這段代碼中,我們先將 nScore 除以 10,這樣所有 90 到 100 的分數都會被轉換成 9(或10,對於滿分100),80 到 89 的分數都會被轉換成 8,以此類推。這樣我們就可以使用這個結果作為 switch 語句的條件,並根據結果設置相應的等級。這種方法簡化了 case 標籤,使代碼更加精簡。
}
在這段代碼中,我們先將 nScore 除以 10,這樣所有 90 到 100 的分數都會被轉換成 9(或10,對於滿分100),80 到 89 的分數都會被轉換成 8,以此類推。這樣我們就可以使用這個結果作為 switch 語句的條件,並根據結果設置相應的等級。這種方法簡化了 case 標籤,使代碼更加精簡。