多分支结构switch case结构

switch的具体形式

switch(整型表达式)
{
语句项//这里面是一些case语句,如下:
case 整型常量表达式:
语句;
}_


> 注:
> 
> **整形常量表达式**指的是表达式中的操作数都是整数类型的, 这里的整数类型不仅仅是int类型, 还包括char, (unsigned) short, (unsigned) long等类型. 整型常量表达式中的操作数在编译时就已经确定了他的值,
> 因此只需要关注哪些值在编译时确定就可以了. 这包括以下几种情况:
> 
>     单个字符, 比如'A', 'a'
> 
>     单个整数数字以及由整数数字构成的表达式, 如123, 123 + 345
> 
>     枚举常量
> 
>     有sizeof 运算法返回的值, 如sizeof(int)
> 
>     NULL指针值
> 
>     地址常量. 如0X12345678, 以及地址常量加上一个偏移
> 
> 
> 在C90和C++中, 静态数组定义时, 需要提供整形常量表达式. 如int A[10];因此, 你可以简单的试试用一个表达式去定义一个数组,
> 如果数组可以正常定义, 这表明这是一个整形表达式.
> 
> 
> 另外, 在C中, const关键字并不是代表其所修饰的变量是常量. 他仅仅代表const 修饰的变量是read-only的,
> 无法对他进行修改. 这点与C++不同, C++中const关键字可以定义一个整形常量, 因此
> 
>     const int size = 10;
> 
>     int array[size]; /* C语言中, 编译不通过, C++中可以通过 */


下面的代码就是一个典型的switch结构的应用场景

```c
int main()
{
	int day = 0;
	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");
	}
}

它的执行过程是switch函数会去看day的值,day的值是几就会直接跳到case几去执行,前面的语句会直接跳过,但是后面的语句会继续执行,比如day等于3时,那么case34567都会执行。

break语句用于输出

这显然不是我们需要的效果。case只管进,决定入口。而出口需要的是break
所以出需要用到break

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;

	}
}

这样我们就能保证在day==3时,程序及时跳出。
此外当我们要表述输入12345都输出工作日,输入67都输出休息日时,就有了以下的程序表达。

defualt子句处理错误输入的情况

此外,如果输入day==8,我们必须要能够提示输入错误,此时就需要用到default

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");
	default://如果所有的case都不执行,则执行default
		printf("输入错误\n");
		break;
		return 0;
	}
}

注:
如果表达的值与所有的Case标签的值都不匹配怎么办?其实也没什么,结果就是所有的语句都被跳过而已.程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误.但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把 default: 写在任何一个case标签可以出现的位置。

当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样样执行default子句。

switch语句也可以用在嵌套上

下面是一个经典的计算题
在这里插入图片描述

注:break只会跳出当前的switch,即当前最内层的switch.
本题的结果是 5 3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值