引子
所以今天有主标题了,惊不惊喜意不意外?
你有任天堂switch游戏机吗?管你有没有,反正我又没有。而且,今天你将要学习的,并不是如何通关switch游戏机里面的游戏,而是……
所以,我们的目的还是学习c++,你以为我会告诉你吗?太天真了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈咳咳……(好像不太对劲呵?)
目录
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;
}
尾声
事实上,这一部分前面是有关于垃圾分类主题第三章节并且主标题是有关于垃圾分类的,由于我们在学生分数管理等级系统上花了太多的笔墨所以,删掉了。然后,读者应该,额,不会太无聊,对吧?
哎哎哎,有话好好说,君子动口不动手嘛。啊!!!