C++基础17 switch结构

什么是switch结构?

应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++提供了一种switch开关语句。

基本框架

 switch(表达式)
  {
         case 常量表达式1:
                  语句序列1;
                  break;
         ……
         case  常量表达式n:
                   语句序列n;
                   break;
         default:
                  语句序列n+1;
 }

该语句中可以使用一次或多次case标号,但只能使用一次default标号,或者省略整个default部分

多个case标号也允许使用在同一个语句序列的前面

每个语句标号有保留字case和后面的常量表达式及冒号组成,每个常量表达式通常为字面常量,如常数或字符。

switch语句的执行过程

计算出switch后面圆括号内表达式的值,假定为M,若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值。

依次计算出每个case后常量表达式的值,假定它们为M1、M2、…,同样若它们的值不是整型,则自动转换为整型。

让M依次同M1、M2、…进行比较,一旦遇到M与某个值相等,则就从对应标号的语句开始执行;在碰不到相等的情况下,若存在default子句,则就执行其冒号后面的语句序列,否则不执行任何操作;当执行到复合语句最后的右花括号时就结束整个switch语句的执行。

注意事项

case语句后的各常量表达式的值不能相同,否则会出现错误码。

每个case或default后,可以包含多条语句,不需要使用“{”和“}”括起来。

各case和default子句的先后顺序可以变动,这不会影响程序执行结果。

default子句可以省略,default后面的语句末尾可以不必写break。

训练:计算器

一个最简单的计算器支持+,-,*,/四种运算。输入只有一行:两个参加运算的数和一个操作符(+,-,*,/)。输出运算表达式的结果。考虑下面两种情况:
(1)如果出现除数为0的情况,则输出:Divided by zero!
(2)如果出现无效的操作符(即不为+,-,*,/之一),则输出:Invalid operator!
【输入样例】34  56  +
【输出样例】90

解 析

设num1、num2存放两个参加运算的操作数,op存放操作符。

  • 当op为“+”号时,实现加法操作。
  • 当op为“-”号时,实现减法操作。
  • 当op为“*”号时,实现乘法操作。
  • 当op为“/”号时,判断b值,如果不为0,则实现除法操作,如果为0,则输出:Divided by zero!。
  • 当op不是上面四种操作符时,输出:“Invalid operator!”。

参考代码

float num1,num2;
char op;
cin>>num1>>num2>>op;
switch(op)
{
        case '+': cout<<num1+num2;break;
        case '-': cout<<num1-num2;break;
        case '*': cout<<num1*num2;break;
        case '/':if(num2!=0) cout<<num1/num2;break;
        else cout<<"Divided by zero!";break;
        default: cout<<"Invalid operrator!";
}