“if-else”的MAX版本“switch”——判断循环语句(三)

文章通过幽默的方式介绍了C++中的if-else和switch-case语句,特别讲解了如何使用switch-case开发一个学生分数等级系统,指导读者如何根据分数自动判断等级,并通过示例代码展示了如何处理异常情况,如分数超出范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引子


所以今天有主标题了,惊不惊喜意不意外?

你有任天堂switch游戏机吗?管你有没有,反正我又没有。而且,今天你将要学习的,并不是如何通关switch游戏机里面的游戏,而是……

所以,我们的目的还是学习c++,你以为我会告诉你吗?太天真了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈咳咳……(好像不太对劲呵?)


目录

引子

1. 可回收的小知识

1.1 你认识if和它的升级版if-else吗?

2.你如何开发一套学生分数等级系统

2.1 if-else的MAX升级版——switch

2.2 让我们开始吧

尾声


1. 可回收的小知识

没错,这些小知识是可回收……啊等等等一下,把你的手慢——慢——地从可回收垃圾桶上方移出来。它们不是可回收的垃圾,而是可回收利用的知识,所以千万不能把它们丢掉。而且,如果有人总是乱丢我的文章,那我可就要把《c++任我行》设置为只需要亿点点钱的付费专栏了!

1.1 你认识if和它的升级版if-else吗?

是的?好吧,你可以跳过这个很小的章节。

不是???那么……你以为这只是一个很小的章节吗?

你必须看的文章
文章知识点
药水是如何炼成的——判断循环语句(一)if语句
嗨害嗨,没有主标题——判断循环语句(二)if-else语句

提醒你,上面两篇文章一共6069字,加上这篇文,字数已经破万了哦

啊哈!


2.你如何开发一套学生分数等级系统


2.1 if-else的MAX升级版——switch

什么?我并不是在教学怎么玩任天堂switch游戏机!switch是一个语句,你也可以叫它switch-case语句。不过它们都是一样的。

怎么理解switch呢?其实很简单,老实说,如果用switch的视角去看,其实就是几个if的浓缩版本。像这样:

switch(n){        //需要一个变量,或者是表达式填在括号里
    case 第一个量:语句;
    case 第一个量:语句;
    ......
    case 最后的量:语句;
}

这个语句其实就相当于:

if (n == 第一个量){
    语句;
}
if (n == 第二个量){
    语句;
}
if (n == 第三个量){
    语句;
}
......
if (n == 最后的量){
    语句;
}

不过,switch的好处就是他可以把多个语句压缩成一个语句。啊,一不小心把switch的基本结构也讲掉了。

2.2 让我们开始吧

那么,现在学校要求你开发一个学生分数记录系统,并且能够自动判断分数的等级以便给学生们打等级,要知道,为了打等级,学校的老师已经疯了。所以,学校决定来摧残(绝对没有,我们可是凉心学校)寻求你的帮助。快开始吧。

输入:学生的分数

输出:分数对应的等级(100为A++,99~90为A+,89~80为A,79~70为B,69~60为C,59~0输出“无等级”)

输入:100
输出:A++
输入:90
输出:A+

提示:

关于整型变量a 的 布尔表达式 ((a / 10) == 9) 要求 a的取值范围 为 90~99 之间;

关于整型变量b 的 布尔表达式 ((b / 10) == 8) 要求 b的取值范围 为 80~89 之间;

综上,你可以用形如((a / b) == c)来判断这个数是否在取值范围内。

(嘿,你还没见过直接把解题方法告诉你的提示吧?)

啊哈,对了,我们需要一个储存分数的变量,不过,我们不需要另一个变量以储存输出结果,因为负责输出的语句就可以完成它,使用变量反而会使程序更繁琐。(好像说了句废话)

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    

然后,程序的判断部分你要选用if-else或switch,哪个更好呢?数一数,我们需要进行6个判断,用switch会更好,因为如果用if-else你将需要疯狂地使用复制粘贴if-else,太麻烦了,要学会在编程的过程中偷懒懂不懂?

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    switch (score / 10){
        case 10:cout << "A++" << endl;break;

注意,这里我们使用了break,它的作用是跳出循环和switch,记住了,如果没有他的话,你的switch会把这一行开始以后所有case里面的语句全部执行一遍,然后大手一挥,留下你和自己懵逼的表情。

(哔~)

break还有更多的作用,我们下次一定讲。真的,下次一定。

然后呢,就可以把判断部分完善了。

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    switch (score / 10){
        case 10:cout << "A++" << endl;break;
        case 9:cout << "A+" << endl;break;
        case 8:cout << "A" << endl;break;
        case 7:cout << "B" << endl;break;
        case 6:cout << "C" << endl;break;
        case 5:        //这里我们没有使用break,这样是为了当score/10小于等于5,也就是score为59~0的时候直接输出“无等级”
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:cout << "无等级" << endl;break
    }

这时候,我们就需要多考虑一些,比如说,如果老师在输入的时候多打了一个零,比如,900?事实上,尽管我们要求score在0和100中取值,但是我们不能不能在实际程序中限制它的取值,这时候我们就要多判断一些,如果分数是个负数或者超出了100,输出“分数错误,请确保分数在取值范围(0~100)内”。

正常人是这么想的:

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    switch (score / 10){
        case 10:cout << "A++" << endl;break;
        case 9:cout << "A+" << endl;break;
        case 8:cout << "A" << endl;break;
        case 7:cout << "B" << endl;break;
        case 6:cout << "C" << endl;break;
        case 5:        //这里我们没有使用break,这样是为了当score/10小于等于5,也就是score为59~0的时候直接输出“无等级”
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:cout << "无等级" << endl;break;
    }
    if (score > 100||score < 0){
        cout << "分数错误,请确保分数在取值范围(0~100)内" << endl;
    }

但是!我们不需要if的参与!

上期我们了解了if的升级版if-else,其中对于原来的if多了个else,并且它起到了判断否则的作用,同样,switch也有一个升级版,虽然升级后他还是叫做switch,但是不一样了。原来的switch结构是这样的:

switch(n){        //需要一个变量,或者是表达式填在括号里
    case 第一个量:语句;
    case 第一个量:语句;
    ......
    case 最后的量:语句;
}

升级后,就变成了这样:
 

switch(n){        //需要一个变量,或者是表达式填在括号里
    case 第一个量:语句;break;
    case 第一个量:语句;break;
    ......
    case 最后的量:语句;break;
    default 语句;break;
}

注意到最后一句default,它的作用就是当switch括号里的那个量(那个表达式的值)不符合所有的case的时候,就执行default里面的语句。提醒一下,default的中文意思是:默认。也就是说,如果你需要使用default,前面所有的case就必须使用break来断开,并且default必须是switch整个语句块中的最后一个!

这也就意味着,你不需要在switch后面在加一个if来进行判断,只需要default就行了。

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    switch (score / 10){
        case 10:cout << "A++" << endl;break;
        case 9:cout << "A+" << endl;break;
        case 8:cout << "A" << endl;break;
        case 7:cout << "B" << endl;break;
        case 6:cout << "C" << endl;break;
        case 5:        //这里我们没有使用break,这样是为了当score/10小于等于5,也就是score为59~0的时候直接输出“无等级”
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:cout << "无等级" << endl;break;
        default:cout << "分数错误,请确保分数在取值范围(0~100)内" << endl;
    }

最后,只需要加上一个完美的结……等等,你的输入呢?

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    cin >> score;        //别忘了输入!
    switch (score / 10){
        case 10:cout << "A++" << endl;break;
        case 9:cout << "A+" << endl;break;
        case 8:cout << "A" << endl;break;
        case 7:cout << "B" << endl;break;
        case 6:cout << "C" << endl;break;
        case 5:        //这里我们没有使用break,这样是为了当score/10小于等于5,也就是score为59~0的时候直接输出“无等级”
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:cout << "无等级" << endl;break;
        default:cout << "分数错误,请确保分数在取值范围(0~100)内" << endl;
    }

好了,接下来,加个完美的结尾。

#include <iostream>
using namespace std;
int main(){
    int score;        //题目自动排除出现类似99.5这样的分数,偷懒的问题不存在
    cin >> score;        //别忘了输入!
    switch (score / 10){
        case 10:cout << "A++" << endl;break;
        case 9:cout << "A+" << endl;break;
        case 8:cout << "A" << endl;break;
        case 7:cout << "B" << endl;break;
        case 6:cout << "C" << endl;break;
        case 5:        //这里我们没有使用break,这样是为了当score/10小于等于5,也就是score为59~0的时候直接输出“无等级”
        case 4:
        case 3:
        case 2:
        case 1:
        case 0:cout << "无等级" << endl;break;
        default:cout << "分数错误,请确保分数在取值范围(0~100)内" << endl;
    }
    return 0;
}

尾声


事实上,这一部分前面是有关于垃圾分类主题第三章节并且主标题是有关于垃圾分类的,由于我们在学生分数管理等级系统上花了太多的笔墨所以,删掉了。然后,读者应该,额,不会太无聊,对吧?

哎哎哎,有话好好说,君子动口不动手嘛。啊!!!

```cpp // 这段C++代码的主要目的是演示基本的控制结构和数据类型的使用,展示各种元素如何结合在一起。 #include <iostream> // 引入iostream库以便进行输入输出操作 int main() { // 定义符号常量和文字常量 const int MAX_SCORE = 100; // 符号常量,表示最大分数 std::string playerName = "John Doe"; // 文字常量,存储玩家姓名 // 表达式计算得分并输入 int score; std::cout << "请输入你的得分:" << std::endl; std::cin >> score; // if-else条件判断 if (score > 0 && score <= MAX_SCORE) { std::cout << "玩家 " << playerName << " 得分 " << score << ",非常棒!" << std::endl; } else { std::cout << "玩家 " << playerName << " 的得分无效,范围应在1到" << MAX_SCORE << "之间。" << std::endl; } // 使用switch进行选择分支 int choice; std::cout << "请选择游戏模式:\n" << "1. 单人模式\n" << "2. 对战模式\n"; std::cin >> choice; switch (choice) { case 1: std::cout << "你选择了单人模式。" << std::endl; break; case 2: std::cout << "你选择了对战模式。" << std::endl; break; default: std::cout << "无效的选择,请重新输入。" << std::endl; break; } // while循环,当满足条件时持续运行 int counter = 1; while (counter <= 5) { std::cout << "这是第" << counter << "次迭代。" << std::endl; ++counter; } std::cout << "\n迭代结束。\n"; // do-while循环,至少执行一次 int quizAnswer; do { std::cout << "请输入一道数学题的答案:"; std::cin >> quizAnswer; } while (quizAnswer != 42); // 固定答案假设为42 // for循环,用于遍历数组 int numbers[] = {1, 2, 3, 4, 5}; for (int num : numbers) { std::cout << num << " "; } std::cout << "\n数字列表结束。\n"; return 0; } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RedstoneCuberoot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值