C语言分支与循环(2)--switch语句
标签: C语言分支与循环(2)--switch语句 博客 51CTO博客
2023-07-19 18:24:33 140浏览
一.switch语句是一种分支语句,多用于多分支的情况
1.switch的语法
switch(整型表达式)
{
语句项:
}
一个switch语句中可以有多个语句项,而每个语句项是由case组成的,以下是case语句的语法:
case 整型常量表达式:
语句;
如以下代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
int day = 0;
scanf("%d",&day);
switch (day){
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
getchar();
getchar();
return 0;
}
程序运行结果如图所示:
我们可以看到我们输入5后,程序除了将周五打印了出来还周六周日都打印出来了,那我们需要的是只打印周五怎么办呢?这时候我们就需要用到break语句,break语句用于终止循环,如这是修改后的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
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;
}
getchar();
getchar();
return 0;
}
我们在每一个case语句后加上一个break; 这时候我们再来运行一下程序看看结果是什么?
我们可以看到加上break语句后当我们输入3时,程序只会输出周三而不会继续输出周四,原因就是break语句终止了循环,会直接跳出switch语句,我们可以使用VS自带的监视窗口来看一下程序的执行流程
可以看到箭头当遇到break语句的时候直接跳出了switch语句
注意:switch中的表达式一定是整型表达式,否则编译将会出错,如图所示:
同理case语句后面也只能跟整型常量表达式,如1、2、3,不能出现1.0 2.0 3.0诸如此类的非整型数据,且不能是变量只能是常量,如图所示:
当然,break语句也不是一定需要加上的,如以下题目
题目要求:
当day的值为1-5的时候输出上学上班
当day的值为6-7的时候输出放假休息
则代码可以写成如下形式:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void)
{
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;
}
system("pause");
return 0;
}
这样,无论输出1-5中的哪一个数字,都会输出上学上班,因为case1-5中的语句为空,既没有输出语句也没有break终止语句,所以会一直执行下去,直到遇到break终止语句,同理:case6中的语句为空,所以程序会一直执行下去,直到遇到break终止语句,这样无论输入的值是6还是7都会输出放假休息
所以得出结论:case语句后面的break不一定要加上,需看情况而定
但是如果用户进行了误输入,如输入了8,而case语句只提供了1-7的选择,这时候我们需要提示用户
所以我们引入了default语句,如以下代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void)
{
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("非法输入!\n");
break;
}
system("pause");
return 0;
}
这时候用户只要输入了不和case语句的整型常量表达式一样的内容,则都会输出非法输入,如图所示:
同样default语句也不是一定要有,需按情况而定
题目一:请问以下代码输出的值是多少
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main(void)
{
int n = 1;
int m = 2;
switch (n){
case 1: m++;
case 2: n++;
case 3:
switch (n)
{
case 1:n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
}
printf("m=%d n=%d\n",m,n);
system("pause");
return 0;
}
最终程序输出的结果为m=5 n=3,接下来我们来看一下为什么会输出这个值,首先初始化n和m这两个变量n=1 m=2,接下来使用switch语句,如果n=1则执行case1表达式中的语句,这时候m=3,但是注意case1语句并未使用break终止循环,则会导致case2语句执行,这时候n=2,同样case2语句也未使用break语句终止循环,case3语句将被执行,首先使用switch语句,若n=1则执行n++,使得n=3,若n=2则执行m++,n++使得m=4 n=2,这里很明显,n=2,所以执行case2中的语句,但是这里有break终止循环语句,当执行break终止语句时将跳出当前的switch语句,回到最外面的switch语句中,执行case4语句中的内容,m++,这时m=5 n=3,随后使用break语句跳出switch语句
最后调用printf()函数输出m和n的值
至此分支语句---switch语句讲解完成
2023/7/19
王起舟
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论