C++switch语句详解
除了⽤嵌套if语句外,C++中还提供switch语句,⼜称为“开关语句”,⽤来实现多分⽀(多选⼀)。
switch语句的功能是:根据给定条件从多个分⽀语句序列中选择⼀个作为执⾏⼊⼝。
基本格式
switch语句的基本格式如下:
switch (表达式) {
case 常量表达式1:《语句序列1》《break;》  //《》中的内容可省
……
case 常量表达式n:《语句序列n》《break;》  //同上,下同
《default:语句序列》
}
其中:
表达式——称为“条件表达式”,⽤作判断条件,取值为整型、字符型、布尔型或枚举型。
常量表达式——由常量构成,取值类型与条件表达式相同。
语句序列——可以是⼀个语句也可以是⼀组语句。
执⾏流程
switch语句的执⾏流程如下:
(1) 求条件表达式的值,并在常量表达式中到与之相等的分⽀作为执⾏⼊⼝;
(2) 顺序执⾏该分⽀的语句序列,直到遇到break语句或开关语句的关括号“}”为⽌;
(3) 当条件表达式的值与所有常量表达式的值均不相等时,若有default分⽀,则执⾏其语句序列,否则跳出switch语句,执⾏后续语句。
重要提⽰
各个分⽀(包括default)出现的次序可以任意,通常将default放在最后。
每个常量表达式的取值必须各不相同,否则将引起歧义。
允许多个常量表达式对应同⼀个语句序列。因为:每⼀个case分⽀都只作为开关语句的执⾏⼊⼝,执⾏完该分⽀后,若⽆break语句,还将接着执⾏其后的所有分⽀中的语句序列。例如:
char score;
cin>>score;
switch (score) {
case ′A′: case ′a′:                      //score='A'和score='a' 时,
cout<<″excellent″; break;    //执⾏同⼀语句序列;
case ′B′: case ′b′:                    //score='B'和score='b' 时,
cout<<″good″; break;          //执⾏同⼀语句序列;
default: cout<<″fair″;
}
由上可见:break语句可选。若⽆break语句,则会出现多个常量表达式共⽤同⼀语句序列的情况!利⽤这⼀点可以精简程序,但往往容易产⽣歧义甚⾄错误结果!因此,为保证逻辑的正确实现,通常每个case 分⽀都与break语句联⽤。
switch语句的可读性在形式上⽐嵌套if语句好,但受其条件表达式的取值类型所限,不是所有多选⼀的问题都可由开关语句完成。不过在有些情况下,可以经过处理使得条件表达式取值符合数据类型的要求,从⽽⽤开关语句实现。
应⽤举例
【例2.9】运输公司对所运货物实⾏分段计费。设运输⾥程为s,计费情况如下:设每公⾥每吨基本运费为p,货物重量为w,折扣为d,总运费f的计算公式为:f=p*w*s*(1-d)。设计程序,当输⼊p、w和s后,计算运费f。
s<250不打折扣
250<=s<5002%折扣500<=s<10005%折扣1000<=s<20008%折扣2000<=s<300010%折扣3000<=s15%折扣
#include <iostream>
using namespace std;
int main(){
int c,s;
double p,w,d,f;
cout<<"输⼊运输单价p,重量w和⾥程s:"<<endl;
cin>>p>>w>>s;
f=0;
c=s/250;
switch(c){
default:d=0.15;f+=p*w*(s-3000)*(1-d);s=3000;
case 8: case 9: case 10: case 11: d=0.1;f+=p*w*(s-2000)*(1-d);s=2000;
switch语句必须使用break吗case 4: case 5: case 6:  case 7: d=0.08;f+=p*w*(s-1000)*(1-d);s=1000;
case 2: case 3: d=0.05;f+=p*w*(s-500)*(1-d);s=500;
case 1: d=0.02;f+=p*w*(s-250)*(1-d);s=250;
case 0: d=0;f+=p*w*s*(1-d);
}
cout<<"运输单价:"<<p<<'/t'<<"重量:"<<w<<'/t'<<"⾥程:"<<s<<endl;
cout<<"折扣后运费:"<<f<<endl;
return 0;
}
【例2.10】设计⼀个计算器程序,实现加、减、乘、除运算。
#include <iostream>
using namespace std;
int main(){
float num1,num2;
char op;
cout<<"输⼊操作数1,运算符,操作数2:"<<endl;
cin>>num1>>op>>num2;
switch(op){
case '+':  cout<<num1<<op<<num2<<"="<<num1+num2<<endl; break;
case '-':  cout<<num1<<op<<num2<<"="<<num1-num2<<endl; break;
case '*':  cout<<num1<<op<<num2<<"="<<num1*num2<<endl; break;
case '/':  cout<<num1<<op<<num2<<"="<<num1/num2<<endl; break;
default :  cout<<op<<"是⽆效运算符!";
}
return 0;
}

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