?? 教學(xué)--第十一章 流程控制拾遺與混合訓(xùn)練.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://d2school.com/bcyl/bhcpp/newls/ls11.htm -->
<HTML><HEAD><TITLE>教學(xué)--第十章 循環(huán)語句</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.節(jié)標(biāo)題 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
#glowtext {
FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
FONT: 10pt 宋體; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋體; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋體; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY leftMargin=0 topMargin=3><!-- 標(biāo)題 --><!--標(biāo)題結(jié)束 --><A name=頁首></A>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋體"
width="100%" height=148>
<H2>第十一章 流程控制拾遺與混合訓(xùn)練</H2>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1">11.1
break</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.1">11.1.1
break的作用與用法</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.2">11.1.2 break
的一個“高級用法”</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.3">11.1.3 break
在for循環(huán)中的一點(diǎn)注意</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.1.4">11.1.4
多層循環(huán)中的break</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.2">11.2
continue</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.3">11.3
goto</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4">11.4
流程控制強(qiáng)化訓(xùn)練</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.1">11.4.1
求絕對值</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.2">11.4.2
判斷用戶輸入字符的類型</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.3">11.4.3 等腰三角形圖形的輸出</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.4">11.4.4
輸出正弦曲線圖</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.5">11.4.5
標(biāo)準(zhǔn)體重計算程序</A></P>
<P> </P>
<P>說“拾遺”,可能你會以為本章的內(nèi)容不是重點(diǎn)?那可不是,流程控制的內(nèi)容并不多,卻支撐著所有程序的框架!所所有有關(guān)流程的內(nèi)容都是基礎(chǔ)加重點(diǎn)。只是本章中繼續(xù)講到一些關(guān)鍵字可以改變流程,但并不獨(dú)自構(gòu)成完整流程結(jié)構(gòu)。</P>
<P>另外,作為流程控制內(nèi)容的結(jié)束章節(jié),我們于最后安排了一些各流程混合使用的訓(xùn)練。</P>
<P> </P>
<H3><A name=11.1>11.1</A> break</H3>
<H4><A name=11.1.1>11.1.1</A> break的作用與用法</H4>
<P> </P>
<P>循環(huán)就象繞圈子。比如,體育課,跑1200米,跑道一圈400米,所以我們要做的事就是一邊跑一邊在心里計數(shù)(當(dāng)然要已數(shù),否則老師萬一少計一圈,我們可就玩完了),當(dāng)計數(shù)到3圈時,“循環(huán)”結(jié)束。
<P>如果,我在跑步時不幸由于體力不支而暈倒……怎么辦?
<P>
<P>有兩種辦法,一種是在判斷是否繼續(xù)循環(huán)的條件中加入新增條件的判斷:
<P>假設(shè)原來的循環(huán)表達(dá)為:
<P>
<P>while(已跑完的圈數(shù) < 3)
<P>{
<P> 跑一圈……;
<P>}
<P>
<P>那么,加上附加條件后,循環(huán)表達(dá)為:
<P>
<P>while(已跑完的圈數(shù) <3 && 我還跑得好好的) //&& 就是"并且",沒忘吧?
<P>{
<P> 跑一圈……
<P>}
<P>
<P>第二種方法是在循環(huán)中使用條件分支,在指定的條件成立時,中途跳出循環(huán),用于實(shí)現(xiàn)跳出的關(guān)鍵字為:break。
<P>
<P>while(已跑的圈數(shù) < 3 )
<P>{
<P> 跑一圈……;
<P>
<P> if(我身體感覺不妙)
<P> <B>break;</B>
<P>}
<P>
<P>在循環(huán)中,每跑完一圈,都檢查一下自已是否感覺不妙,如果是,則程序執(zhí)行break,直接跳出while,而不管此時圈數(shù)是否到達(dá)3圈。
<P>
<P>還記得“小女孩買裙子”的故事嗎?那時候,我們將“父母不給買小紅裙 &&
我還沒有哭累”作為循環(huán)繼續(xù)的條件,如果使用break,則可以寫成這樣:
<P>while(父母不給買小紅裙)
<P>{
<P> 我哭;
<P>
<P> if(我哭累了)
<P> <B>break;</B>
<P>}
<P>
<P>在循環(huán)中,“我”每哭一次,都想想是否累了,如果是,則程序執(zhí)行break,直接跳出while,而不管此時爸媽是否已經(jīng)買了我的裙。
<P>
<P>通過這兩個例子,你應(yīng)該注意到了,如果要用break,則if的條件(也就是要執(zhí)行break分支的條件),正好是把原來放在循環(huán)判斷中的條件反正過來。比如,原來是判斷“我還跑得好好的”,現(xiàn)在則是判斷“我身體感覺不妙”;原來是判斷“我還沒有哭累”,現(xiàn)在是判斷“我哭累了”。
<P>一句話,原來是判斷“是否繼續(xù)循環(huán)”,現(xiàn)在是判斷“是否跳出循環(huán)”……
<P>
<P>再來看那個“可以多次統(tǒng)計”的統(tǒng)計程序。看看是否也能把它改成使用break來結(jié)束循環(huán)。
<P>為了節(jié)省篇幅同時也是為了突出重點(diǎn),我們將其中用于實(shí)現(xiàn)一次統(tǒng)計的代碼,用一句<B>偽代碼</B>來實(shí)現(xiàn)。(什么叫偽代碼?我們用得很經(jīng)常啊,就是那些用自然語言寫的“代碼”,這些代碼當(dāng)然無法在計算機(jī)上運(yùn)行,它們只是要方便地表達(dá)實(shí)際代碼要實(shí)現(xiàn)的功能)。
<P>
<P>int main(int argc, char* argv[])
<P>{
<P> 實(shí)現(xiàn)統(tǒng)計一個學(xué)員的成績; //偽代碼,詳細(xì)代碼請見上章相關(guān)部分
<P>
<P> do
<P> {
<P> //提問是否繼續(xù)統(tǒng)計:
<P> cout <<"是否開始新的統(tǒng)計?(Y/N)?";
<P> cin >> c;
<P> }
<P> while( c == 'y' || c == 'Y');
<P>}
<P>
<P>改成用 break;
<P>int main(int argc, char* argv[])
<P>{
<P> 實(shí)現(xiàn)統(tǒng)計一個學(xué)員的成績; //偽代碼,詳細(xì)代碼請見上章相關(guān)部分
<P>
<P> do
<P> {
<P> //提問是否繼續(xù)統(tǒng)計:
<P> cout <<"是否開始新的統(tǒng)計?(Y/N)?";
<P> cin >> c;
<P>
<P><B> //如果用戶輸出的不是字母Y,說明他不想繼續(xù)統(tǒng)計了,我們需要中斷循環(huán)。</B>
<P><B> if( c != 'y' && c != 'Y')</B>
<P><B> break;</B>
<P> }
<P> while (true);
<P>}
<P>
<P>請首先
while(true)部分,其條件直接寫上真(true),表明這是一個無條件的循環(huán)(即,循環(huán)將無條地一直持續(xù)下去),這豈不犯了程序界的武林大豈:成了一個“死循環(huán)”?其實(shí),相信你已明白,在循環(huán)體內(nèi),有一個break的分支在呢,當(dāng)判斷用戶輸入的字母既不是小寫的y,也不是大寫的Y,break就起它能起的作用了。
<P>
<P>三個例子,都是從循環(huán)判斷的條件摘出一部分或全部(最后一個例子),然后循環(huán)體中,采用一個if判斷,結(jié)束break來跳出循環(huán)。可能你會問:為什么要break呢?直接用原來的方法,在while處判斷條件不是很好嗎?
<P>
<P>break的長處在于,它可以在循環(huán)體內(nèi)的任意位置進(jìn)行判斷。
<P>繼續(xù)上一例。假設(shè)我們出于慎重,想在用戶按入 N 時,再問他一句是否真的退出統(tǒng)計,則此時顯示出了break的方便:
<P>int main(int argc, char* argv[])
<P>{
<P> 實(shí)現(xiàn)統(tǒng)計一個學(xué)員的成績; //偽代碼,詳細(xì)代碼請見上章相關(guān)部分
<P>
<P> do
<P> {
<P> //提問是否繼續(xù)統(tǒng)計:
<P> cout <<"是否開始新的統(tǒng)計?(Y/N)?";
<P> cin >> c;
<P>
<P> //如果用戶輸出的不是字母Y,說明他不想繼續(xù)統(tǒng)計了,我們需要中斷循環(huán)。
<P> if( c != 'y' && c != 'Y')
<P><B> </B>{
<P><B>
//出于慎重起見,我們要再問一句用戶是否真的不統(tǒng)計了?</B>
<P><B> cout <<
"您真的不想繼續(xù)計算了?(Y:真的結(jié)束 / N:繼續(xù)統(tǒng)計)";</B>
<P><B> cin >>
c;</B>
<P><B> </B>
<P><B>
//這回,如果用戶輸入Y,表明他真的不統(tǒng)計了:</B>
<P><B> if( c == 'Y'
|| c == 'y')</B>
<P><B>
break;</B>
<P> }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -