C程序设计语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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语句来实现。