【C语言从不挂科到高绩点】05-流程控制语句-switch语句
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语句,需要在什么位置上结束,就在哪里加breakbreak; 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 ->6int n = score/10; // 根据分数取整,减少case的值switch(n){ // score=23 ,score/10=2case 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 integerchar 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博客