【C语言从不挂科到高绩点】05-流程控制语句-switch语句

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程

本套课程将会从0基础讲解C语言核心技术,适合人群:

  1. 大学中开设了C语言课程的同学
  2. 想要专升本或者考研的同学
  3. 想要考计算机等级证书的同学
  4. 想要从事C/C++/嵌入式开发的同学

----------------------------------------------------------------------

分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧

承接毕设指导,技术答疑,学习路上想要找私人教练的同学可以私信我

更多学习资料,公众号:墨轩学习网,B站:墨轩大楼

5.2 选择结构-switch

5.2.1 switch 格式

switch(值){
    case 值1:代码块1;
    case 值2:代码块2;
    case 值3:代码块3;
        ......
   default:默认代码块;
}

表示:根据 switch 括号中的值去匹配 case 中的值,一旦匹配上了就会从当前的 case 对应的代码块开始一直往下执行,直到遇到了 break 或者 switch 语句结束为止。

如果所有的 case 值都匹配不上,那么此时就会执行 default 中的默认代码块。

/**
根据 switch 括号中的值去匹配 case 中的值,
一旦匹配上了就会从当前的 case 对应的代码块开始一直往下执行,
直到遇到了 break 或者 switch 语句结束为止。
如果所有的 case 值都匹配不上,
那么此时就会执行 default 中的默认代码块。

**/

#include <stdio.h>

int main(){

	int n = 10;

	switch(n){
		case 1:
			printf("1\n");
		case 2:
			printf("2\n");
		case 3:
			printf("3\n");

		case 4:
			printf("4\n");
			// break提前结束switch语句,需要在什么位置上结束,就在哪里加break
			break; 
		default: // 当所有的case都匹配不上时,会执行default中的代码
		
			printf("5\n");

	}

	return 0;
}

需要注意的问题:

  1. 一旦匹配到了 case 值,会从当前的 case 对应代码块开始,一直往下执行,直到遇到了 break;
  2. break 表示提前结束 switch 语句。需要在什么位置上结束,就在哪里加break
  3. 当所有的case都匹配不上时,会执行default中的代码

【练习案例】:王者荣耀等级判断器

输入王者荣耀积分:

积分小于 50 是青铜

积分 50-60 是白银

积分 60-70 是黄金

积分 70-80 是铂金

积分 80-90 是钻石

积分 90-100 是星耀

积分 100 以上王者

【参考代码】

/**
输入王者荣耀积分:
积分小于 50 是青铜
积分 50-60 是白银
积分 60-70 是黄金
积分 70-80 是铂金
积分 80-90 是钻石
积分 90-100 是星耀
积分 100 以上王者
**/

#include <stdio.h>

int main(){
	printf("请输入王者积分:");
	int score = 0;
	scanf("%d",&score);

	// 用分数对10取整
	// score:0-9   -> 0
	// score:10-19  -> 1
	// .......
	// score: 51-59 -> 5
	//  60-69  ->6
	int n = score/10; // 根据分数取整,减少case的值

	switch(n){  // score=23  ,score/10=2
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
			printf("青铜\n");
			break;
		case 5:
			printf("白银\n");
			break;
		case 6:
			printf("黄金\n");
			break;
		case 7:
			printf("铂金\n");
			break;
		case 8:
			printf("钻石\n");
			break;
		case 9:
			printf("星耀\n");
			break;
		default:
			printf("王者\n");
			break;
	}


	return 0;
}

【练习案例】将某年某月有多少天的月份判断修改成 switch 格式

/**
	使用switch实现判断某年某月一共有多少天
**/

#include <stdio.h>


int main(){

	// 1.输入年份和月份
	int year=0,month=0;
	printf("请输入年份和月份:\n");
	scanf("%d %d",&year,&month);

	switch(month){
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			printf("%d年%d月一共有31天\n");
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			printf("%d年%d月一共有30天\n");
			break;
		case 2:
			// case语句中是可以嵌套其他语句,比如if语句
			if(year%4==0&&year%100!=0||year%400==0){
				printf("%d年%d月一共有29天\n");
			}else{
				printf("%d年%d月一共有29天\n");
			}
			break;
	}

	return 0;
}

5.2.2 switch 的范围表示法

如果需要再 case 中表示范围可以使用 case m ... n, 表示范围就是 [m,n]

修改上面王者荣耀段位匹配的功能代码

/**
	王者荣耀段位匹配器
**/

#include <stdio.h>

int main(){
	printf("请输入王者积分:");
	int score = 0;
	scanf("%d",&score);

	switch(score){
		case 0 ... 49:  //score范围在[0,49]
		    printf("青铜\n");
		    break;
		case 50 ... 59:  // [50,59]
			printf("白银\n");
		    break;
		case 60 ... 69:
			printf("黄金\n");
		    break;
		case 70 ... 79:
			printf("铂金\n");
		    break;
		case 80 ... 89:
			printf("钻石\n");
		    break;
		case 90 ... 99:
			printf("星耀\n");
		    break;
		case 100 ... 150:
			printf("王者\n");
		    break;
		default:
		   printf("段位未匹配成功\n");
	}


	return 0;
}

5.2.3 疑难杂症

  1. 在 case 中,第一行代码中不能定义变量,只能放表达式。
/**
	switch的疑难杂症
**/

#include <stdio.h>


int main(){


	int n = 3;
	switch(n){

		case 1:
			n++; // 可以放表达式
			//int m = 0; // case中的第一行不能定义变量
			//const int m = 0; // 常量也不行
			printf(" ");
			int m = 0;  // 可以在非第一行定义变量
			break;
		case 3:
			printf("2\n");
			break;
		default:
		    printf("3\n");
	}

	return 0;
}

如果在第一行定义变量会出现如下错误

  1. switch 括号中的值,需要一个准确的值,只能放:整数类型、字符类型、枚举(后面讲)
/**
	switch的疑难杂症
**/

#include <stdio.h>


int main(){


	// long n = 3;
	//float n = 3; //报错:error: switch quantity not an integer

	char n = '1';
	switch(n){

		case '1':
			n++; // 可以放表达式
			//int m = 0; // case中的第一行不能定义变量
			//const int m = 0; // 常量也不行
			printf(" ");
			//int m = 0;
			break;
		case '3':
			printf("2\n");
			break;
		default:
		    printf("3\n");
	}

	return 0;
}

如果 switch 中放了不合法的数据,就报如下的错误:

前文传送:

【C语言从不挂科到高绩点】01-C语言概述-CSDN博客

【C语言从不挂科到高绩点】02-变量、数据类型、标识符、关键字-CSDN博客

【C语言从不挂科到高绩点】03-C语言运算符

【C语言从不挂科到高绩点】04-流程控制语句-if-CSDN博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听潮阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值