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
思考題:如果去掉[接招看題029]程式中的所有break語句,且輸入的成績為85, 輸出會如何?還記得電梯的比喻嗎?
先給答案,會把grade=A,grade=B,grade=C,grade=D,grade=E,The score is out of range!,在螢幕上原樣輸出。
再看代碼調試的結果:
原理是掌握使用的訣竅,規律。也是你最頭疼的專業術語,但你還是要看一看的。想要成為一個武林高手,當然需要“降龍十八掌”一樣的内功心法來助你修煉了。好,現在開始,随我一起修煉!
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.說明:
(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
給各位少俠的結語:先恭喜你耐性的看完了這篇長文,此時的你離優秀又進了一步。在下也在修煉,是以更新部落格會很慢。少俠努力修煉,祝少俠早日成為武林盟主。“江湖不見不散!”