七、switch语句的简单应用
switch分支语法
switch分支结构用于在多种可能的情况下选择一种情况进行处理。以下是switch分支结构的基本语法
switch(变量表达式){
case 常量1 : 语句; break;
case 常量2 : 语句; break;
case 常量3 : 语句; break;
···
case 常量n : 语句; break;
default: 语句; break;
}
这是另一种排版习惯:
switch(变量表达式){
case 常量1:
语句;
break;
case 常量2:
语句;
break;
case 常量3:
语句;
break;
···
case 常量n:
语句;
break;
default:
语句;
break;
}
当变量表达式所表达的量与其中一个 case 分支中的常量相符时,就执行此 case 分支后面的语句,并依次下去执行后面所有 case 分支中的语句,除非遇到 break 语句跳出 switch 为止。如果变量表达式的量与所有 case 分支的常量都不相符,就执行 default 分支中的语句。
#include <iostream>
using namespace std;
int main(){
double num1,num2,result;
char op;
cout<<"请输入表达式(例如1+1=2):"<<endl;
cin>>num1>>op>>num2;
switch(op){
case '+' : result=num1+num2; break;
case '-' : result=num1-num2; break;
case '*' : result=num1*num2; break;
case '/' :
if(num==0){
cout<<"除数不能为0"<<endl;
ruturn 1;
}
result=num1/num2
break;
default:
cout<<"操作符输入有误";
return 1;
}
cout<<"结果是:"<<result<<endl
return 0;
}
该示例中,程序根据用户输入的表达式,通过switch分支结构来进行简单的数学运算。在每个case分支中,程序都执行某种运算操作,并通过break语句结束该分支。如果用户输入的操作符不是+、-、*、/中的任意一个,则执行default分支,输出「操作符输入有误」。
从上面的例子可以看出,switch分支结构可以用于处理多个可能的情况,其逻辑结构比多个if-else语句更加清晰简洁。但是,需要注意的是,switch分支结构中需要进行比较的值必须是整型、字符(非字符串)或枚举类型,不能是浮点型或其他类型的数据。
何时使用break?
在 swtich 分支结构中,并不是每一个 case 语句都必须使用 break,因为有些时候,当 switch 判断的表达式在匹配多个值的时候,执行的是相同的功能,我们仅需写一份执行代码来对应多个 case,然后再用 break 跳出即可。但也要特别留意,漏写 break 可能会导致严重逻辑错误。
§1 根据输入的数字判断其正负性
int num=-3
switch(num){
case 0:
cout<<"Number is zero.";
case 1:
case 2:
case 3:
case 4:
case 5:
cout<<"Number is positive.";
case -1:
case -2:
case -3:
case -4:
case -5:
cout<<"Number is negative.";
}
如果输入数字为 -3,那么该程序的输出结果将为:
Number is negative.
这里看起来没有问题,但实际上,由于没有添加break语句,程序会继续执行下一个分支代码,直到switch结束。假设,这里的 num 为 0,那么那么该程序的输出结果将为:
Number is zero.Number is positive.Number is negative.
为了正确地判断输入数字的正负性,我们需要在相应分支的代码后加上break;语句,即便是在default分支下:
int num=-3
switch(num){
case 0:
cout<<"Number is zero.";
break;
case 1:
case 2:
case 3:
case 4:
case 5:
cout<<"Number is positive.";
break;
case -1:
case -2:
case -3:
case -4:
case -5:
cout<<"Number is negative.";
break;
default:
cout<<"Number is not in range.";
break;
}
这样,在输入数字为 3 的情况下,程序会输出:
Number is positive.
§2 判断某一天是当年的第几天
#include <iostream>
using namespace std;
int main(){
int year,month,days=0,date,leap;
// 提示用户输入年份、月份、日
cout<<"请输入年份:";
cin>>year;
cout<<"请输入月份:";
cin>>month;
.cout<<"请输入日:";
cin>>date;
// 判断是否为闰年,并记录该年2月份的天数
leap=(year%4==0 && year%100!=0||year%400==0)
// 利用 switch 分支结构计算输入日期是这一年的第几天
switch(month){
case 12: days+=30;
case 11: days+=31;
case 10: days+=30;
case 9: days+=31;
case 8: days+=31;
case 7: days+=30;
case 6: days+=31;
case 5: days+=30;
case 4: days+=31;
case 3: days+=28+leap;
case 2: days+=31;
case 1: days+=date; break;
default: cout<<"数据错误!"<<endl; break;
// 输出计算结果
cout<<year<<"年"<<month<<"月"<<date<<"日是这一年的第"<<days<<"天"<<endl;
return 0;
}
switch和if对比
使用switch分支结构可以使得某些情况下代码行数更少、易读性更高,且可以更快地判断某个值是否等于一系列常量中的任意一个。下面给出一个非常适合使用switch的例子
假如我们要根据星期几的数字(1-7),输出对应的英文名称(Monday,Tuesday,Wednesday...Sunday)。这个问题可以用if-else分支结构来实现,例如:
int a=3;
if(a==1){
cout<<"Monday";
}else if(a==2){
cout<<"Tuesday";
}else if(a==3){
cout<<"Wednesday";
}else if(a==4){
cout<<"Thursday";
}else if(a==5){
cout<<"Friday";
}else if(a==6){
cout<<"Saurtday";
}else if(a==7){
cout<<"Sunday";
}else{
cout<<"Invalid day";
}
这样写的缺点是代码行数很多,看起来比较繁琐。而如果我们使用switch分支结构,就可以更加简洁清晰地实现:
int a=3;
cin>>a;
switch(a)
case 1: cout<<"Monday"; break;
case 2: cout<<"Tuesday"; break;
case 3: cout<<"Wednesday"; break;
case 4: cout<<"Thursday"; break;
case 5: cout<<"Friday"; break;
case 6: cout<<"Saturday"; break;
case 7: cout<<"Sunday"; break;
default:cout<<"Invalid day"; break;
}

浙公网安备 33010602011771号