




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章C++的控制結(jié)構(gòu)《C++開發(fā)實(shí)例教程》劉暢主編電子工業(yè)出版社本章學(xué)習(xí)內(nèi)容掌握函數(shù)的聲明和定義、函數(shù)的調(diào)用及函數(shù)的參數(shù)傳遞過程;掌握C++的輸入/輸出流及其控制符的使用;掌握選擇結(jié)構(gòu)if、switch語(yǔ)句的使用;掌握for、while、do…while三種循環(huán)語(yǔ)句的語(yǔ)法和使用場(chǎng)合,嵌套循環(huán)語(yǔ)句的控制執(zhí)行的流程,能根據(jù)要求選擇合適的循環(huán)語(yǔ)句;掌握goto、break、continue語(yǔ)句的語(yǔ)法和使用場(chǎng)合,能根據(jù)要求選擇合適的跳轉(zhuǎn)語(yǔ)句。本章目錄第四講順序結(jié)構(gòu)第五講選擇結(jié)構(gòu)第六講循環(huán)語(yǔ)句第七講嵌套循環(huán)及流程轉(zhuǎn)向語(yǔ)句本章小結(jié)結(jié)束第四講順序結(jié)構(gòu)一、表達(dá)式語(yǔ)句及復(fù)合語(yǔ)句二、輸入/輸出流的格式控制練一練返回本章目錄一、表達(dá)式語(yǔ)句及復(fù)合語(yǔ)句任何一個(gè)表達(dá)式后面加上一個(gè)分號(hào)就構(gòu)成了表達(dá)式語(yǔ)句(沒有分號(hào)的不是語(yǔ)句)。表達(dá)式是指用運(yùn)算符連接各個(gè)運(yùn)算對(duì)象,合乎語(yǔ)句規(guī)則的式子。在C++程序中,幾乎所有的操作運(yùn)算都是通過表達(dá)式來實(shí)現(xiàn)的。常見的表達(dá)式語(yǔ)句有以下幾種:空語(yǔ)句、賦值語(yǔ)句、函數(shù)調(diào)用語(yǔ)句。返回本講目錄1.空語(yǔ)句 空語(yǔ)句是指只有一個(gè)分號(hào)而沒有表達(dá)式的語(yǔ)句??照Z(yǔ)句不做任何操作運(yùn)算,而只是作為一種形式上的語(yǔ)句填充在控制語(yǔ)句之中。這些填充處需要一條語(yǔ)句,但又不做任何操作,是最簡(jiǎn)單的表達(dá)式語(yǔ)句。返回本講目錄2.賦值語(yǔ)句賦值語(yǔ)句是由賦值表達(dá)式加一個(gè)語(yǔ)句結(jié)束標(biāo)志(分號(hào)“;”)構(gòu)成的語(yǔ)句。如語(yǔ)句:intx;x=5;其中語(yǔ)句x=5;就是一個(gè)賦值語(yǔ)句。返回本講目錄3.函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句是由函數(shù)調(diào)用表達(dá)式加一個(gè)語(yǔ)句標(biāo)志(分號(hào)“;”)構(gòu)成的語(yǔ)句。例如:max(a,b);返回本講目錄4.復(fù)合語(yǔ)句C++允許把一組語(yǔ)句用一對(duì)花括號(hào)括起來,構(gòu)成一個(gè)復(fù)合語(yǔ)句。例如:{intx=5;x++;}注意:一個(gè)復(fù)合語(yǔ)句的右花括號(hào)之后不能再寫分號(hào)。復(fù)合語(yǔ)句是若干條語(yǔ)句的一個(gè)集合,它在語(yǔ)法上是一個(gè)整體,相當(dāng)于一條語(yǔ)句。在一個(gè)復(fù)合語(yǔ)句中可以包含另外一個(gè)或多個(gè)復(fù)合語(yǔ)句,而且也可以定義變量,也具有順序、選擇、循環(huán)結(jié)構(gòu)。返回本講目錄二、輸入/輸出流的格式控制C++給用戶提供了一些常用的輸入/輸出流格式控制符,下面我們先來看一個(gè)實(shí)例?!緦?shí)例3-1】閱讀下面程序,分析程序并寫出運(yùn)行結(jié)果。
點(diǎn)擊打開【實(shí)例3-1】源程序。返回本講目錄程序運(yùn)行結(jié)果如下:返回本講目錄5.常用的輸入/輸出流格式控制符C++用控制符(manipulators)可以對(duì)輸入/輸出流的格式進(jìn)行控制,可以滿足用戶的要求。所有不帶形參的控制符都定義在頭文件iostream.h中,而帶形參的控制符則定義在頭文件iomanip.h中,因而使用相應(yīng)的控制符就必須包含相應(yīng)的頭文件。表3-1列出了常用的輸入/輸出流控制符。返回本講目錄表3-1常用的輸入/輸出流格式控制符控制符含義用于dec數(shù)值數(shù)據(jù)采用十進(jìn)制表示輸入/輸出hex數(shù)值數(shù)據(jù)采用十六進(jìn)制表示輸入/輸出oct數(shù)值數(shù)據(jù)采用八進(jìn)制表示輸入/輸出setw(n)設(shè)置域?qū)挒閚個(gè)字符輸出setfill(c)設(shè)置填充字符為c輸出setprecision(n)設(shè)置浮點(diǎn)數(shù)的精度位數(shù)(不包括小數(shù)點(diǎn))輸出endl輸出一個(gè)換行符并刷新流輸出ends輸出一個(gè)空字符'\0'以結(jié)束字符串輸出setiosflags(ios::left)輸出數(shù)據(jù)左對(duì)齊輸出setiosflags(ios::right)輸出數(shù)據(jù)右對(duì)齊輸出setiosflags(ios::uppercase)十六進(jìn)制數(shù)輸出時(shí)字母用大寫表示輸出setiosflags(ios::showpoint)輸出浮點(diǎn)數(shù)中的小數(shù)點(diǎn)和尾部無(wú)效數(shù)字0輸出setiosflags(ios::showpos)輸出數(shù)據(jù)設(shè)置顯示正、負(fù)符號(hào)輸出setiosflags(ios::scientific)浮點(diǎn)數(shù)以指數(shù)形式顯示輸出setiosflags(ios::fixed)設(shè)置浮點(diǎn)數(shù)以固定的小數(shù)位數(shù)顯示輸出setiosflags(ios::showbase)數(shù)值輸出的前面加上“基指示符”輸出返回本講目錄6.控制不同進(jìn)制的輸出默認(rèn)情況下,程序以十進(jìn)制(dec)的形式輸出。有時(shí),根據(jù)不同的情況需要以八進(jìn)制或十六進(jìn)制的形式輸出,此時(shí),只需在輸出流中用控制符oct(八進(jìn)制)、hex(十六進(jìn)制)進(jìn)行過濾,即可按相應(yīng)的進(jìn)制來顯示數(shù)據(jù)。這三個(gè)控制符在頭文件iostream.h中定義,在使用這些控制符時(shí),要在程序的開頭包含頭文件iostream.h。例如,在【實(shí)例3-1】中第10~12行語(yǔ)句就分別用十進(jìn)制(dec)、八進(jìn)制(oct)和十六進(jìn)制(hex)輸出了一個(gè)整數(shù)x。返回本講目錄7.控制輸出寬度用setw(n)控制符可以指定每個(gè)數(shù)據(jù)輸出時(shí)占用的寬度,即這個(gè)數(shù)據(jù)占用的最小字符長(zhǎng)度。默認(rèn)時(shí),輸出的寬度為0,即setw(0)。當(dāng)用setw(n)設(shè)置的寬度小于輸出數(shù)據(jù)的實(shí)際寬度時(shí),該設(shè)置無(wú)效,而是按照數(shù)據(jù)的實(shí)際寬度輸出;當(dāng)設(shè)置的寬度大于等于輸出數(shù)據(jù)的實(shí)際寬度時(shí),則在數(shù)據(jù)字符前顯示空白(即向右對(duì)齊,數(shù)據(jù)前面用空格填充),按設(shè)置的n位寬度輸出。它包含在iomanip.h中,在使用這些控制符時(shí),要在程序的開頭包含頭文件iomanip.h。注意:setw(n)只影響緊跟著它的數(shù)據(jù),如果要對(duì)多個(gè)數(shù)據(jù)設(shè)置輸出寬度,則必須對(duì)每個(gè)數(shù)據(jù)都使用setw(n)控制符。返回本講目錄8.控制浮點(diǎn)數(shù)值顯示C++默認(rèn)的流輸出數(shù)值有效位數(shù)是6,使用setprecision(n)可控制輸出流顯示浮點(diǎn)數(shù)的數(shù)字位數(shù)。實(shí)際輸出時(shí),其含義還取決于實(shí)數(shù)的輸出形式。當(dāng)用setiosflags(ios::scientific)使實(shí)數(shù)按指數(shù)形式(科學(xué)計(jì)數(shù)法)來顯示時(shí),setprecision指定的是e(或E)前面小數(shù)部分中小數(shù)點(diǎn)后面的位數(shù)。當(dāng)用setiosflags(ios::fixed)使實(shí)數(shù)按定點(diǎn)格式顯示時(shí)(這也是默認(rèn)格式),setprecision指定的是整個(gè)實(shí)數(shù)的有效位數(shù)(不含小數(shù)點(diǎn))。該控制符在頭文件iomanip.h中定義。注意:一旦使用了setprecision控制符,則該控制符的作用域會(huì)一直持續(xù)到程序結(jié)束,或者遇到了另外一個(gè)setprecision控制符。返回本講目錄9.控制左右對(duì)齊默認(rèn)情況下,C++程序的I/O流以左對(duì)齊的方式顯示輸出的內(nèi)容。使用控制符setiosflags(ios::left)和setiosflags(ios::right),可以控制輸出內(nèi)容的左、右對(duì)齊方式。這兩個(gè)控制符在頭文件iomanip.h中定義。也可以簡(jiǎn)寫成left和right進(jìn)行對(duì)齊方式控制。返回本講目錄10.控制正、負(fù)號(hào)的顯示C++程序的I/O流只在負(fù)數(shù)之前顯示值的負(fù)號(hào)。在不同情況下,有時(shí)需要在正數(shù)之前顯示數(shù)的正號(hào),此時(shí)可以用控制符setiosflags(ios::showpos)根據(jù)輸出數(shù)值的正負(fù),在數(shù)據(jù)前面分別加上+、?號(hào)。該控制符在頭文件iomanip.h中定義。例如,在【實(shí)例3-1】中語(yǔ)句:cout<<"顯示正負(fù)號(hào):"<<showpos<<y<<endl;就是設(shè)置輸出數(shù)據(jù)帶正、負(fù)號(hào)顯示,所以輸出y值為+1.2345679。返回本講目錄11.控制空位填充當(dāng)待輸出數(shù)據(jù)的實(shí)際長(zhǎng)度小于setw(n)確定的輸出寬度時(shí),默認(rèn)情況下,在數(shù)據(jù)前用空格填充,保證輸出的位數(shù)為n。C++程序允許使用控制符setfill(c)來確定一個(gè)填充空位的非空格的字符c。該控制符在頭文件iomanip.h中定義。例如,【實(shí)例3-1】中的第18行語(yǔ)句:cout<<"用*號(hào)填充空位(10位寬度):"<<setfill('*')<<setw(10)<<y<<endl;就是用“*”來填充空位的。返回本講目錄練一練【練習(xí)3-1】閱讀下面程序,分析程序并寫出運(yùn)行結(jié)果。
點(diǎn)擊打開【練習(xí)3-1】源程序。解:程序運(yùn)行結(jié)果如下:返回本講目錄第五講選擇結(jié)構(gòu)一、標(biāo)準(zhǔn)if語(yǔ)句二、復(fù)合if語(yǔ)句三、if語(yǔ)句的嵌套四、switch語(yǔ)句練一練返回本章目錄一、標(biāo)準(zhǔn)if語(yǔ)句【實(shí)例3-2】輸入一個(gè)整數(shù),求其絕對(duì)值。程序分析:(1)輸入一個(gè)整數(shù);(2)使用標(biāo)準(zhǔn)if語(yǔ)句判斷該值是否大于等于0,如果大于等于0,則輸出其絕對(duì)值為自身;否則輸出其絕對(duì)值為其相反數(shù)。點(diǎn)擊打開【實(shí)例3-2】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄1.if語(yǔ)句的標(biāo)準(zhǔn)形式1)標(biāo)準(zhǔn)if語(yǔ)句的定義格式注意:else不是一條獨(dú)立的語(yǔ)句,它只是if語(yǔ)句的一部分,在程序中else必須與if配對(duì),共同組成一條if-else語(yǔ)句。
if(表達(dá)式)
語(yǔ)句1;[else
語(yǔ)句2;]返回本講目錄2)if-else語(yǔ)句的執(zhí)行過程首先計(jì)算緊跟在if后面圓括號(hào)內(nèi)表達(dá)式的值。如果表達(dá)式的值為非零,執(zhí)行if子句,然后跳過else子句,去執(zhí)行if語(yǔ)句后的下一條語(yǔ)句;如果表達(dá)式的值為零,跳過if子句,去執(zhí)行else子句,接著去執(zhí)行if語(yǔ)句后的下一條語(yǔ)句。返回本講目錄3)說明(1)if后面圓括號(hào)中的表達(dá)式,可以是任意合法的C++表達(dá)式(如邏輯表達(dá)式、關(guān)系表達(dá)式、算術(shù)表達(dá)式、賦值表達(dá)式等),也可以是任意類型的數(shù)據(jù)(如整型、實(shí)型、字符型等)。(2)無(wú)論是否有else子句,if子句中如果只有一條語(yǔ)句,則此語(yǔ)句后的分號(hào)不能省略。標(biāo)準(zhǔn)if語(yǔ)句的流程示意圖如圖3-1所示。返回本講目錄圖3-1標(biāo)準(zhǔn)if語(yǔ)句的流程示意圖返回本講目錄二、復(fù)合if語(yǔ)句【實(shí)例3-3】
從鍵盤上輸入一個(gè)成績(jī)(小數(shù)),輸出這個(gè)分?jǐn)?shù)對(duì)應(yīng)的等級(jí)。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下,如果成績(jī)不在0~100之間則輸出錯(cuò)誤信息。用復(fù)合if語(yǔ)句實(shí)現(xiàn)該功能。點(diǎn)擊打開【實(shí)例3-3】源程序。返回本講目錄調(diào)試運(yùn)行程序,輸入幾個(gè)區(qū)間的分?jǐn)?shù)進(jìn)行測(cè)試:當(dāng)輸入分?jǐn)?shù)為89時(shí),程序運(yùn)行結(jié)果如下:當(dāng)輸入分?jǐn)?shù)為42時(shí),程序運(yùn)行結(jié)果如下:當(dāng)輸入分?jǐn)?shù)為-53時(shí),程序運(yùn)行結(jié)果如下:返回本講目錄2.if語(yǔ)句的復(fù)合形式1)復(fù)合if語(yǔ)句的定義格式
if(表達(dá)式1)
語(yǔ)句1;elseif(表達(dá)式2)
語(yǔ)句2;…elseif(表達(dá)式n)
語(yǔ)句n;else
語(yǔ)句n+1;返回本講目錄2)復(fù)合if語(yǔ)句的執(zhí)行過程首先計(jì)算表達(dá)式1的值,若表達(dá)式的值為“真”(表達(dá)式具有非0值),則執(zhí)行語(yǔ)句1;否則繼續(xù)判斷表達(dá)式2,若表達(dá)式的值為“真”,則執(zhí)行語(yǔ)句2;否則繼續(xù)判斷下一個(gè)條件,……直到最后前面n個(gè)條件都不成立時(shí),執(zhí)行else后面的語(yǔ)句n+1。注意:語(yǔ)句n能執(zhí)行的條件是前n-1個(gè)條件都不成立并且條件
n成立。所以在書寫復(fù)合if語(yǔ)句的各個(gè)條件時(shí),注意不要將各條件重疊。返回本講目錄圖3-2復(fù)合if語(yǔ)句的流程圖返回本講目錄三、if語(yǔ)句的嵌套3.if語(yǔ)句的嵌套1)嵌套的概念在if語(yǔ)句中,語(yǔ)句1和語(yǔ)句2本身也可以是if語(yǔ)句,此時(shí)稱為if語(yǔ)句的嵌套。2)嵌套的格式if語(yǔ)句可以內(nèi)嵌在if子句中,又可以內(nèi)嵌在else子句中。返回本講目錄例如:if()if()
語(yǔ)句1;else內(nèi)嵌if
語(yǔ)句2;elseif()
語(yǔ)句3;else內(nèi)嵌if
語(yǔ)句4;
注意:C++的語(yǔ)法規(guī)定,else子句總是與前面最近的未曾配對(duì)(不帶else)的if組成一對(duì)。返回本講目錄四、switch語(yǔ)句【實(shí)例3-4】
設(shè)計(jì)一個(gè)程序,用switch語(yǔ)句實(shí)現(xiàn)由鍵盤輸入一個(gè)成績(jī)(小數(shù)),輸出該成績(jī)的等級(jí)。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下。如果成績(jī)不在0~100之間則輸出錯(cuò)誤信息。用switch語(yǔ)句實(shí)現(xiàn)該功能。返回本講目錄程序分析:(1)定義score變量,存放由鍵盤輸入的學(xué)生成績(jī);(2)輸入學(xué)生成績(jī)賦給變量score;(3)判斷輸入成績(jī)的區(qū)間,如果不在0~100之間,則成績(jī)錯(cuò)誤,給出提示信息;如果成績(jī)?cè)?~100之間,再根據(jù)學(xué)生score整除10得到其十位上的數(shù)字,確定該成績(jī)范圍,并輸出其等級(jí)。這是因?yàn)閟witch語(yǔ)句中的case后面的常量只能是整型或字符型常量,不能是小數(shù),所以就得將各成績(jī)范圍變成一個(gè)整型常量,再進(jìn)行判斷。如80~89之中的數(shù)字的十位都是8,其他范圍數(shù)據(jù)也類似。所以將輸入的成績(jī)score先取整后再整除10,就可得到該數(shù)的十位數(shù)。返回本講目錄調(diào)試運(yùn)行結(jié)果:點(diǎn)擊打開【實(shí)例3-4】源程序。當(dāng)輸入分?jǐn)?shù)為94時(shí),程序運(yùn)行結(jié)果如下:返回本講目錄5.switch語(yǔ)句(多分支選擇語(yǔ)句)1)switch語(yǔ)句的定義格式switch(常量表達(dá)式){case常量值1:語(yǔ)句組1;[break;]case常量值2:語(yǔ)句組2;[break;]…………case常量值n:語(yǔ)句組n;[break;]default:語(yǔ)句組n+1;[break;]}case與其后的常量之間必須有空格返回本講目錄2)switch語(yǔ)句的執(zhí)行過程switch語(yǔ)句又稱為開關(guān)語(yǔ)句,語(yǔ)句的執(zhí)行過程如下:程序執(zhí)行至switch語(yǔ)句首先對(duì)括號(hào)內(nèi)的表達(dá)式進(jìn)行計(jì)算,然后按順序找出某個(gè)與常量值相匹配的case,以此作為入口,執(zhí)行case語(yǔ)句后面的各個(gè)語(yǔ)句組,直到遇到break或switch語(yǔ)句的右花括號(hào)終止語(yǔ)句。如果沒有任何一個(gè)case能與表達(dá)式值相匹配,則執(zhí)行default語(yǔ)句后的語(yǔ)句組,若default及其后語(yǔ)句組省略,則不執(zhí)行switch中任何語(yǔ)句組,而繼續(xù)執(zhí)行下面的程序。例如,在【實(shí)例3-4】中第11~19行就是一個(gè)switch語(yǔ)句。返回本講目錄練一練【練習(xí)3-2】從鍵盤上輸入一個(gè)數(shù)學(xué)四則運(yùn)算表達(dá)式(a+b、a-b、a*b或a/b),要求計(jì)算出該表達(dá)式的值。解:(1)程序分析如下:根據(jù)題意,應(yīng)該設(shè)兩個(gè)整型變量a和b,再設(shè)一個(gè)存放運(yùn)算符的字符型變量ch,然后根據(jù)ch的值來進(jìn)行相應(yīng)的運(yùn)算,將結(jié)果輸出即可。(2)源程序如下:
點(diǎn)擊打開【練習(xí)3-2】源程序。(3)運(yùn)行程序,輸入表達(dá)式:5+3,程序運(yùn)行結(jié)果如下:返回本講目錄第六講循環(huán)語(yǔ)句一、while循環(huán)二、do-while語(yǔ)句三、for循環(huán)語(yǔ)句練一練返回本章目錄一、while循環(huán)【實(shí)例3-5】設(shè)計(jì)一個(gè)程序,用while循環(huán)語(yǔ)句實(shí)現(xiàn)1~100自然數(shù)的和。程序分析:(1)定義變量sum和i,累計(jì)和變量sum賦初值0,循環(huán)次數(shù)i賦初值1。返回本講目錄(2)首先判斷條件i<=100是否為真,如果為真則執(zhí)行循環(huán)語(yǔ)句如:sum+=i;++;,執(zhí)行完再判斷條件,當(dāng)條件為真繼續(xù)執(zhí)行循環(huán)體,條件為假跳出該循環(huán)。(3)輸出累計(jì)和結(jié)果sum。編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-5】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄1.while循環(huán)語(yǔ)句1)while語(yǔ)句的基本形式while是C++的關(guān)鍵字。while后圓括號(hào)中的表達(dá)式,可以是C++中任意合法的表達(dá)式,由它來控制循環(huán)體是否執(zhí)行。while(表達(dá)式)循環(huán)體返回本講目錄2)while語(yǔ)句的執(zhí)行過程計(jì)算while后圓括號(hào)中表達(dá)式的值,當(dāng)值為非0時(shí),執(zhí)行循環(huán)體語(yǔ)句,執(zhí)行完后再次判斷表達(dá)式的值,當(dāng)值為非0時(shí),繼續(xù)執(zhí)行循環(huán)體;當(dāng)值為0時(shí),退出循環(huán)。while語(yǔ)句的程序流程圖如圖3-3所示。圖3-3while語(yǔ)句的程序流程圖返回本講目錄3)使用while語(yǔ)句應(yīng)注意的問題(1)循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括號(hào)括起來,以復(fù)合語(yǔ)句的形式出現(xiàn)。如果不用花括號(hào),則while語(yǔ)句的范圍只到while的表達(dá)式后面第一個(gè)分號(hào)處。(2)在循環(huán)體中應(yīng)該有使循環(huán)趨向于結(jié)束的語(yǔ)句。如無(wú)此語(yǔ)句,循環(huán)將永不結(jié)束。返回本講目錄二、do-while語(yǔ)句【實(shí)例3-6】設(shè)計(jì)一個(gè)程序,用do-while循環(huán)語(yǔ)句實(shí)現(xiàn)1~100自然數(shù)的和。程序分析①定義變量sum和i,累計(jì)和變量sum賦初值0,循環(huán)次數(shù)i賦初值1。②首先執(zhí)行do后循環(huán)體語(yǔ)句:sum+=i;i++;,然后判斷while后的條件i<=100是否為真,如果為真繼續(xù)執(zhí)行循環(huán)體,條件為假跳出該循環(huán)。所以循環(huán)語(yǔ)句至少執(zhí)行一次。③輸出累計(jì)和結(jié)果sum。返回本講目錄編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-6】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄2.do-While循環(huán)語(yǔ)句1)do-While語(yǔ)句的基本形式2)do-while語(yǔ)句的執(zhí)行過程(1)執(zhí)行do后面循環(huán)體中的語(yǔ)句。(2)計(jì)算while后圓括號(hào)中表達(dá)式的值。當(dāng)值為非0時(shí),轉(zhuǎn)去執(zhí)行步驟(1);當(dāng)值為0時(shí),結(jié)束do-while循環(huán)。do{循環(huán)體}while(表達(dá)式);此處的分號(hào)不能省略返回本講目錄do-while與while循環(huán)之間的重要區(qū)別:while循環(huán)控制出現(xiàn)在循環(huán)體之前,只有當(dāng)while后面表達(dá)式的值為非0時(shí),才可能執(zhí)行循環(huán)體;在do-while構(gòu)成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然后再求表達(dá)式的值,因此,無(wú)論表達(dá)式的值是0還是非0,循環(huán)體至少執(zhí)行一次。返回本講目錄do-while語(yǔ)句的流程圖如圖3-4所示。3)do-while語(yǔ)句的使用說明(1)do是C++的關(guān)鍵字,必須和while聯(lián)合使用。(2)do-while循環(huán)由do開始,至while結(jié)束。(3)while后圓括號(hào)中的表達(dá)式可以是C++中任意合法的表達(dá)式,由它控制循環(huán)是否執(zhí)行。(4)按語(yǔ)法,在do和while之間的循環(huán)體只能是一條可執(zhí)行語(yǔ)句;若循環(huán)體內(nèi)需要多個(gè)語(yǔ)句,應(yīng)該用大括號(hào)括起來,組成復(fù)合語(yǔ)句。圖3-4do-while語(yǔ)句的程序流程圖返回本講目錄三、for循環(huán)語(yǔ)句for循環(huán)語(yǔ)句結(jié)構(gòu)簡(jiǎn)潔,使用方便,由for語(yǔ)句構(gòu)成的循環(huán)按指定的次數(shù)執(zhí)行循環(huán)體,它在循環(huán)體中使用一個(gè)循環(huán)變量,每重復(fù)一次后,循環(huán)變量的值會(huì)自動(dòng)增加或減少?!緦?shí)例3-7】設(shè)計(jì)一個(gè)程序,用for循環(huán)語(yǔ)句實(shí)現(xiàn)1~100自然數(shù)的和。返回本講目錄程序分析:(1)定義變量sum和i,累計(jì)和變量sum賦初值0,循環(huán)次數(shù)i賦初值1;(2)在for循環(huán)中,先執(zhí)行括號(hào)內(nèi)表達(dá)式1,再加上i=1,然后再判斷表達(dá)式2,再加上i<=100是否成立,如果成立則執(zhí)行循環(huán)體語(yǔ)句sum+=i;,執(zhí)行完后再執(zhí)行for括號(hào)內(nèi)表達(dá)式3,再加上i++,執(zhí)行完后再判斷表達(dá)式2是否成立,如果成立繼續(xù)執(zhí)行循環(huán)體,不成立則跳出該循環(huán)。(3)輸出累計(jì)和結(jié)果sum。返回本講目錄編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-7】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄3.for循環(huán)語(yǔ)句1)for語(yǔ)句的基本形式for是C++的關(guān)鍵字,其后的圓括號(hào)中通常含有三個(gè)表達(dá)式,各表達(dá)式之間用“;”隔開。這三個(gè)表達(dá)式可以是任意形式的表達(dá)式,通常主要用于for循環(huán)的控制。緊跟在for之后的循環(huán)體在語(yǔ)法上要求是一條語(yǔ)句;若在循環(huán)體內(nèi)需要多條語(yǔ)句,應(yīng)該用大括號(hào)括起來組成復(fù)合語(yǔ)句。for(賦初值語(yǔ)句;條件表達(dá)式;自增(減)語(yǔ)句)循環(huán)體返回本講目錄for語(yǔ)句的流程圖如圖3-5所示。2)for語(yǔ)句的執(zhí)行過程(1)執(zhí)行“賦初值語(yǔ)句”為循環(huán)體變量賦初值(注意,該語(yǔ)句在整個(gè)循環(huán)中只在開始時(shí)執(zhí)行一次)。(2)判斷“條件”是否成立:若其值為非0,轉(zhuǎn)至步驟(3);若其值為0,轉(zhuǎn)至步驟(5)。(3)執(zhí)行一次for循環(huán)體。(4)執(zhí)行“自增(減)語(yǔ)句”;轉(zhuǎn)向步驟(2)。(5)結(jié)束循環(huán),執(zhí)行for循環(huán)之后的語(yǔ)句。圖3-5for語(yǔ)句的程序流程圖返回本講目錄3)for語(yǔ)句的使用說明(1)for語(yǔ)句中的表達(dá)式可以部分或全部省略,但兩個(gè)“;”不可省略。例如:for(;;)cout<<"*";其中三個(gè)表達(dá)式均被省略,但因缺少條件判斷,循環(huán)將會(huì)無(wú)限制地執(zhí)行,而形成無(wú)限循環(huán)(通常稱為死循環(huán))。(2)for后括號(hào)中的表達(dá)式可以是任意有效的C++表達(dá)式。例如:for(sum=0,i=1;i<=100;sum=sum+i,i++){…}注意其中表達(dá)式1和表達(dá)式3都是一個(gè)逗號(hào)表達(dá)式。返回本講目錄注意:C++中的for語(yǔ)句書寫靈活,功能較強(qiáng)。在for后的圓括號(hào)中,允許出現(xiàn)各種形式的與循環(huán)控制無(wú)關(guān)的表達(dá)式,雖然這在語(yǔ)法上是合法的,但這樣會(huì)降低程序的可讀性。建議初學(xué)者在編寫程序時(shí),在for后面的圓括號(hào)內(nèi)僅含有能對(duì)循環(huán)進(jìn)行控制的表達(dá)式,其他操作盡量放在循環(huán)體內(nèi)完成。返回本講目錄練一練【練習(xí)3-3】打印乘法九九表。解:(1)程序分析如下:采用雙重循環(huán)語(yǔ)句來實(shí)現(xiàn)此功能。外重循環(huán)變量i值為從1到9,內(nèi)重循環(huán)變量j值范圍為從1到i,這樣每行輸出為i1到ii的所有結(jié)果,整個(gè)程序?qū)崿F(xiàn)乘法九九表的功能。(2)源程序如下:
點(diǎn)擊打開【練習(xí)3-3】源程序。(3)程序運(yùn)行結(jié)果如下:返回本講目錄第七講嵌套循環(huán)及流程轉(zhuǎn)向語(yǔ)句一、循環(huán)語(yǔ)句的嵌套二、goto語(yǔ)句
三、break語(yǔ)句四、continue語(yǔ)句練一練返回本章目錄一、循環(huán)語(yǔ)句的嵌套【實(shí)例3-8】百錢百雞問題:假設(shè)1只公雞賣5文錢,1只母雞賣3文錢,3只小雞賣1文錢,如果用100文錢買100只雞,問公雞、母雞和小雞各占多少只?程序分析:因?yàn)橐还灿?00只雞,所以假設(shè)公雞、母雞和小雞的數(shù)量為i、j和k,因?yàn)楣u每只5文,所以100文錢最多能買20只公雞,同理,100文錢最多能買33只母雞,又因?yàn)橐还沧疃酁?00只雞,所以小雞的數(shù)量最多為100,所以i的值為0~20,j的值為0~33,k的值為0~100,用三重循環(huán)判斷i、j、k是否符合條件。返回本講目錄因?yàn)橐还矠?00只雞,則有等式i+j+k==100成立;又因?yàn)橐还彩?00文錢買100只雞,所以每種雞的數(shù)量乘以其所花的錢數(shù)之和為100文錢,即有5*i+3*j+k/3==100成立。又因?yàn)镃++中的“/”兩側(cè)都是整數(shù)時(shí),運(yùn)算為整除,結(jié)果不準(zhǔn)確,而3只小雞賣1文錢,所以小雞的數(shù)量k應(yīng)該是3的倍數(shù),所以有k%3==0成立。這三個(gè)等式同時(shí)成立時(shí)的i、j和k值即為符合條件的三種雞的數(shù)量。返回本講目錄編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-8】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄1.循環(huán)語(yǔ)句的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。不管使用哪種語(yǔ)句構(gòu)成的嵌套循環(huán)結(jié)構(gòu),在執(zhí)行時(shí)都是從外層循環(huán)開始,一次次執(zhí)行內(nèi)層循環(huán)。一般來說,外層執(zhí)行一次,內(nèi)層循環(huán)執(zhí)行n次。例如,【實(shí)例3-8】中第8~12行語(yǔ)句為三層嵌套的循環(huán)體。在這個(gè)循環(huán)體中,i從0~20一共執(zhí)行21次,當(dāng)i=0時(shí),j從0~33執(zhí)行34次,當(dāng)j=0時(shí),k從0~100執(zhí)行101次。所以,當(dāng)i=0執(zhí)行一次時(shí),最內(nèi)層循環(huán)k的執(zhí)行語(yǔ)句會(huì)執(zhí)行3434次,程序一共執(zhí)行最內(nèi)層循環(huán)體語(yǔ)句21*34*101=72114次。所以,對(duì)于嵌套循環(huán)來說,應(yīng)該盡量采用嵌套層數(shù)少,循環(huán)次數(shù)少的算法,才能節(jié)省時(shí)間,提高算法的效率。返回本講目錄二、goto語(yǔ)句 【實(shí)例3-9】從鍵盤輸入任意個(gè)整數(shù),當(dāng)輸入值為0時(shí)結(jié)束累加,求輸入數(shù)據(jù)的和,要求使用goto語(yǔ)句實(shí)現(xiàn)程序。程序分析:設(shè)兩個(gè)整型變量x和sum,x存儲(chǔ)每次輸入的整數(shù),sum存儲(chǔ)這些整數(shù)的累加和。使用if語(yǔ)句判斷輸入數(shù)據(jù)是否是-1,如果不是,則將x加到sum上,然后使用goto語(yǔ)句跳轉(zhuǎn)到輸入x的語(yǔ)句L1處重新輸入x值;如果輸入為0,則跳轉(zhuǎn)到輸出和的語(yǔ)句L2處,實(shí)現(xiàn)多次輸入整數(shù)并求其累加和的功能。注意,累加和中不包括結(jié)束條件x=0的值。返回本講目錄編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-9】源程序。程序運(yùn)行結(jié)果如下:返回本講目錄2.goto語(yǔ)句1)goto語(yǔ)句形式其中,語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示,它的定名規(guī)則與變量名相同。例如,在【實(shí)例3-9】中,L1、L2就是標(biāo)號(hào)。一般來說,如果要使用goto語(yǔ)句構(gòu)成循環(huán),一般是用if語(yǔ)句和goto語(yǔ)句配合使用的。當(dāng)if語(yǔ)句條件為真時(shí)無(wú)條件轉(zhuǎn)到標(biāo)號(hào)所在程序行進(jìn)行執(zhí)行。goto語(yǔ)句標(biāo)號(hào);返回本講目錄2)語(yǔ)句執(zhí)行流程在程序執(zhí)行過程中,如果遇到goto語(yǔ)句,則程序執(zhí)行流程無(wú)條件地轉(zhuǎn)向語(yǔ)句標(biāo)號(hào)后的語(yǔ)句繼續(xù)執(zhí)行。3)說明(1)語(yǔ)句標(biāo)號(hào)僅僅對(duì)goto語(yǔ)句有效,對(duì)其他語(yǔ)句不影響。(2)同一個(gè)程序中,不允許有同名標(biāo)號(hào)。(3)goto語(yǔ)句通常與條件語(yǔ)句配合使用,可用來實(shí)現(xiàn)條件轉(zhuǎn)移、構(gòu)成循環(huán)、跳出循環(huán)體等功能。注意:因?yàn)間oto語(yǔ)句是無(wú)條件轉(zhuǎn)向語(yǔ)句,所以會(huì)破壞結(jié)構(gòu)化程序設(shè)計(jì)的結(jié)構(gòu),容易引起程序結(jié)構(gòu)混亂,所以不提倡過多地使用該語(yǔ)句。返回本講目錄三、break語(yǔ)句【實(shí)例3-10】從鍵盤輸入任意個(gè)整數(shù),對(duì)其求和;當(dāng)輸入值為0時(shí),結(jié)束輸入。要求用break語(yǔ)句實(shí)現(xiàn)其功能。程序分析:在本程序中,利用永久循環(huán)(也就是循環(huán)條件永遠(yuǎn)為真)輸入數(shù)據(jù),在遇到用戶輸入值為0時(shí),就通過break語(yǔ)句中斷循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語(yǔ)句。這樣,即使循環(huán)的條件永遠(yuǎn)為真,也可以在循環(huán)體中結(jié)束該循環(huán)。返回本講目錄編寫程序代碼:
點(diǎn)擊打開【實(shí)例3-10】源程序。程序運(yùn)行結(jié)果如下(同【實(shí)例3-9】的運(yùn)行結(jié)果):返回本講目錄3.break循環(huán)語(yǔ)句1)break語(yǔ)句的基本形式2)break語(yǔ)句的使用說明(1)只能在循環(huán)體內(nèi)和switch語(yǔ)句體使用break語(yǔ)句。(2)當(dāng)break出現(xiàn)在循環(huán)體中的switch語(yǔ)句體內(nèi)時(shí),其作用只是跳出該switch語(yǔ)句。當(dāng)break出現(xiàn)在循環(huán)體中,但并不在switch語(yǔ)句內(nèi)時(shí),則在執(zhí)行break后,跳出本層循環(huán)體。例如,在【實(shí)例3-10】中,就在while循環(huán)中使用if語(yǔ)句來判斷,當(dāng)條
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年青海貨運(yùn)從業(yè)資格證考試試卷題庫(kù)
- 小學(xué)英語(yǔ)命題試卷創(chuàng)意
- 小學(xué)英語(yǔ)試卷模式
- 健身館員工合同范本
- 減水劑供貨合同范本
- FOB買賣合同范本
- 美容師初級(jí)習(xí)題庫(kù)及答案
- 工業(yè)鍋爐司爐模考試題與答案
- 個(gè)人年度簡(jiǎn)短的工作總結(jié)
- 中級(jí)電工模擬習(xí)題含參考答案
- 2025年全國(guó)普通話水平測(cè)試50套復(fù)習(xí)題庫(kù)及答案
- 心理戰(zhàn)、法律戰(zhàn)、輿論戰(zhàn)
- 《餐飲感動(dòng)服務(wù)》課件
- 肩袖損傷課件
- 骨科手術(shù)術(shù)后切口護(hù)理技巧培訓(xùn)課程
- DB3207-T 1047-2023 羊肚菌-豆丹綜合種養(yǎng)技術(shù)規(guī)程
- 修補(bǔ)墻面的報(bào)告范文
- 2025年全國(guó)煤礦企業(yè)安全管理人員考試題庫(kù)(含答案)
- 《義務(wù)教育語(yǔ)文課程標(biāo)準(zhǔn)(2022年版)》知識(shí)培訓(xùn)
- 《中小學(xué)校食品安全與膳食經(jīng)費(fèi)管理工作指引》知識(shí)培訓(xùn)
- 成品油運(yùn)輸 投標(biāo)方案(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論