C++语⾔中关于switch的⽤法
关于switch的⽤法
在⼀些程序编写中绝对少不了判断语句。
如下⾯这个⽤if的简单的判断结构:
#include<iostream>
using namespace std;
int main(){
int a =2, b =3,sum;
sum = a + b;
if(sum=4)
{
cout <<"等于4"<< endl;
}
else if(sum=5)
{
cout <<"等于5"<< endl;
}
return0;
}
但是这种if的判断语句存在着极⼤地弊病,就是在每次判断中都要计算⼀次表达式sum是否等于4或者5,⽽且表达式 a+b 的结果为⼀个值,⽽⾮⼀个范围,所以C++就有了switch来解决这种弊病。
⽤switch改进后的语句如下⾯:
#include<iostream>
using namespace std;
int main(){
int a =2, b =3,sum;
sum = a + b;
switch(sum)
{
case4:
cout <<"等于4"<< endl;
break;
case5:
cout <<"等于5"<< endl;
break;
default:
break;
}
return0;
}
在经过switch改进后,明显简洁很多,当然在这种及其简单的例⼦中也⾏很难体现其最⼤的优点,但是在⽇后的程序编写中switch对于程序的可读性和优化等是有⼀定的帮助的,所以了解和认识switch是⼀个程序员必备的。
接下来是switch的格式:
1. switch后⾯必须有()和{};
2. 在()中是需要判断的语句和变量(例如上⾯是判断sum变量的值);
3. 在{}中是switch核⼼程序块,⽤于判断处理;
4. 在{}中就是使⽤case关键字来判断;
5. case后⾯跟的必须是常量表达式(包括字符表达式)(格式如:case 1:语句;[break;]),表达式可以是C++任何的合法语句,但是
其值只能是字符型常量或者整型常量,该常量表达式是⽤来判断()⾥⾯的表达式的值是否与该常量表达式的值相等;
6. 每个分⽀case的常量表达式的值必须与某⼀值严格相等;
7. case 常量表达式: 其冒号‘:’后⾯就是判断为True后所要执⾏的语句,⽽且最容易让新学者犯错的是,在执⾏语句后没有加
break 这样可能会导致的错误的结果,如果没有加break的话会继续执⾏下去,甚⾄会把其他case后⾯的语句也执⾏了,这个结果会在后⾯讲;
8. 所有的case 后⾯可以加上“ default:语句块;break; ” ⽽且default可以加也可以不加;
9. 注意 case 后⾯的 常量表达式的值都是不能相等的;(若判断的值范围较⼤,则显然是⽤if语句优于switch语句。)
10. 在判断过程中发现每个分⽀case的常量表达式都不符合,则如果有default语句到时候就会执⾏default语句后⾯的的语句,如果
default没有,则什么也不执⾏;
11. ⽽且,若switch的某⼀分⽀的语句不⽌⼀句,则所要求的的多条语句也不⽤写成语句块的形式,只需在最后的语句后⾯加上break;即
可表⽰在此case的执⾏语句结束;
switch的格式⽰意(其中的[]括起来的表⽰可以加也可以不加):
#include<iostream>
using namespace std;
int main(){
switch(表达式)
{
case常量表达式1:[语句块1][break;]
case常量表达式2:[语句块2][break;]
case常量表达式3:[语句块3][break;]
.
.
.
case常量表达式n:[语句块n][break;]
[default:语句块n +1;[break;]]
}
return0;
}
在这⾥讲⼀下,如果在case中的语句最后不加break可能发⽣的不好结果:
#include<iostream>
using namespace std;
int main(){
int a =1;
switch(a)
{
case1: cout <<1<< endl;
case2:  cout <<2<< endl;break;
case3: cout <<3<< endl;
}
return0;
}
switch函数用法举例在其中的⼀个分⽀ case 1:和case 2:的最后没有加break。
执⾏结果:
该结果表明:在 case 1: 的执⾏语句后⾯没加 break; 的时候,程序不会跳出switch⽽继续判断下去,使得 case 2: 后⾯的执⾏语句也会被执⾏,知道碰到 break; 才停⽌,所以只输出了 1 和 2 ,⽽没有输出 3。
在初学者刚学switch的时候有可能会有这种错误,所以在编写程序的时候⼀定要考虑break;的重要性。
如果能善于运⽤bool(布尔)类型的True(1)和Flase(0)也可以⽤来判断⼀个范围的值,⽽不是⼀个严格的值。
///*********************************************************************///
如我⽤switch语句实现学⽣成绩百分制转换成五级记分制:
#include<iostream>
using namespace std;
int main(){
int x, p;
cin >> x;
p =1*(x <60)+2*(x >=60&& x <70)+3*(x >=70&& x <80)+4*(x >=80&& x <90)+5*(x >=90);
switch(p)
{
case1:cout <<"不及格"<< endl;break;
case2:cout <<"及格"<< endl;break;
case3:cout <<"中等"<< endl;break;
case4:cout <<"良好"<< endl;break;
case5:cout <<"优秀"<< endl;break;
default:
break;
}
}
关键的语句是“p = 1 * (x < 60) + 2 * (x >= 60 && x < 70) + 3 * (x >= 70 && x < 80) + 4 * (x >= 80 && x < 90) + 5 * (x >= 90);”,这是把范围转换为⼀个严格值的关键,在()⾥⾯表达式的值满⾜bool值为true时,也就是等于1了,⽽其bool值为false是,也就是等于0了,当然上⾯范围需是没有交集的,这样才
能保证范围转换为⼀个严格的值时的准确,在准确转化完成后,其余步骤就和正常使⽤switch那样了。
(如有异议欢迎在评论中提出。)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。