C++程序设计与案例分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3.5 switch语句

switch 语句也称开关语句,它用于测试某一个变量具有多个值时所执行的动作。分为两类:一类是简单switch语句;另一类是switch语句中又有一个switch语句,即switch语句嵌套。

(1)简单switch语句

switch语句的格式:

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

功能:首先计算表达式的值,然后依次与常量表达式ii=1,2, …, n)比较,若表达式的值与常量表达式j相等,则从常量表达式j处开始执行(执行入口),流程控制转移到下一个case子句继续执行,直到switch语句结束。若所有的常量表达式ii=1,2, …, n)均不等于表达式,则从default处开始执行,switch语句流程图如图3.6所示。

图3.6 switch语句流程图

注意:

① switch后面括号中的表达式可以是整型、整型长量表达式或字符型表达式。

② 常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式的值必须互不相同,否则就会出现相互矛盾的现象。

③ 语句i可以是一条或多条语句,是多条语句时不必用{ }将它们括起来。语句i处也可以没有语句,程序执行到此会自动向下顺序执行。

④ default语句一般出现在所有case语句之后,也可以出现在case语句之前或两个case语句之间。default语句也可以缺省。

⑤ 如果case语句组后没有break语句,则在执行完这条语句后,程序流程的控制会转移到下一个case语句组继续执行,每个case出现的次序不会影响switch语句的执行结果。

(2)switch语句嵌套

switch语句的格式:

                        switch( 表达式11)
                        {case 常量表达式11: 语句11;
                        switch(表达式2)
                        {语句1;
                        case 常量表达式21: 语句21;
                        case 常量表达式22: 语句22;  …
                        }
                        case 常量表达式12: 语句12;
                        switch(表达式3)
                        {语句2;
                        case 常量表达式31: 语句31;
                        case 常量表达式32: 语句32;  …
                        }
                            ……
                        语句1n;

                            default :
                        语句1n+1;   }

功能:首先计算表达式11的值,然后依次与常量表达式1i(1i=11,12, …,1n)比较,若表达式11的值与常量表达式11相等,则从常量表达式11处开始执行(执行入口),继续判断第二个switch语句的表达式2,再根据表达式2依次与常量表达式21、22……等进行匹配,寻找入口,直到第二个switch语句结束,回到第一个switch语句继续执行,流程控制转移到下一个case语句继续执行,直到最外层的switch语句结束。若所有的常量表达式1ii=1,2, …, n)均不等于表达式11,则从最外层的default处开始执行。

【例3.14】 对嵌套if语句进行改进。

          #include <iostream>
          using namespace std;
          int main ()
          {long i;
          float bonus,bon1,bon2,bon4,bon6,bon10;
          int c;
          bon1=100000*0.1;
          bon2=bon1+100000*0.075;
          bon4=bon2+200000*0.05;
          bon6=bon4+200000*0.03;
          bon10=bon6+400000*0.015;
          cout<<"enter i:";
          cin>>i;
          c=i/100000;
          if(c>10)  c=10;
          switch(c)
            {case 0: bonus=i*0.1; break;
            case 1: bonus=bon1+(i-100000)*0.075; break;
            case 2:
            case 3: bonus=bon2+(i-200000)*0.05;break;
            case 4:
            case 5: bonus=bon4+(i-400000)*0.03;break;
            case 6:
            case 7:
            case 8:
            case 9: bonus=bon6+(i-600000)*0.015; break;
            case 10: bonus=bon10+(i-1000000)*0.01;
            }
            cout<<"bonus="<<bonus<<endl;
            return 0;
          }