3.3 switch语句

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语句放在最后处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值