?? 教學(xué)--第九章 條件分支語句.htm
字號:
<P>//---------------------------------------------------------------------------
<P><B>#include <iostream.h></B>
<P>#pragma hdrstop
<P>//---------------------------------------------------------------------------
<P>#pragma argsused
<P>int main(int argc, char* argv[])
<P>{</SPAN>
<P> <SPAN lang=EN-US><B>int fromWay;</B>
<P>
<P><B> cout << "請通過輸入序號,選擇您如何來到本網(wǎng)站。" << endl;</B>
<P><B> cout << "1) ---- 通過搜索引擎" << endl;</B>
<P><B> cout << "2) ---- 通過朋友介紹" << endl; </B>
<P><B> cout << "3) ---- 通過報刊雜志" << endl;</B>
<P><B> cout << "4) ---- 通過其它方法" << endl;</B>
<P>
<P><B> cin >> fromWay;</B>
<P>
<P><B> switch (fromWay)</B>
<P><B> {</B>
<P><B> case 1 : </B>
<P><B> cout << "您是通過搜索引擎來到本網(wǎng)站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 2 : </B>
<P><B> cout << "您是通過朋友介紹來到本網(wǎng)站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 3 : </B>
<P><B> cout << "您是通過報刊雜志來到本網(wǎng)站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> case 4 : </B>
<P><B> cout << "您是通過其它方法來到本網(wǎng)站的。"
<< endl;</B>
<P><B> break;</B>
<P><B> default :</B>
<P><B> cout <<
"錯誤的選擇!請輸入1~4的數(shù)字做出選擇。" << endl;</B>
<P><B> }</B>
<P>
<P><B> getchar();</B>
<P>
<P> return 0;
<P>}
<P>
<P>以下是我運行的一個結(jié)果,我輸入的是2。
<P><IMG height=199 src="教學(xué)--第九章 條件分支語句.files/ls09.h1.gif" width=397
border=0>
<P>
<P>對照輸入結(jié)果,我們講一講這段代碼,其中主要目的是要弄明白switch語句的用法。
<P>
<P>首先,int fromWay 定義了一個整型變量,準(zhǔn)備用來存儲用戶輸入的選擇。</SPAN>
<P>
<P><SPAN lang=EN-US>cout << "請通過輸入序號,選擇您如何來到本網(wǎng)站。" << endl;
<P>cout << "1) ---- 通過搜索引擎" << endl;
<P>cout << "2) ---- 通過朋友介紹" << endl;
<P>cout << "3) ---- 通過報刊雜志" << endl;
<P>cout << "4) ---- 通過其它方法" << endl;
<P>
<P>這些語句輸出提示和選擇項,結(jié)果如上圖。
<P>
<P>cin >> fromWay; 這一句則負(fù)責(zé)等待用戶輸入,并且將用戶的輸入存儲到 fromWay。
<P>接下來程序遇上了 switch 語句:
<P>
<P>switch (fromWay)
<P>程序?qū)⒏鶕?jù) fromWay 值,在下面的各個case
中找到匹配的值。 本例中switch帶有四個case,值分別是1、2、3、4。在結(jié)果圖中,由于我輸入的是2,所以程序進入下面這個case:
<P>case 2 :
<P> cout << "您是通過朋友介紹來到本網(wǎng)站的。" << endl;
<P> break;
<P>
<P>程序打出"您是通過朋友介紹來到本網(wǎng)站的。" 這行內(nèi)容。最后遇上 <B>break;</B>于是跳出整個switch語句。
<P>
<P>同樣的道理,如果用戶輸入的是其它的數(shù),如1或3,則會進入相應(yīng)的case 1 或 case 3 分支。
<P>但如果用戶輸入的數(shù)在所有的case
里都找不到時,會怎么樣?比如,用戶輸入5。這種情況下,default分支將起作用,所有case里的值都不匹配時,switch進入default分支。如果連default也沒有,那么程序在switch語句里什么也不做,直接完成switch語句。
<P>我們來看一下如果用戶不按所列的情況輸入,而造成的結(jié)果:
<P><IMG height=183 src="教學(xué)--第九章 條件分支語句.files/ls09.h2.gif" width=381
border=0>
<P>
<P>了解一下switch,case,break,default的意思,對理解前面的一切也會有幫助,它們分別是:開關(guān),情況,中斷,默認(rèn)(值)。那么用一句話套起來的說法就是:根據(jù)開關(guān)值的不同,執(zhí)行不同的情況,直到遇上中斷;如果所有的情況都不符合開關(guān)值,那么就執(zhí)行默認(rèn)的分支。
<P>
<P>最后說一下關(guān)于switch中非常重要的幾個注意點。
<P>
<P><B>第一、</B>switch ( 整型或字符型變量
) 中,<B>變量的類型</B>如文中所標(biāo),<B>只能是整型和字符類型。</B>它們包含
int,char。當(dāng)然無符類型或不同的長度整型(unsigned int,short,unsigned
char)等都可以。另外,枚舉類型(enum)內(nèi)部也是由整型或字符類型實現(xiàn)。所以也可以。實型(浮點型)數(shù)就不行,如:</SPAN>
<P><SPAN lang=EN-US>float a = 0.123;</SPAN>
<P><SPAN lang=EN-US>switch(a) //錯誤!a不是整型或字符類型變量。 </SPAN>
<P><SPAN lang=EN-US>{</SPAN>
<P><SPAN lang=EN-US> ....</SPAN>
<P><SPAN lang=EN-US>}
<P>
<P><B>第二、</B>case 之后可以是直接的常量數(shù)值,如例中的1、2、3、4,也可以是一個使用常量計算式,如2+2等,但不能是變量或帶有變量的表達式,如
a * 2等。當(dāng)然也不能是實型數(shù),如4.1,或2.0 / 2 等。
<P>switch(formWay)
<P>{
<P> case 2-1 : //正確
<P> ...
<P> case a-2 : //錯誤
<P> ...
<P> case 2.0 : //錯誤
<P> ...
<P>}
<P>另外,在case 與常量值之后,需要一個冒號,請注意不要疏忽。
<P>
<P><B>第三、</B>break 的作用。
<P>break
使得程序在執(zhí)行完選中的分支后,可以跳出整個switch語句(即跳到switch接的一對{}之后),完成switch。如果沒有這個break,程序?qū)⒃诶^續(xù)前進到下一分支,直到遇到后面的break或者switch完成。
<P>比如,假設(shè)現(xiàn)在程序進入case 1: 中的分支,但case 1 的分支這回沒有加break:
<P>
<P>case 1 :
<P> <B> </B>cout << "您是通過搜索引擎來到本網(wǎng)站的。" <<
endl;
<P>case 2 :
<P> cout << "您是通過朋友介紹來到本網(wǎng)站的。" << endl;
<P>
<P>那么,程序在輸出 "您是通過搜索引擎來到本網(wǎng)站的。" 之后,會繼續(xù)輸出case 2中的 "您是通過朋友介紹來到本網(wǎng)站的。" 。
<P>請大家將前面實例中的代碼片段改為如下(紅色部分,即將所有的break都通過加//使之無效。):
<P> ...
<P> case 1 :
<P> cout << "您是通過搜索引擎來到本網(wǎng)站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 2 :
<P> cout << "您是通過朋友介紹來到本網(wǎng)站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 3 :
<P> cout << "您是通過報刊雜志來到本網(wǎng)站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> case 4 :
<P> cout << "您是通過其它方法來到本網(wǎng)站的。"
<< endl;
<P><FONT color=#ff0000>
//break;</FONT>
<P> default :
<P> cout <<
"錯誤的選擇!請輸入1~4的數(shù)字做出選擇。" << endl;
<P> ...
<P>
<P>運行后,結(jié)果會是如何?請大家動手試試,然后在作業(yè)中回答我。
<P>
<P><B>第四、</B>default是可選中,前面我們已經(jīng)說過它的用處,及如果沒有default,程序在找不到匹配的case分支后,將在switch語句范圍內(nèi)不做什么事,直接完成switch。大家也可以在實例中將default的代碼注釋掉,然后試運行,并且在選擇時輸入5。
<P>...
<P>//default :
<P> //cout << "錯誤的選擇!請輸入1~4的數(shù)字做出選擇。" << endl;
<P>...
<P>
<P><B>第五、</B>必要時,可在各個case中使用{}來明確產(chǎn)生獨立的復(fù)合語句。
<P>前面我們在講if...語句和其它流程控制語句時,都使用{}來產(chǎn)生復(fù)合語句:
<P>if (條件)
<P>{
<P> 分支一;
<P>}
<P>除非在分支中的語句正好只有一句,這里可以不需要花括號{}。但在switch的各個case語句里,我們在語法格式上就沒有標(biāo)出要使用{},請看:
<P>switch ( 整型或字符型變量 )
<P>{<BR> case 變量可能值1
: <BR>
分支一;<BR> break;
<P> case 變量可能值2 : <BR> ....
<P>}
<P>
<P>一般教科書上只是說 case
分支可以不使用{},但這里我想提醒大家,并不是任何情況下case分支都可以不加{},比如你想在某個case里定義一個變量:
<P>switch (formWay)
<P>{
<P> case 1 :
<P> int a=2;
//錯誤。由于case不明確的范圍,編譯器無法在此處定義一個變量。
<P> ...
<P> case 2 :
<P> ...
<P>}
<P>
<P>在這種情況下,加上{}可以解決問題。
<P>switch (formWay)
<P>{
<P> case 1 :
<P> {
<P> int a=2; //正確,變量a被明確限定在當(dāng)前{}范圍內(nèi)。
<P> ...
<P> }
<P> case 2 :
<P> ...
<P>}
<P>由于本注意點涉及到變量的作用范圍,所以你如果看得不是很明白,可以暫時放過。
<P>
<P><B>第六、</B>switch并不能代替所有有if..else...語句。這一點你應(yīng)該知道了,因為前面已說過,它在對變量做判斷時,只能對整型或字符型的變量做判斷。另外,switch也只能做“值是否相等”的判斷。你不能在case里寫條件:
<P>
<P>switch (i)
<P>{
<P> case (i >= 32 && i<=48)
//錯誤! case里只能寫變量的可能值,不能寫條件。
<P> ...
<P>}
<P>
<P>在這種情況下,你只能通過 if...else來實現(xiàn)。
<P>
<H3><A name=9.6>9.6</A> 小結(jié)</H3>
<P>
<P>這一節(jié)課我們學(xué)了所有條件分支的流程控制語句。在編程的時候,我們選擇什么語句呢?嗯,這是一個問題。幸好,這個問題不像丹麥王子哈姆雷特面對的那樣困難。你所要做的就是<B>多看幾遍本章課程</B>、<B>多做幾次本章的各個短小簡單的例程。</B>從基礎(chǔ)做起。然后,我們會安排一個完整的,適合我們現(xiàn)在水準(zhǔn)的小項目進行實戰(zhàn)。
<P>
<P>也許你害怕做選擇、也許你正在為難于某個選擇、也許你一直為某個錯誤的選擇而后悔……
<P>但如果生活真的沒有了選擇……或者
<P>如果我們所要經(jīng)歷一切選擇都只能由別人做出決定……
<P>這樣的生活肯定不精彩。
<P>編程也一樣。學(xué)好條件選擇的流程,你就能寫一些精彩的程序!
<P>所以慶賀一下吧,就在這一章的內(nèi)容,我們學(xué)完了所有的條件分支的流程控制語句!要知道,無論是什么編程語言,也都只有兩大流程控制!
<P>多加努力!下一章《循環(huán)語句》見!</SPAN>
<P> </P></TD></TR></TBODY></TABLE></CENTER>
<P align=center>[<A
href="http://d2school.com/bcyl/bhcpp/newls/ls09.htm#頁首">到頁首</A>]</P></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -