C语言-switch语句基本语法

C语言是一门结构化的程序设计语言
支持三种结构:

  • 顺序结构:正常的从头写到尾
  • 选择结构:if语句;switch语句
  • 循环结构:while循环;for循环;do-while循环

switch语句

除了if语句外,C语言还提供了switch语句来实现分支结构。

switch语句是一种特殊形式的if…else…结构,用于判断条件有多个结果的情况。它把多重的else…if…改成更易用,可读性更好的形式。

switch (expression)
{
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。
比如:表达式expression的结果如果是value1,就执行value1这个分支;表达式expression的结果如果是value2,就执行value2这个分支;
如果找不到对应的值(既不是value1,也不是value2),就执⾏ default 分⽀。

• switch 后的 expression 必须是整型表达式 • case 后的值,必须是整形常量表达式
字符可以出现在“switch”,“case”里面去,因为字符存储的时候存的是ASCII码值(整数)


switch语句中的break

练习:输入任意一个整数值,计算除3之后的余数。
if语句写法
在这里插入图片描述
尝试用switch语句写法:
在这里插入图片描述
键盘给num输入的值为4,4%3余数是1,从case 1这条分支进去,打印“余数是1”。可是把case 2,“余数为2”的情况也打印了,这是为什么呢?
因为num%3的结果是几,就从case 几进去,但是从哪个地方跳出去呢?如果语句的后面没有东西使程序跳出这条语句,程序就会执行下面的语句
例如
在这里插入图片描述
此时num%3余0,就从case 0这条分支进去,但是把以下余数为“1”,为“2”的情况全打印了
所以:case只是决定了入口,决定不了从哪出去。所以如果想跳出,得在语句后面加break.
在这里插入图片描述
此时程序就得到了我们想要的结果了。
练习:输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天

int main()
{
	int num = 0;
	scanf("%d",&num);
	switch (num)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三");
		break;
	case 4:
		printf("星期四");
		break;
	case 5:
		printf("星期五");
		break;
	case 6:
		printf("星期六");
		break;
	case 7:
		printf("星期天");
		break;
	}
	return 0;
}

switch语句中的default

依据上面的代码,当输入8的时候,程序就出问题了,什么也不打印:
在这里插入图片描述
当所有case都不能被匹配的时候,则需要加一条default,使代码完整。
在这里插入图片描述
如果需求发⽣变化,变为:

  1. 输⼊1-5,输出的是“⼯作⽇”;
  2. 输⼊6-7,输出“休息⽇”
int main()
{
	int num = 0;
	scanf("%d",&num);
	switch (num)
	{
	case 1:
		printf("工作日\n");
		break;
	case 2:
		printf("工作日\n");
		break;
	case 3:
		printf("工作日");
		break;
	case 4:
		printf("工作日");
		break;
	case 5:
		printf("工作日");
		break;
	case 6:
		printf("休息日");
		break;
	case 7:
		printf("休息日");
		break;
	default:
		printf("输入错误,请输入1~7的数字\n");
		break;
	}
	return 0;
}

以上代码虽然可以完成题目要求,但是有更简便的写法:

int main()
{
	int num = 0;
	scanf("%d",&num);
	switch (num)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日");
		break;
	default:
		printf("输入错误,请输入1~7的数字\n");
		break;
	}
	return 0;
}

switch语句中的case和default的顺序问题

在 switch 语句中 case 子句和 default 子句有要求顺序吗? default 只能放在最后吗?

其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。

例如
在这里插入图片描述
我们把default放在最前面,键盘输入8时依旧会照常处理,只不过我们通常是把 default 子句放在最后处理的。
但是我们不能把default影响逻辑随意放置,例如将它放在中间,这样语法上虽然是正确的但是结果是错误的。在这里插入图片描述

我们不要求default的位置,但是代码的结果要是对的

补充:switch语句也可以嵌套,switch里面也可以有switch,但是break只能跳出本层的switch不能跳出外层的switch。

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值