Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程
本套课程将会从0基础讲解C语言核心技术,适合人群:
- 大学中开设了C语言课程的同学
- 想要专升本或者考研的同学
- 想要考计算机等级证书的同学
- 想要从事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;
}
需要注意的问题:
- 一旦匹配到了 case 值,会从当前的 case 对应代码块开始,一直往下执行,直到遇到了 break;
- break 表示提前结束 switch 语句。需要在什么位置上结束,就在哪里加break
- 当所有的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 疑难杂症
- 在 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;
}
如果在第一行定义变量会出现如下错误
- 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博客