天天看點

C語言 switch語句舉例說明(類比坐電梯來了解)

switch語句的本質是什麼?這麼想你就對了!

我們把使用switch語句的過程規律想象成坐電梯(大家都有坐電梯的經曆),每個case語句後面的标号相當于一個按鈕,你要在哪一層下去,就按那一層按鈕,就可以在這一層下去。

比如一共24層,你要去第幾層,比如我要到第十層下去,那麼你的第十層後面肯定要加個break語句,意義是到這一層就結束了,退出這個switch語句了,我要離開電梯了。

如果說每一層都有人下去,那麼每一層都有一個break語句。

再如果說每一層都不下,我就從1層做到24層,我任性,皮,那你就要把break語句都要取消,不寫break語句,一直執行到default語句後面的 } ,最後到頂層了,出電梯吧,退出switch語句。

有點意思吧?看下面循序漸進的案例,幫你一步一步打通switch語句的任督二脈,帶你超神!

先動手做執行個體示範,發現問題,再來補充知識,解決問題。注意,結合開頭switch語句的本質來分析程式!

[接招看題029] 從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:

score≥90,等級為A;

80≤score<90,等級為B;

70≤score<80,等級為C;

60≤score<70,等級為D;

score<60,等級為E

C語言 switch語句舉例說明(類比坐電梯來了解)

思考題:如果去掉[接招看題029]程式中的所有break語句,且輸入的成績為85, 輸出會如何?還記得電梯的比喻嗎?

先給答案,會把grade=A,grade=B,grade=C,grade=D,grade=E,The score is out of range!,在螢幕上原樣輸出。

再看代碼調試的結果:

C語言 switch語句舉例說明(類比坐電梯來了解)

原理是掌握使用的訣竅,規律。也是你最頭疼的專業術語,但你還是要看一看的。想要成為一個武林高手,當然需要“降龍十八掌”一樣的内功心法來助你修煉了。好,現在開始,随我一起修煉!

1.switch語句的一般形式switch(表達式)

{ case 常量表達式1:語句組;break;

case 常量表達式2:語句組;break;

case 常量表達式n:語句組;break;

[default:語句組;[break; ]]

}

流程圖如下:

C語言 switch語句舉例說明(類比坐電梯來了解)

2.說明:

(1)執行過程當switch後面"表達式"的值,與某個case後面的"常量表達式"的值相同時,就執行該case後面的語句(組);

當執行到break語句時,跳出switch語句,轉向執行switch語句的下一條。還記得電梯按鈕嗎?以下分析都是電梯的比喻。

(2)如果沒有任何一個case後面的"常量表達式"的值,與"表達式"的值比對,則執行default 後面的語句(組)。然後 ,再執行switch語句的下一條。

3.說明:

(1)switch後面的"表達式",可以是int、char和枚舉型中的一種。

(2)每個case後面"常量表達式"的值,必須 各不相同,否則會出現互相沖突的現象(即對表達式的同一值,有兩種或兩種以上的執行方案)。

(3)case後面的常量

表達式僅起語句标号作用,并不進行條件判斷。系統一旦找到入口标号,就從此标号開始執行,不再進行标号判斷,是以 必須加上break語句,以便結束switch語句。

(4)各case及default子句的先後次序,不影響程式執行結果。

(5)多個case子句,可共用同一語句(組)。

例如,在[ 接招看題029]中的"case 10: "和"case 9: “共用語句"printf(“grade=A\n”); break;”,"case 5: "~"case 0: “共用語 句"printf(“grade=E\n”); break;”。

(6)用switch語句實作的多分支結構程式,完全可以用if語句或if語句的嵌套來實 現。

幫你省時的源代碼:

[接招看題029] 從鍵盤上輸入一個百分制成績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      

給各位少俠的結語:先恭喜你耐性的看完了這篇長文,此時的你離優秀又進了一步。在下也在修煉,是以更新部落格會很慢。少俠努力修煉,祝少俠早日成為武林盟主。“江湖不見不散!”

繼續閱讀