天天看點

C語言 switch語句

[案例] 從鍵盤上輸入一個百分制成績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;”。

繼續閱讀