22.条件分支语句-switch
22.1 知识点
switch语句的作用
让顺序执行的代码产生分支。
switch语句基本语法
switch (变量)
{
case 常量:
满足条件会执行的代码逻辑;
break;
case 常量:
满足条件会执行的代码逻辑;
break;
default:
如果上面的case条件都不满足就会执行default之间的代码;
break;
}
示例代码:
int a = 3;
int a2 = 2;
switch (a)
{
case 1:
cout << "a等于1" << endl;
break;
case 2:
cout << "a等于2" << endl;
break;
case 3:
cout << "a等于3" << endl;
break;
default:
cout << "如果条件都不满足,才会执行这里" << endl;
break;
}
支持的变量类型示例:
string str = "123";
float f = 1.4f;
bool b = true;
char c = 'A';
switch (c)
{
case 'A':
break;
default:
break;
}
注意事项:
- 常量只能写一个值,不能是范围或表达式(如关系运算符或算术运算符)。
switch
语句主要用来判断变量是否等于某个固定值。- 变量类型必须是整数类型(如
char
、bool
),字符串和浮点数类型不支持。
default可省略
default
语句是可选的。示例代码:
char c = 'A';
switch (c)
{
case 'A':
cout << "A" << endl;
break;
case 'B':
cout << "B" << endl;
break;
}
cout << "之后的逻辑" << endl;
自定义常量
使用const
关键字定义常量:
const char c2 = 'A';
char c = 'A';
switch (c)
{
case c2:
cout << "A" << endl;
break;
case 'B':
cout << "B" << endl;
break;
}
注意事项:
- 常量必须初始化。
- 常量的值不能被修改。
贯穿
当多个条件满足时,执行相同的逻辑:
int aa = 1;
switch (aa)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
cout << "是一个数字" << endl;
if (aa == 1)
{
// 处理逻辑
}
else if (aa == 2)
{
// 处理逻辑
}
else
{
// 处理逻辑
}
break;
default:
break;
}
case的作用域问题
C++中switch
语句的每个case
没有独立的作用域。如果直接在case
中声明临时变量,编译器会报错。为了解决这个问题,可以为case
添加语句块{}
以明确作用域。
示例代码:
int aa2 = 1;
int jj = 20;
switch (aa2)
{
case 1:
{
int j = 2;
j += 1;
cout << j << endl;
cout << jj << endl;
break;
}
case 2:
cout << "2的逻辑" << endl;
cout << jj << endl;
break;
default:
break;
}
总结:
- 如果希望在某个
case
中声明一个只在该case
中使用的变量,需要为该case
加上语句块{}
。
22.2 知识点代码
Lesson22_条件分支语句_switch.cpp
#include <iostream>
using namespace std;
int main()
{
std::cout << "switch语句\n";
#pragma region 知识点一 switch语句的作用
//让顺序执行的代码 产生分支
#pragma endregion
#pragma region 知识点二 switch语句基本语法
//switch (变量)
//{
// // 变量 == 常量 执行case 和 break 之间的代码
// case 常量:
// 满足条件会执行的代码逻辑;
// break;
// case 常量:
// 满足条件会执行的代码逻辑;
// break;
// case 常量:
// 满足条件会执行的代码逻辑;
// break;
// //中间可以有n个case语句块
// default:
// //如果上面的case条件都不满足 就会执行 default之间的代码
// break;
//}
int a = 3;
int a2 = 2;
switch (a)
{
//这个条件一定是一个常量
case 1:
cout << "a等于1" << endl;
break;
case 2:
cout << "a等于2" << endl;
break;
case 3:
cout << "a等于3" << endl;
break;
default:
cout << "如果条件都不满足,才会执行这里";
cout << "如果条件都不满足,才会执行这里";
cout << "如果条件都不满足,才会执行这里";
cout << "如果条件都不满足,才会执行这里";
break;
}
string str = "123";
float f = 1.4f;
bool b = true;
char c = 'A';
switch (c)
{
case 'A':
break;
default:
break;
}
//注意:
//常量!!!!只能写一个值 不能去写一个范围 也不能去写表达式(关系运算符 算数运算符。。。)
//switch语句 主要是用来判断变量是否等于 某一个固定值的
//变量类型必须是整数类型的(char、bool) 字符串、浮点数 是不支持的!!
#pragma endregion
#pragma region 知识点三 default可省略
c = 'A';
switch (c)
{
case 'A':
cout << "A" << endl;
break;
case 'B':
cout << "B" << endl;
break;
}
cout << "之后的逻辑" << endl;
#pragma endregion
#pragma region 知识点四 自定义常量
c = 'A';
//1.必须初始化
//2.不能被修改
const char c2 = 'A';
switch (c)
{
case c2:
cout << "A" << endl;
break;
case 'B':
cout << "B" << endl;
break;
}
#pragma endregion
#pragma region 知识点五 贯穿
//作用:满足某些条件时 做的事情是一样的 就可以使用贯穿
int aa = 1;
switch (aa)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
cout << "是一个数字" << endl;
if (aa == 1)
{
}
else if (aa == 2)
{
}
else
{
}
break;
default:
break;
}
#pragma endregion
#pragma region 知识点六 case的作用域问题
//C++中的switch语句中每个case是没有独立的作用域的
//如果我们直接在case中声明临时变量,编译器会报错
//因为它不知道你在后面的case中是否使用(因为可能存在贯穿的存在,编译器会默认认为你会在其他case中使用)
//为了避免这种报错,我们可以为case添加语句块的形式为它确定作用域
//总的来说:
//如果明确想要在某一个case中声明一个只在该case中使用的变量
//那么需要为该case加上语句块{}
int aa2 = 1;
int jj = 20;
switch (aa2)
{
case 1:
{
int j = 2;
j += 1;
cout << j << endl;
cout << jj << endl;
break;
}
case 2:
cout << "2的逻辑" << endl;
cout << jj << endl;
break;
default:
break;
}
#pragma endregion
}
22.3 练习题
韬老狮的工资是由基本工资+绩效决定的
绩效说明:
- 学生评价 很兴奋,评定为A级,绩效工资500。
- 学生评价 很充实,评定为B级,不加绩效工资。
- 学生评价 还好吧,评定为C级,绩效工资扣300。
- 学生评价 难理解,评定为D级,绩效工资扣500。
- 学生评价 枯燥泛味,评定为E级,绩效工资扣800。
假设韬老狮的工资是 4000,请用户输入韬老狮的评级,并算出韬老狮的工资是多少。
int money = 4000;
cout << "请对韬老狮进行评级" << endl;
char c;
cin >> c;
switch (c)
{
case 'a':
case 'A':
money += 500;
break;
case 'b':
case 'B':
break;
case 'c':
case 'C':
money -= 300;
break;
case 'd':
case 'D':
money -= 500;
break;
case 'e':
case 'E':
money -= 800;
break;
default:
cout << "请输入正确的评级" << endl;
break;
}
cout << "你对韬老狮的评价是" << c << ", 他最终的薪资是" << money << "元" << endl;
小韬带了10元钱去星巴克买咖啡,三种型号选择:
- 中杯,¥5。
- 大杯,¥7。
- 超大杯,¥11。
请用户输入选择的型号,如果钱够,则购买成功,并算出小韬最后还剩多少钱。如果钱不够,则提示用户“钱不够,请换其他型号”。
int money = 10;
cout << "请输入你购买的型号(1是中杯,2是大杯,3是超大杯)" << endl;
int i;
cin >> i;
switch (i)
{
case 1:
money -= 5;
cout << "购买成功,还剩" + to_string(money) + "元" << endl;
break;
case 2:
money -= 7;
cout << "购买成功,还剩" + to_string(money) + "元" << endl;
break;
case 3:
cout << "钱不够,请换其他型号" << endl;
break;
default:
cout << "请输入正确的内容" << endl;
break;
}
输入学生的考试成绩并输出考试等级
规则如下:
- 成绩 >= 90:A。
- 90 > 成绩 >= 80:B。
- 80 > 成绩 >= 70:C。
- 70 > 成绩 >= 60:D。
- 成绩 < 60:E。
try
{
cout << "请输入学生成绩" << endl;
string str;
cin >> str;
int cj = stoi(str);
// 判断成绩是否在有效范围内
if (cj < 0 || cj > 100)
cout << "我们的成绩是百分制,请输入一百分内的数" << endl;
else
{
cj /= 10; // 获取分数的十位数
switch (cj)
{
case 10:
case 9:
cout << "你的成绩是A" << endl;
break;
case 8:
cout << "你的成绩是B" << endl;
break;
case 7:
cout << "你的成绩是C" << endl;
break;
case 6:
cout << "你的成绩是D" << endl;
break;
default:
cout << "你的成绩是E" << endl;
break;
}
}
}
catch (const std::exception&)
{
cout << "请输入数字" << endl;
}
输入一个(0~9)的数字并显示为汉字
如输入2,则显示“二”。
cout << "请输入一个(0~9)的数" << endl;
int num;
cin >> num;
switch (num)
{
case 0:
cout << "零" << endl;
break;
case 1:
cout << "一" << endl;
break;
case 2:
cout << "二" << endl;
break;
case 3:
cout << "三" << endl;
break;
case 4:
cout << "四" << endl;
break;
case 5:
cout << "五" << endl;
break;
case 6:
cout << "六" << endl;
break;
case 7:
cout << "七" << endl;
break;
case 8:
cout << "八" << endl;
break;
case 9:
cout << "九" << endl;
break;
default:
cout << "请输入0~9之间的数" << endl;
break;
}
22.4 练习题代码
Lesson22_练习题.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
std::cout << "switch语句\n";
#pragma region 练习题一
/*韬老狮的工资是由基本工资 + 绩效决定的
绩效说明:
学生评价 很兴奋,则评定为A级,绩效工资500
学生评价 很充实,则评定为B级,不加绩效工资
学生评价 还好吧,则评定为C级,绩效工资扣300
学生评价 难理解,则评定为D级,绩效工资扣500
学生评价 枯燥泛味,则评定为E级,绩效工资扣800
假设韬老狮的工资是4000
请用户输入韬老师的评级,并算出韬老师的工资是多少?*/
int money = 4000;
cout << "请对韬老狮进行评级" << endl;
char c;
cin >> c;
switch (c)
{
case 'a':
case 'A':
money += 500;
break;
case 'b':
case 'B':
break;
case 'c':
case 'C':
money -= 300;
break;
case 'd':
case 'D':
money -= 500;
break;
case 'e':
case 'E':
money -= 800;
break;
default:
cout << "请输入正确的评级" << endl;
break;
}
cout << "你对韬老狮的评价是" << c << ",他最终的薪资是" << money << endl;
#pragma endregion
#pragma region 练习题二
/*小韬带了10元钱去星巴克买咖啡,三种型号选择:
1 = (中杯,¥5)
2 = (大杯,¥7)
3 = (超大杯,¥11)
请用户输入选择的型号,如果钱够,则购买成功,并算出小王最后还剩多少钱?
如果钱不够,则提示用户“钱不够,请换其他型号”*/
//int money = 10;
//cout << "请输入你购买的型号(1是中杯,2是大杯,3是超大杯)" << endl;
//int i;
//cin >> i;
//switch (i)
//{
// case 1:
// money -= 5;
// cout << "购买成功,还剩" + to_string(money) + "元" << endl;
// break;
// case 2:
// money -= 7;
// cout << "购买成功,还剩" + to_string(money) + "元" << endl;
// break;
// case 3:
// cout << "钱不够,请换其他型号" << endl;
// break;
// default:
// cout << "请输入正确的内容" << endl;
// break;
//}
#pragma endregion
#pragma region 练习题三
/*输入学生的考试成绩,如果
成绩 >= 90:A
90 > 成绩 >= 80:B
80 > 成绩 >= 70:C
70 > 成绩 >= 60:D
成绩 < 60 : E
(使用switch语法完成)
最后输出学生的考试等级*/
//判断等级 是根据 分数的十位数去判断的
//A - 9,10
//B - 8
//C - 7
//D - 6
//E - 012345
try
{
cout << "请输入学生成绩" << endl;
string str;
cin >> str;
int cj = stoi(str);
//得到他的十位数
// cj = cj / 10;
//先判断总分
if (cj < 0 || cj > 100)
cout << "我们的成绩是百分制,请输入一百分内的数" << endl;
else
{
//再取十位
cj /= 10;
switch (cj)
{
case 10:
case 9:
cout << "你的成绩是A" << endl;
break;
case 8:
cout << "你的成绩是B" << endl;
break;
case 7:
cout << "你的成绩是C" << endl;
break;
case 6:
cout << "你的成绩是D" << endl;
break;
default:
cout << "你的成绩是E" << endl;
break;
}
}
}
catch (const std::exception&)
{
cout << "请输入数字" << endl;
}
#pragma endregion
#pragma region 练习题四
//在控制台输入一个(0~9)的数并显示为大写。如输入2,则显示二
cout << "请输入一个(0~9)的数" << endl;
int num;
cin >> num;
switch (num)
{
case 0:
cout << "零" << endl;
break;
case 1:
cout << "一" << endl;
break;
case 2:
cout << "二" << endl;
break;
case 3:
cout << "三" << endl;
break;
case 4:
cout << "四" << endl;
break;
case 5:
cout << "五" << endl;
break;
case 6:
cout << "六" << endl;
break;
case 7:
cout << "七" << endl;
break;
case 8:
cout << "八" << endl;
break;
case 9:
cout << "久" << endl;
break;
default:
cout << "请输入0~9之间的数" << endl;
break;
}
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com