22.switch

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语句主要用来判断变量是否等于某个固定值。
  • 变量类型必须是整数类型(如charbool),字符串和浮点数类型不支持。

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;
}

注意事项:

  1. 常量必须初始化。
  2. 常量的值不能被修改。

贯穿

当多个条件满足时,执行相同的逻辑:

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元钱去星巴克买咖啡,三种型号选择:

  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;
}

输入学生的考试成绩并输出考试等级

规则如下:

  • 成绩 >= 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

×

喜欢就点赞,疼爱就打赏