C语言条件语句中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;
}

在这里插入图片描述
通过这个练习,有两点需要注意一下:

  1. 多个case控制一条相同的语句,可以省略只留下一个被控制的语句
  2. 我们应该根据实际情况,决定在代码中是否使用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语句必须放在最后面吗?

答案其实并不是这样的,在switch语句中,case语句和default语句是没有顺序要求的,只要满足实际要求就可以!

不过我们通常把default语句放在最后。

在这里插入图片描述

  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值