文章目录
前言
在实际问题中,常常会用到多分支的选择。当然,使用嵌套的 if 的语句也可以实现多分支的选择,但如果分支较多,就会使的嵌套的 if 语句层数过多,程序冗余,可读性也不好。C语言中可以使用switch语句直接处理多分支选择的情况,将程序代码的可读性提高。
一、switch 语句的基本形式
switch语句是多分支选择语句。一般形式如下:
switch(表达式)
{
case 情况1:
语句块1;
case 情况2:
语句块2;
...
case 情况n:
语句块n;
default:
默认语句块;
}
switch 后面的表达式就是要进行判断的条件,然后使用 case 关键字表示检验条件符合的各种情况,其后的各语句块是相应的操作。其中还有一个 default 关键字,作用是如果没有符合条件的情况,那么执行 default 后面的默认情况语句。
说明:
switch 语句检验的条件必须是一个整型表达式,这意味着其中也可以包含运算符和函数调用。而case 语句检验的值必须是整型常量,即常量表达式或者常量运算。
下面通过代码体会一下 switch 语句的使用方法。
switch(selection)
{
case1:
printf("processing receivables\n");
break;
case2:
peintf("processing payables\n");
break;
case3
printf("quitting\n");
break;
default:
printf("error\n");
break;
}
首先 switch 判断 selection 变量的值,然后利用 case 语句检验 selection 值的不同情况。假设selection 的值为2,那么执行 case 为2时的情况,执行后跳出switch语句。如果selection 的值不是case中所列出的情况,那么执行 default 中语句。在,在每一个case或者default语句后都有一个break关键字。break语句用于跳出switch循环,不再执行下面的代码。
注意:
switch语句中,如果所有case后面的值都不能匹配switch语句的条件,就执行default语句后面的代码。其中,任意两个case语句都不能使用相同的常量值;每个switch结构只能有一个default语句,而且default可以省略
下面通过实例来感受一下:
如果是周末就是休息日,如果不是周末就要上班。同时,休息日也可以是星期六,也可以是星期日,星期六我们可以和朋友去逛街,星期日我们可以陪家人在家。用switch语句模拟此场景。
#include<stdio.h>
int main()
{
int day=0; //定义变量day表示输入的日期
printf("enter a day df week to get course:\n");//提示信息
scanf("%d",&day); //输入日期
switch(day)
{
case 1:
peintf("have a metting in the company\n");
break;
case 6:
printf("go shopping with friends\n");
break;
case 7:
peintf("at home with families\n");
break;
default:
peintf("working with partner\n");
break;
}
return 0;
}
在程序中,使用switch...case检验时,不要忘记case检验的条件只能是常量或者常量表达式,而不能对变量进行检验。
警示:
初学switch语句时,很容易认为break是switch语句的一部分,是switch的必要条件。但是不是这样,break可以不与switch匹配。
二.多路开关模式的switch语句
将某个case语句后的语句块及break去掉之后,可以设计出多路开关模式的switch语句。例如:
switch(表达式)
{
case 1:
语句1;
break;
case 2:
case 3:
语句2;
break;
...
default:
默认语句
break;
}
可以看到,如果在case2后不再使用break语句,那么符合case2检验与符合case3检验时的输出效果是一样的,也就是说,也就是说多路开关模式可使得多种检验条件执行同一个操作。
通过下面这个实例来感受一下多路开关模式的用处:
#include<stdio.h>
int main()
{
int mouth;//定义变量mouth表示月份
printf("please enter a mouth:\n");
scanf("%d",&mouth);//输入月份
switch(mouth)//根据月份判断季节
{
case 3:
case 4:
case 5:
printf("%d is spring\n",month);//多路开关模式
break;
case 6;
case 7:
case 8:
printf("%d is summer\n",month);//多路开关模式
break;
case 9:
case 10:
case 11:
printf("%d is autumn\n",month);//同上
case 12:
case 1:
case 2:
printf("%d is winter\n",mouth);//同上
break;
default:
printf("error!!!\n")//无此月份
}
return 0;//程序结束
}
总结:
switch语句一般用于处理简单而繁琐的数据,复杂点的数据,比如涉及到大小判断,加减计算等等一般要运用if...else 语句等。