1.switch语句
C语言中,除了if语句外,还有switch语句也可用来实现分支结构。
switch语句是一种特殊形式的if……else结构,用于判断条件有多个结果的情况,把多重的else if改成更易用、可读性更好的形式。switch-开关
switch (expression){
case value1:statement
case value1:statement
default:statement
}
expression是一个表达式,表达式可以计算一个结果,结果为几,执行value几,若找不到case对应的值,则执行default语句。
注意:
- switch后的expression必须是整型表达式。
- case后的值,必须是整型常量表达式。
1.1 switch语句和if语句对比
exe1:输入任意一个整数值,计算除3之后的余数。
用if语句:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a=0;
printf("请输入值:", a);
scanf("%d", &a);
if (a % 3 == 0)
printf("余数为0\n");
else if (a % 3 == 1)
printf("余数为1\n");
else
printf("余数为2\n");
return 0;
}
运行结果:
用switch语句:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a=0;
printf("请输入值:", a);
scanf("%d", &a);
switch (a % 3)
{
case 0:
printf("余数是0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
运行结果:
switch后的expression必须是整型表达式(包括字符类型)。case后的值,必须是整型常量表达式。default语句可有可无
注意:
1.case和后边的数字之间必须有空格。
2.每一个case语句中的代码执行完成后,需要加break,才可跳出switch语句。(若无break则语句一直在执行。想要实现分支就需加break语句。)
1.1.1 习题1.使用switch语句,输入一个1~7的数字,打印对应的星期几。
例如:
输入: 1 输出: 星期一
输入: 2 输出: 星期二
输入: 3 输出: 星期三
输入: 4 输出: 星期四
输入: 5 输出: 星期五
输入: 6 输出: 星期六
输入: 7 输出: 星期日
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
}
return 0;
}
运行结果:
1.1.2 习题2.使用switch语句,输入一个1~7的数字,输入1~5为工作日,6~7为休息日。
例如:
输入: 1 输出: 工作日
输入: 2 输出: 工作日
输入: 3 输出: 工作日
输入: 4 输出: 工作日
输入: 5 输出: 工作日
输入: 6 输出: 休息日
输入: 7 输出: 休息日
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int day = 0;
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;
}
运行结果:
注意:
1.利用了case后无break语句则继续往下运行来实现需求。
2.由示例可知,case语句后必须跟break是错误的,取决于逻辑需要。
1.2 switch语句中的default
若switch语句后面的表达式中值无法匹配代码中的case语句时,可以加入default。如打印工作日的练习,若day的输入不是1~7的值,需提示:输入错误。
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int day = 0;
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("输入错误,请重新输入1-7的值\n");
break;
}
return 0;
}
运行结果:
注意:
1.当所有case不匹配时,default就会起作用。
2.若删除case7中的break,输入6,则会输出:休息日和输入错误,请重新输入1-7的值。原因:无break,语句会继续向下运行。
1.3 switch语句中case和default的顺序问题
switch语句中case语句和default语句没有顺序要求,顺序满足需求就可,通常情况下把default语句放在最后处理。