目录
- 1. switch语句
- 写一个简单的switch语句
- 2. if语句和else语句的对比
- 判断3的倍数情况
- 3. switch语句中break详解
- 4. switch语句的一项小练习
- 5. switch语句中的default
- 6. switch语句中的顺序问题
1. switch语句
C语言除了if...else...
作为条件语句外,还提供了switch
语句。
switch
语句其实是一种特殊的if...else...
结构语句,用于判断条件有多个结果的情况,它把多重的else if
换成了更简易,可读性更好地结构;
swith(expression)
{
case value1: statement;
case value2: statement;
default:statament;
}
根据表达式expression
的值,执行相应的case
分支,若所有的case
分支不符合,则执行default
分支。
注意
switch()
里面的expression
表达式必须是整型表达式case
后的值,必须是整型常量表达式
写一个简单的switch语句
在我们了解了switch
语句的基本用法后,我们可以试着写一个简单的switch
程序了
#include<stdio.h>
int main()
{
int a = 0;
printf("请输入一个数a(0<=a<=3):");
scanf("%d", &a);
switch (a)
{
case 0: printf("你输入的数是0\n");
case 1: printf("你输入的数是1\n");
case 2: printf("你输入的数是2\n");
case 3: printf("你输入的数是3\n");
}
return 0;
}
如果,我们输入1,大家猜一猜结果是啥?
一些人肯定看了就说,输入的 a 符合 case 1 的分支,肯定输出“你输的数是1”,结果真的是这样吗?
我们来看一下:
咦?为什么后面的三个全部输出了?
其实,符合case
分支只是从这个分支进入,后面的分支也是可以执行的。
所以,如果我们要完成单一分支的执行,要在每个分支后面加上break
改正后的代码
#include<stdio.h>
int main()
{
int a = 0;
printf("请输入一个数a(0<=a<=3):");
scanf("%d", &a);
switch (a)
{
case 0: printf("你输入的数是0\n");
break;
case 1: printf("你输入的数是1\n");
break;
case 2: printf("你输入的数是2\n");
break;
case 3: printf("你输入的数是3\n");
break;
}
return 0;
}
输出结果
注意:
- 每个
case
和后边的数字之间必须有空格 - 每一个
case
语句中的代码执行完成后,需要加上break
,才能跳出一个switch
语句
2. if语句和else语句的对比
判断3的倍数情况
if语句判断
#include<srio.h>
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 3 == 0)
{
printf("是3的倍数");
}
else if (a % 3 == 1)
{
printf("余数为1");
}
else
{
printf("余数为2");
}
return 0;
}
switch语句判断
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a%3)
{
case 0: printf("是3的倍数");
break;
case 1: printf("余数为1");
break;
case 2: printf("余数为2");
break;
}
return 0;
}
输出结果
从两种代码的对比中我们可以看出,对于多种结果选择的条件语句,switch
控制的更加简介,可读性更好!
3. switch语句中break详解
以上面代码去掉break,我们看看结果
很显然,后面的所有语句都执行了。
其实原因,就是switch
语句也是有分支效果的,只有在每个分之后面加上break
才能跳出这个分支语句;意思就是说,如果一个分支语句后面没有break
,那么语句会继续往下执行,有可能执行其他case
控制的语句中的代码,知道遇到break
语句或者switch
语句结束,就比如上面程序执行了,case0
, case1
, case2
中的代码。
所以,在case
语句后面加上break
语句是非常重要的,这样就能起到真正的分支效果;
但是,并不是所有的case语句后面都需要加上break
语句这就需要具体问题具体分析了;
4. switch语句的一项小练习
写以个switch语句,输入1 ~ 5,输出工作日,输入6 ~ 7,输出休息日;
#include<stdio.h>
int main()
{
int day = 0;
printf("请输入星期天数:\n");
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
通过这个练习,有两点需要注意一下:
- 多个
case
控制一条相同的语句,可以省略只留下一个被控制的语句; - 我们应该根据实际情况,决定在代码中是否使用
break
, 在哪里使用break
,才能更好的满足需求;
5. switch语句中的default
在使用switch
语句的时候,我们经常遇到这样的情况,就是在switch
后面的表达式无法匹配到任何一种case
分支语句的时候,这个时候要么就不要处理,要么就使用default
语句;
swith(expression)
{
case value1: statement;
case value2: statement;
default:statament;
}
简单来说,就是switch
中的expression
表达式既不等于value1
,又不等于value2
,这时候就要执行default
分支;
比如我们将上面的工作日代码,换一种方法输入,我们不输入1~7的数,而是输入一个大于7的数。
输出结果
我们可以发现,这时候输出为空;
所以,我们也可以加上default
语句处理这一问题;
#include<stdio.h>
int main()
{
int day = 0;
printf("请输入星期天数:\n");
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误!");
}
return 0;
}
输出结果
6. switch语句中的顺序问题
在switch
语句中case
字句和default
字句有要求顺序吗?default
语句必须放在最后面吗?
答案其实并不是这样的,在switc
h语句中,case
语句和default
语句是没有顺序要求的,只要满足实际要求就可以!
不过我们通常把defaul
t语句放在最后。