- C程序設計語言
- 魏東平 朱連章 于廣斌編著
- 1036字
- 2018-12-29 14:37:50
4.5 switch語句
當分支較多時,利用if語句設計出來的程序會變得復雜冗長,并且很容易產生if與else不匹配的問題。C語言提供了switch語句專門處理多路分支的情形,以使程序變得更簡潔。但switch語句比較復雜,使用時要多加注意。
switch語句的一般形式為:
switch(表達式) { case常量表達式1:語句1; case常量表達式2:語句2; …… case常量表達式n:語句n; default:語句n+1; }
其中,switch、case、default是C語言的保留字。
switch語句的執行過程為:先計算“表達式”的值,并逐個與其后的“常量表達式i”(即常量表達式1、常量表達式2、……、常量表達式n)的值相比較,當“表達式”的值與“常量表達式i”的值相等時,即開始執行該“常量表達式i”后的“語句i”,如果沒有遇到break語句,則繼續執行后面所有的case后(跳過case部分)的語句,直到遇到break語句或者switch語句最后的“}”。如果“表達式”的值與所有的“常量表達式”均不相同,則執行default后的語句。
在switch語句中,常使用break語句來結束switch語句。break語句的格式為:
break;
是C語言最簡單的語句之一。
【例4.9】 某幼兒園只收2~6歲的兒童。2~3歲入小班,4歲入中班,5~6歲入大班。根據輸入的年齡,求應入的班級。
分析:設年齡為age,當age為2和3時,應輸出同樣的內容“入小班”,age為5和6時輸出同樣的內容“入大班”。該題算法比較簡單,直接給出程序。
程序如下:
1 #include<stdio.h> 2 void main() 3 { int age; 4 printf("Please enter age:"); 5 scanf("%d",&age); 6 switch(age) 7 { case 2: 8 case 3: printf("入小班\n"); break; 9 case 4: printf("入中班\n"); break; 10 case 5: 11 case 6: printf("入大班\n"); break; 12 default: printf("不能入園\n"); 13 } 14 }
【例4.10】 用switch語句重寫例4.5,將百分制成績劃分為5段輸出。
分析:除不及格檔次外,其他各等級中每個數的十位數字均相同(100除外)。可以用成績的十位數字作為條件來寫程序。設成績為score,除以10取整后的結果為k,則本題的程序如下:
1 #include<stdio.h> 2 void main() 3 { int score,k; 4 printf("input a score:"); 5 scanf("%d",&score); 6 k=score/10; 7 switch(k) 8 { 9 case 10: 10 case 9: printf("優秀\n"); break; 11 case 8: printf("良好\n"); break; 12 case 7: printf("中等\n"); break; 13 case 6: printf("及格\n"); break; 14 default: printf("不及格\n"); 15 } 16 }
在使用switch語句時,應注意以下幾點:
① switch后面的“表達式”,可以是int、char和枚舉型中的一種;
② 在case后的各常量表達式的值不能相同,否則會出現錯誤;
③ case后面的常量表達式僅起語句標號的作用,表示程序的入口,但不表示結束,也就是說,執行完某個case后的語句后,如果后面有其他case的語句,則繼續執行這些語句,為此,需要使用break語句,以便跳出switch語句;
④ 在每個case后,允許有多個語句,不必用“{}”括起來;
⑤ 各case和default子句的先后順序可以任意交換,而不會影響程序的執行結果,但要注意合理地添加break語句;
⑥ default部分可以省略;
⑦ 用switch語句實現的多分支程序,完全可以用if語句來實現。