麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

C++ switch case語句講解

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

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

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

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

下面,我們就來用switch語句來改寫程序4.2.2。箭頭表明遇到break以后的運行情況。
#include "iostream.h"
int main()
{
   float a,b;
   char oper;
   cout <<"請輸入一個表達(dá)式(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;
}
上述程序的運行結(jié)果和程序4.2.2的運行結(jié)果一樣。我們發(fā)現(xiàn)使用了switch語句以后,代碼的平均縮進(jìn)程度有所減少,閱讀代碼的時候更簡潔易懂。所以,使用swith語句來描述這種多分支情況是很合適的。

試試看:
1、如果去除了case對應(yīng)的break,則運行出來會是什么結(jié)果?
結(jié)論:如果去除了break,則不會退出switch而運行到別的支路里去。

2、如果程序4.2.2的default沒有處在switch的結(jié)尾部分,那么運行出來會是什么結(jié)果?
結(jié)論:switch語句中最后一個分支的break可以省略,其它的break均不可以。

3、case后的常量能否是一個浮點型常量或雙精度型常量?

switch的一些使用技巧
返回去看一下程序4.1.2,我們不難發(fā)現(xiàn)這個程序也是一個多分支結(jié)構(gòu)。可是switch語句只能判斷表達(dá)式是否等于某個值,而不能判斷它是否處于某個范圍。而要我們把處于某個范圍中的每個值都作為一句case以后的常量,顯然也太麻煩了。那么我們還能不能使用swith語句來描述這種范圍型的多分支結(jié)構(gòu)呢?

通過分析,我們發(fā)現(xiàn)了主要起區(qū)分作用的并不是個位上的數(shù),而是十位上的數(shù)。如果我們能把十位上的數(shù)取出來,那么最多也就只有十個分支了,不是嗎?下面我們就來看一下用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://根據(jù)前面試一試的結(jié)論,如果case沒有對應(yīng)的break,會運行到下一個case中
      case 1:
      case 0:
      {
         if (mark>=0)//同樣要用if過濾負(fù)數(shù)
         {
            cout <<"Please work harder!" <<endl;
            break;
         }
      }
      default://其它情況都是出錯
      cout <<"ERROR!" <<endl;
   }
   return 0;
}
這個程序要比原來的程序4.1.2冗長一些。但是這里提到這個程序的目的是要教會大家一種使用switch的方法,即“以點蓋面”。

算法時間:數(shù)據(jù)的轉(zhuǎn)換
在程序設(shè)計中,我們經(jīng)常會遇到這樣的問題:我們希望處理的數(shù)據(jù)和電腦能夠處理的數(shù)據(jù)可能有所不符。不符合的情況一般有兩種,一種是范圍不符合,另一種是類型不符合。對于范圍不符合,我們一般考慮的是使用代數(shù)式對數(shù)據(jù)進(jìn)行處理。比如C++中的隨機(jī)函數(shù)能夠產(chǎn)生一個0~32768之間的一個整數(shù),如果我們希望得到一個0~10之間的隨機(jī)數(shù),那么就用它對10取余數(shù),那么結(jié)果一定就在這個范圍內(nèi)。對于類型不符合,我們只好盡量用已有的數(shù)據(jù)類型來描述這種難以表達(dá)的類型。就如同電腦中用0和1表示真和假一樣。  
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 中国av免费在线观看 | 一夜新娘第三季免费观看 | 狠狠干五月天 | 视频一区二区国产 | 精品国产一区二区三区四 | 夜夜看| 日本在线播放一区二区三区 | 国产99久久精品一区二区300 | 在线中文字幕不卡 | 久章草影院 | 99精品视频在线导航 | 亚洲天堂中文字幕在线观看 | 国产一级毛片国产 | 国产成视频在线观看 | 日韩av电影免费在线观看 | 龙的两根好大拔不出去h | 亚洲国产精品一区二区久久 | 久久福利国产 | 欧美日韩免费一区二区三区 | 综合网日日天干夜夜久久 | 欧美一区二区三区免费观看 | 成年免费看 | 羞羞网站在线观看入口免费 | 精品国产一区二区三区久久久蜜月 | 日本教室三级在线看 | 午夜国产精品成人 | 黄污污网站 | 最新影院 | 欧美日韩成人一区二区 | 久久精品国产99国产精品澳门 | 欧美日韩在线中文字幕 | 香蕉久久久久久 | 福利一区二区三区视频在线观看 | 日本在线不卡一区二区 | 日韩精品二区 | 久久久久久久.comav | 免费看黄色一级片 | 亚洲欧美国产精品va在线观看 | 免费h片网站 | 黄色片网站在线看 | 草莓视频久久 |