[案例] 從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;
[案例] 從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,
等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;
score<60,等級為E。
main()
{
int score, grade;
printf("Input a score(0~100): ");
scanf("%d", &score);
grade = score/10; /*将成績整除10,轉化成switch語句中的case标号*/
switch (grade)
{
case 10:
case 9: printf("grade=A\n"); break;
case 8: printf("grade=B\n"); break;
case 7: printf("grade=C\n"); break;
case 6: printf("grade=D\n"); break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: printf("grade=E\n"); break;
default: printf("The score is out of range!\n");
}
}
程式運作情況如下:
Input a score(0~100): 85↙
grade=B
1.switch語句的一般形式switch(表達式)
{ case 常量表達式1:語句組;break;
case 常量表達式2:語句組;break;
…
case 常量表達式n:語句組;break;
[default:語句組;[break; ]]
}
2.說明
(1)執行過程當switch後面"表達式"的值,與某個case後面的"常量表達式"的值相同時,就執行該case後面的語句(組);
當執行到break語句時,跳出switch語句,轉向執行switch語句的下一條。
(2)如果沒有任何一個case後面的"常量表達式"的值,與"表達式"的值比對,則執行default 後面的語句(組)。然後 ,再執行switch語句的下一條。
(3)case 常量表達式1 與 switch(表達式) 的聯系:case後面的"常量表達式"的資料類型與 switch(表達式)的資料類型相同,而且switch(表達式)的資料類型決定了case後面的"常量表達式"的資料類型,也就是說case後面的"常量表達式"的資料類型要與switch(表達式)的資料類型保持一緻。
3.說明
(1)switch後面的"表達式",可以是int、char和枚舉型中的一種。
(2)每個case後面"常量表達式"的值,必須 各不相同,否則會出現互相沖突的現象(即對表達式的同一值,有兩種或兩種以上的執行方案)。
(3)case後面的常量
表達式僅起語句标号作用,并不進行條件判斷。系統一旦找到入口标号,就從此标号開始執行,不再進行标号判斷,是以 必須加上break語句,以便結束switch語句。
思考題:如果去掉[案例]程式中的所有break語句,且輸入的成績為75, 輸出會如何?
(4)各case及default子句的先後次序,不影響程式執行結果。
**(5)多個case子句,可共用同一語句(組)。**例如,在[ 案例]中的"case 10: "和"case 9: “共用語句"printf(“grade=A\n”); break;”,"case 5: "~"case 0: “共用語
句"printf(“grade=E\n”); break;”。