a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C++ > 正文

C++ switch case語句講解

2020-05-23 14:28:23
字體:
來源:轉載
供稿:網友
我們已經了解,if……else……可以用來描述一個“二岔路口”,我們只能選擇其中一條路來繼續走。然而,有時候我們會遇到一些“多岔路口”的情況,用if……else……語句來描述這種多岔路口會顯得非常麻煩,而且容易把思路攪渾。比如程序4.2.2就是一個用if……else……語句描述的四岔路口(四種操作符),整個程序占據了將近一頁。

如果我們把這些多岔路看作電路,那么用if……else……這種“普通雙向開關”來選擇某一條支路就需要設計一套很復雜的選路器。所以最簡便的選路方法當然是做一個像下圖那樣的開關。(圖4.4.1)

在C++中,也有這樣的開關,那就是switch語句。它能夠很簡捷地描述出多岔路口的情況。具體的語法格式為:
C++ switch case語句講解
switch(表達式)
{
   case 常量表達式1:
   {
      語句塊1;
      break;
   }
   ……
   case 常量表達式n:
   {
      語句塊n;
      break;
   }
   default:
   {
      語句塊n+1;
   }
}

在switch語句中,我們要記住四個關鍵詞,分別是switch、case、default和break。switch是語句的特征標志(圖中標作sw);case表示當switch后的表達式滿足某個case后的常量時,運行該case以后的語句塊。要注意,任意兩個case后的常量不能相等,否則switch將不知道選擇哪條路走。default表示當表達式沒有匹配的case時,默認(default)地運行它之后的語句塊(圖4.4.1中未標出);break表示分岔路已經到頭,退出switch語句。

下面,我們就來用switch語句來改寫程序4.2.2。箭頭表明遇到break以后的運行情況。
#include "iostream.h"
int main()
{
   float a,b;
   char oper;
   cout <<"請輸入一個表達式(eg.1+2):" <<endl;
   cin >>a >>oper >>b;
   switch (oper)
   {
      case '+':
      {
         cout <<a <<oper <<b <<'=' <<a+b <<endl;
         break;
      }
      case '-':
      {
         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語句再次過濾
         {
            cout <<"ERROR!" <<endl;
            break;
         }
      }
      case 4:
      {
         cout <<"Good!" <<endl;
         break;
      }
      case 3:
      {
         cout <<"Soso" <<endl;
         break;
      }
      case 2://根據前面試一試的結論,如果case沒有對應的break,會運行到下一個case中
      case 1:
      case 0:
      {
         if (mark>=0)//同樣要用if過濾負數
         {
            cout <<"Please work harder!" <<endl;
            break;
         }
      }
      default://其它情況都是出錯
      cout <<"ERROR!" <<endl;
   }
   return 0;
}
這個程序要比原來的程序4.1.2冗長一些。但是這里提到這個程序的目的是要教會大家一種使用switch的方法,即“以點蓋面”。

算法時間:數據的轉換
在程序設計中,我們經常會遇到這樣的問題:我們希望處理的數據和電腦能夠處理的數據可能有所不符。不符合的情況一般有兩種,一種是范圍不符合,另一種是類型不符合。對于范圍不符合,我們一般考慮的是使用代數式對數據進行處理。比如C++中的隨機函數能夠產生一個0~32768之間的一個整數,如果我們希望得到一個0~10之間的隨機數,那么就用它對10取余數,那么結果一定就在這個范圍內。對于類型不符合,我們只好盡量用已有的數據類型來描述這種難以表達的類型。就如同電腦中用0和1表示真和假一樣。  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三级免费 | 亚洲精品免费视频 | 精品国产31久久久久久 | 国产精品色网站 | 欧美中文一区 | 国产精品国产成人国产三级 | 久久久久国产一区二区三区小说 | 国产成人在线视频观看 | 精品久久久久久久久久久院品网 | 日日夜夜精品 | 男人的天堂免费 | 国产亚洲欧美在线 | 日韩精品在线播放 | 中文字幕在线观看www | 国产成人久久精品一区二区三区 | 亚洲欧美日韩另类精品一区二区三区 | 九九免费在线观看 | 国产一区二区三区在线 | 成人免费视屏 | 免费视频久久 | 国产探花 | 久久99精品久久久噜噜最新章节 | 日本亚洲精品成人欧美一区 | 国内精品久久久久久久影视蜜臀 | 自拍视频网站 | 成人国产一区 | 久热中文在线 | 草草网 | 成人在线免费观看 | 欧美一区二区三区在线视频 | www.久久| 高清av在线 | 一本一本久久a久久精品牛牛影视 | 国产高清精品一区 | 仙踪林久久久久久久999 | 国际精品久久 | 中文字幕在线免费 | 精品日韩 | 成人av免费在线观看 | 超碰在线免费看 | 日本不卡一区二区 |