官术网_书友最值得收藏!

  • 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語句來實現。

主站蜘蛛池模板: 肇庆市| 乐陵市| 洪江市| 屏东县| 阿合奇县| 台南市| 碌曲县| 富顺县| 浦东新区| 卓尼县| 定安县| 武宁县| 全南县| 邵东县| 柳河县| 城步| 察雅县| 东源县| 蒙城县| 巴里| 灵台县| 曲阳县| 册亨县| 宾川县| 临沂市| 顺义区| 思南县| 灵丘县| 葵青区| 新乡县| 阳春市| 东方市| 阜阳市| 荥阳市| 广昌县| 万年县| 林口县| 天长市| 西青区| 山阳县| 仁化县|