C++ switch case语句讲解

2020-01-06 12:07:42于海丽

      {
         cout <<a <<oper <<b <<'=' <<a-b <<endl; 
        break;
      }
      case '*':
      {
         cout <<a <<oper <<b <<'=' <<a*b <<endl;
         break;
      }
      case '/':
      {
         if (b!=0) cout <<a <<oper <<b <<'=' <<a/b <<endl;
         else cout <<"出错啦!"<<endl;
         break;
      }
      default:
         cout <<"出错啦!"<<endl;
   }
   return 0;
}
上述程序的运行结果和程序4.2.2的运行结果一样。我们发现使用了switch语句以后,代码的平均缩进程度有所减少,阅读代码的时候更简洁易懂。所以,使用swith语句来描述这种多分支情况是很合适的。

试试看:
1、如果去除了case对应的break,则运行出来会是什么结果?
结论:如果去除了break,则不会退出switch而运行到别的支路里去。

2、如果程序4.2.2的default没有处在switch的结尾部分,那么运行出来会是什么结果?
结论:switch语句中最后一个分支的break可以省略,其它的break均不可以。

3、case后的常量能否是一个浮点型常量或双精度型常量?
switch的一些使用技巧
返回去看一下程序4.1.2,我们不难发现这个程序也是一个多分支结构。可是switch语句只能判断表达式是否等于某个值,而不能判断它是否处于某个范围。而要我们把处于某个范围中的每个值都作为一句case以后的常量,显然也太麻烦了。那么我们还能不能使用swith语句来描述这种范围型的多分支结构呢?

通过分析,我们发现了主要起区分作用的并不是个位上的数,而是十位上的数。如果我们能把十位上的数取出来,那么最多也就只有十个分支了,不是吗?下面我们就来看一下用switch语句改编的程序4.1.2。
#include "iostream.h"
int main()
{
   int mark;
   cout <<"请输入成绩(0~100): ";
   cin >>mark;
   switch(mark/20)
   {
      case 5:
      {
         if (mark>100)//100到119的情况都是mark/20==5,所以要用if语句再次过滤
         {