当前位置: 首页 > news >正文

【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语句,需要在什么位置上结束,就在哪里加breakbreak; 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  ->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 疑难杂症

  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 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博客

 


http://www.mrgr.cn/news/15615.html

相关文章:

  • 【机器学习】支持向量机(SVM)的对偶性、核方法以及核技巧
  • LED的使用寿命评估
  • 值得收藏!这6招教你怎么管理客户!
  • 第一批懂AI的产品经理,已经碾压同事了!
  • 智能客服的未来:构建全知全能的知识问答系统
  • YOLOv8改进 | 损失函数篇 | YOLOv8引入EfficiCLoss损失函数(有效提点)
  • 一文300字从0到1使用Postman轻松搞定文件上传测试!
  • uniapp布局
  • 代码随想录算法训练营第五十七天 | 图论part07
  • 笔记:应用Visual Studio Profiler识别和解决内存泄漏问题
  • RAG最佳实践:用 ElasticSearch 打造AI搜索系统与RAG 应用全流程详解!
  • 8月30日微语报,星期五,农历七月廿七
  • 具有平面规则性的单目视觉惯性里程计
  • 设计循环队列
  • 性能测试、负载测试、压力测试、稳定性测试简单区分
  • 华为管理工程与管理工程部
  • 给自己复盘的随想录笔记-哈希表练习题1
  • ES(Elasticsearch)可视化界面-浏览器插件
  • Android系统定制--Settings
  • 宠物勺子秤芯片解决方案CSU8RP1186