C语言分支与循环(2)--switch语句
  uUWKQE7Avyk4 2023年11月02日 51 0

一.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;
}

程序运行结果如图所示:

C语言分支与循环(2)--switch语句_case

我们可以看到我们输入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; 这时候我们再来运行一下程序看看结果是什么?

C语言分支与循环(2)--switch语句_case_02

我们可以看到加上break语句后当我们输入3时,程序只会输出周三而不会继续输出周四,原因就是break语句终止了循环,会直接跳出switch语句,我们可以使用VS自带的监视窗口来看一下程序的执行流程

C语言分支与循环(2)--switch语句_switch语句_03

C语言分支与循环(2)--switch语句_C语言_04

可以看到箭头当遇到break语句的时候直接跳出了switch语句

注意:switch中的表达式一定是整型表达式,否则编译将会出错,如图所示:

C语言分支与循环(2)--switch语句_switch语句_05

同理case语句后面也只能跟整型常量表达式,如1、2、3,不能出现1.0 2.0 3.0诸如此类的非整型数据,且不能是变量只能是常量,如图所示:

C语言分支与循环(2)--switch语句_switch语句_06

当然,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语句的整型常量表达式一样的内容,则都会输出非法输入,如图所示:

C语言分支与循环(2)--switch语句_C语言_07

同样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

                                                                                                         王起舟


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
uUWKQE7Avyk4