文章目录
🍁 引言
🍁1.语句格式:
🍁2.语句执行过程
🍁3.语句格式举例
🍁例题
👉【例1】
🚀示例代码
👉【例2】
🚀【分析】
🚀示例代码
👉【例3】
🚀【分析】
🚀示例代码
🍁总结
🍁备注
🚀欢迎互三👉:程序猿方梓燚 💎💎
🚀所属专栏:C++教程💎🚀关注博主,后期持续更新系列文章
🚀如果有错误感谢请大家批评指出,及时修改
🚀感谢大家点赞👍收藏⭐评论✍
🍁 引言
应用条件语句可以很方便地使程序实现分支,但是出现 分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程 序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++ 提供了一种switch开关语句。
🍁1.语句格式:
switch(表达式){case 常量表达式1:语句序列1;break;case 常量表达式2:语句序列2;break;…… case 常量表达式n:语句序列n;break;default:语句序列n+1;}
该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分;多个case标号也允许使用在同一个语句序列的前面;每个语句标号有保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。
🍁2.语句执行过程
switch语句执行过程分为以下3步描述。
(1)计算出switch后面圆括号内表达式的值,假定为M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值。
(2)依次计算出每个case后常量表达式的值,假定它们为M1、M2、…,同样若它们的值不是整型,则自动转换为整型。
(3)让M依次同M1、M2、…进行比较,一旦遇到M与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。
!!!在实际使用switch语句时,通常要求当执行完某个case后的一组语句序列后,就结束整个语句的执行,而不让它继续执行下一个case语句后面的语句序列,为此,可通过使用break语句来实现。该语句只有保留字break,而没有其它任何成分。它是一条跳转语句,在
switch中执行到它时,将结束该switch语句,系统接着向下执行其它语句。
在使用switch语句时,还应注意以下几点:
- case语句后的各常量表达式的值不能相同,否则会出现错误码。
- 每个case或default后,可以包含多条语句,不需要使用“{”和“}”括起来。
- 各case和default子句的先后顺序可以变动,这不会影响程序执行结果。
- default子句可以省略,default后面的语句末尾可以不必写break。
程序设计风格提示:写switch语句时,switch(表达式)单独一行,各case分支和default分支要缩进两格并对齐,分支处理语句要相对再缩进两格,以体现不同层次的结构。
🍁3.语句格式举例
(1)上下两个的书写格式是等价的
switch(a) {case 1:x++;break;case 2:y++;break;case 3:z++;break;default:cout<<"error";}
switch(a){ case 1:x++;break;case 2:y++;break;case 3:z++;break;default:cout<<"error";}
(2)
switch (ch) {case 'a':case 'A':d1 = (x + y) / 2;d2 = x * y - 2;break;case 'b':case 'B':d1 = (a + b) / 2;d2 = a * b - 2;break;default:cout << "input error!";}
说明:
- 每个case后面的语句可以写在冒号后的同一行或换到新行写。
- <语句序列1>…<语句序列n+1>都是一组语句,有时可为空,如(2)
🍁例题
👉【例1】
根据从键盘上输入的表示星期几的数字,对应输出它的英文名称。
🚀示例代码
#include<iostream> using namespace std; int main() {int weekday;cin >> weekday;switch (weekday) {case 1:cout << "Monday" << endl;break;case 2:cout << "Tuesday" << endl;break;case 3:cout << "Wednesday" << endl;break;case 4:cout << "Thursday" << endl;break;case 5:cout << "Friday" << endl;break;case 6:cout << "Saturday" << endl;break;case 7:cout << "Sunday" << endl;break;default:cout << "input error!";}return 0; }
👉【例2】
一个最简单的计算器支持+,-,*,/四种运算。输入只有一行:两个参加运算的数和一个操作符(+,-,*,/)。输出运算表达式的结果。
考虑下面两种情况:
- 如果出现除数为0的情况,则输出:Divided by zero!
- 如果出现无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!
输入样例: 34 + 56
输出样例: 90
🚀【分析】
设num1、num2存放两个参加运算的操作数,op存放操作符。
当op为“+”号时,实现加法操作。
- 当op为“-”号时,实现减法操作。
- 当op为“*”号时,实现乘法操作。
- 当op为“/”号时,判断b值,如果不为0,则实现除法操作,如果为0,则输出:Divided by zero!。
- 当op不是上面四种操作符时,输出:“Invalid operator!”。
🚀示例代码
#include <bits/stdc++.h> using namespace std; int main() {double num1, num2;char op;cin >> num1 >> op >> num2;switch (op) {case'+':cout << num1 + num2 << endl;break;case'-':cout << num1 - num2 << endl;break;case'*':cout << num1*num2 << endl;break;case '/':if (num2 != 0) {cout << num1 / num2 << endl;break;} else {cout << "Divided by zero!" << endl;break;}default:cout << "Invalid operrator!" << endl;}return 0; }
👉【例3】
期末来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学。已知商店里有三种钢笔,它们的单价为6元、5元和4元。小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱。请您编一程序,帮小Q制订出一种买笔的方案.
🚀【分析】
对于以上的实际问题,要买尽量多的笔,易知都买4元的笔肯定可以买最多支笔。因此最多可买的笔为x / 4支。由于小q要把钱用完,故我们可以按以下方法将钱用完:
- 若买完x / 4支4元钱的笔,还剩1元,则4元钱的笔少买1支,换成一支5元笔即可;若买完x / 4支4元钱的笔,还剩2元,则4元钱的笔少买1支,换成一支6元笔即可;若买完x / 4支4元钱的笔,还剩3元,则4元钱的笔少买2支,换成一支5元笔和一支6元笔即可。
- 从以上对买笔方案的调整,可以看出笔的数目都是x / 4,因此该方案的确为最优方案。
🚀示例代码
#include<iostream> using namespace std; int main() {int a, b, c, x, y;//a,b,c分别表示在买笔方案中,6元、5元和4元钱笔的数目//x,y分别表示剩余班费和买完最多的4元笔后剩的钱cin >> x; //输入xc = x / 4; //4元笔最多买的数目y = x % 4; //求买完c支4元笔后剩余的钱数yswitch (y) { //判断购买方案case 0:a = 0;b = 0;break;case 1:a = 0;b = 1;c--;break;case 2:a = 1;b = 0;c--;break;case 3:a = 1;b = 1;c -= 2;break;}cout << a << ' ' << b << ' ' << c << endl; //三个数间以空格隔开return 0; }
🍁总结
有不懂的地方可以si我,和我一起学习C++吧。
🍁备注
还没有下载DEV-C++的小伙伴们可以私我拿到免费安装包