計算機基本程序設(shè)計_第1頁
計算機基本程序設(shè)計_第2頁
計算機基本程序設(shè)計_第3頁
計算機基本程序設(shè)計_第4頁
計算機基本程序設(shè)計_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選課件1第三章第三章 基本程序設(shè)計基本程序設(shè)計 計算機程序設(shè)計基礎(chǔ)與計算機程序設(shè)計基礎(chǔ)與Visual C+Visual C+ 前一頁 休息精選課件2教學(xué)目標(biāo)教學(xué)目標(biāo) 1掌握順序、選擇、循環(huán)三種基本控制結(jié)掌握順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)的程序?qū)崿F(xiàn)方法;構(gòu)的程序?qū)崿F(xiàn)方法;2了解基本程序調(diào)試技能。了解基本程序調(diào)試技能。 前一頁 休息精選課件3教學(xué)內(nèi)容教學(xué)內(nèi)容 1順序結(jié)構(gòu)的程序?qū)崿F(xiàn)語句; 2一路、兩路、多路分支選擇結(jié)構(gòu)的實現(xiàn)語句; 3循環(huán)結(jié)構(gòu)的實現(xiàn)語句;4循環(huán)控制語句的作用;5程序調(diào)試過程。 前一頁 休息精選課件4例 “雞兔同籠問題”:在一個籠子里養(yǎng)著雞與兔,但不知其中雞有多少只,兔有多少只。只

2、知道雞和兔的總數(shù)是a,雞與兔的總腳數(shù)是b,求雞與兔各有多少只。思路分析:思路分析:假設(shè)有假設(shè)有x只雞和只雞和y只兔,則根據(jù)已知條件可列只兔,則根據(jù)已知條件可列出如下方程組:出如下方程組: x+y=a 2x+4y=b對該方程組做進一步的轉(zhuǎn)換可得:對該方程組做進一步的轉(zhuǎn)換可得:順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件5源程序清單:源程序清單:#includeusing namespace std;void main( ) int a,b,x,y;couta;coutb;x=(4*a-b)/2;y=(b-2*a)/2;cout雞的數(shù)量為雞的數(shù)量為:xendl;cout兔的數(shù)量為兔的數(shù)量為:yendl;

3、 順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件6編程技巧編程技巧 1在順序結(jié)構(gòu)的程序設(shè)計中,主函數(shù)在順序結(jié)構(gòu)的程序設(shè)計中,主函數(shù)main的函數(shù)的函數(shù)體的執(zhí)行順序為語句的書寫順序。即寫在前面體的執(zhí)行順序為語句的書寫順序。即寫在前面的語句先執(zhí)行,寫在后面的語句后執(zhí)行,且每的語句先執(zhí)行,寫在后面的語句后執(zhí)行,且每條語句都會被執(zhí)行一次;條語句都會被執(zhí)行一次;2組成順序結(jié)構(gòu)的常見語句有:組成順序結(jié)構(gòu)的常見語句有:(1)說明語句,包括變量、常量定義;)說明語句,包括變量、常量定義;(2)表達式語句,由表達式(一般為賦值表達)表達式語句,由表達式(一般為賦值表達式)加分號構(gòu)成;式)加分號構(gòu)成;(3)輸入)輸入/輸

4、出流語句;輸出流語句;(4)復(fù)合語句,由)復(fù)合語句,由 括起來的多條語句組成;括起來的多條語句組成;(5)空語句,由獨立的分號構(gòu)成)空語句,由獨立的分號構(gòu)成順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件7例例 輸入一位同學(xué)的三門課程考試成輸入一位同學(xué)的三門課程考試成績,計算該同學(xué)的平均成績,要求輸績,計算該同學(xué)的平均成績,要求輸出數(shù)據(jù)的形式如下例:出數(shù)據(jù)的形式如下例:科目科目 成績成績英語英語 67程序設(shè)計程序設(shè)計 78.5大學(xué)物理大學(xué)物理 89該生的平均成績?yōu)椋涸撋钠骄煽優(yōu)椋?8.17思路分析:思路分析:本程序要求的計算內(nèi)容很簡單,重點在輸本程序要求的計算內(nèi)容很簡單,重點在輸出數(shù)據(jù)的位置控制上:

5、要求前四行輸出的兩列出數(shù)據(jù)的位置控制上:要求前四行輸出的兩列信息要對齊,且最后計算出的平均成績的小數(shù)信息要對齊,且最后計算出的平均成績的小數(shù)部分只顯示兩位數(shù)字。部分只顯示兩位數(shù)字。順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件8源程序清單:源程序清單:#include iostream#include iomanipusing namespace std;void main( )float score1,score2,score3,average; cout請輸入三門課程的考試成績:請輸入三門課程的考試成績:score1score2score3; average=(score1+score2+scor

6、e3)/3;coutsetw(10)科目科目setw(12)成績成績endl;coutsetw(10)英語英語setw(12)score1endl;coutsetw(10)程序設(shè)計程序設(shè)計setw(12)score2endl;coutsetw(10)大學(xué)物理大學(xué)物理setw(12)score3endl;coutfixed; cout.precision(2);cout該生的平均成績?yōu)椋涸撋钠骄煽優(yōu)椋篴verageendl; 順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件9編程技巧編程技巧1 1對于輸出的多列信息對齊的問題可以通過控制輸出的對于輸出的多列信息對齊的問題可以通過控制輸出的數(shù)據(jù)所占的位置

7、寬度來實現(xiàn)。實現(xiàn)方法為:在輸出該數(shù)數(shù)據(jù)所占的位置寬度來實現(xiàn)。實現(xiàn)方法為:在輸出該數(shù)據(jù)前先通過據(jù)前先通過setw(n)setw(n)來設(shè)置該數(shù)據(jù)輸出時所占的最少位置來設(shè)置該數(shù)據(jù)輸出時所占的最少位置寬度寬度n n。使用時需注意;。使用時需注意; (1 1)setw(n)setw(n)所設(shè)置的位置寬度只對其后輸出的一所設(shè)置的位置寬度只對其后輸出的一個數(shù)據(jù)生效;個數(shù)據(jù)生效; (2 2)使用)使用setw(n)setw(n)時需包含頭文件時需包含頭文件iomanipiomanip;2 2該設(shè)置也可以通過該設(shè)置也可以通過cout.width(n);cout.width(n);來實現(xiàn)。即語句來實現(xiàn)。即語句c

8、outsetw(10)coutsetw(10)科目科目setw(12)setw(12)成績成績endl;endl;可更換為:可更換為:cout.width(10);cout.width(10);coutcout科目科目;cout.width(12);cout.width(12);coutcout成績成績;注意:此方法不再需要文件包含注意:此方法不再需要文件包含#include iomanip#include iomanip。順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件10編程技巧編程技巧3在輸出一個浮點數(shù)時,系統(tǒng)會在科學(xué)記數(shù)法在輸出一個浮點數(shù)時,系統(tǒng)會在科學(xué)記數(shù)法和小數(shù)點法兩種形式里按照一定的規(guī)則(

9、通常在整和小數(shù)點法兩種形式里按照一定的規(guī)則(通常在整數(shù)部分超過數(shù)部分超過6位時采用科學(xué)記數(shù)法)自動選擇采用哪位時采用科學(xué)記數(shù)法)自動選擇采用哪種形式輸出。若想規(guī)定不管什么樣的浮點數(shù)均使用種形式輸出。若想規(guī)定不管什么樣的浮點數(shù)均使用小數(shù)點形式輸出,可采用小數(shù)點形式輸出,可采用coutfixed;語句來實現(xiàn)語句來實現(xiàn)4以小數(shù)點形式輸出浮點數(shù)時,系統(tǒng)默認輸出以小數(shù)點形式輸出浮點數(shù)時,系統(tǒng)默認輸出的浮點數(shù)的整數(shù)和小數(shù)部分的總位數(shù)最多只有的浮點數(shù)的整數(shù)和小數(shù)部分的總位數(shù)最多只有6位數(shù)位數(shù)字。若想規(guī)定輸出的浮點數(shù)的小數(shù)部分的位數(shù)可通字。若想規(guī)定輸出的浮點數(shù)的小數(shù)部分的位數(shù)可通過過cout.precisio

10、n(n);語句來實現(xiàn)。其中語句來實現(xiàn)。其中n代表小數(shù)部代表小數(shù)部分的位數(shù)(若數(shù)據(jù)的實際位數(shù)超過分的位數(shù)(若數(shù)據(jù)的實際位數(shù)超過n,則按,則按4舍舍5入規(guī)入規(guī)則處理后輸出;若數(shù)據(jù)的實際位數(shù)少于則處理后輸出;若數(shù)據(jù)的實際位數(shù)少于n,則其余位,則其余位數(shù)用數(shù)用0補齊)。補齊)。順序結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件11例例 從鍵盤輸入一個數(shù),計算并從鍵盤輸入一個數(shù),計算并輸出該數(shù)的絕對值輸出該數(shù)的絕對值思路分析:思路分析:對于對于0和正數(shù)而言,其絕對值就是該數(shù)和正數(shù)而言,其絕對值就是該數(shù)本身;對于負數(shù)而言,其絕對值為該數(shù)與本身;對于負數(shù)而言,其絕對值為該數(shù)與-1相乘的結(jié)果。相乘的結(jié)果。本題算法的實質(zhì)就

11、是判斷什么情況下需本題算法的實質(zhì)就是判斷什么情況下需要執(zhí)行要執(zhí)行“該數(shù)與該數(shù)與-1相乘相乘”這個操作,同時意這個操作,同時意味者該操作對應(yīng)的語句雖然書寫在了程序中,味者該操作對應(yīng)的語句雖然書寫在了程序中,但在某種情況下是可能不會被執(zhí)行的。但在某種情況下是可能不會被執(zhí)行的。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件12源程序清單源程序清單#includeusing namespace std;void main( ) float m;coutm;if(m0)m=-1*m;cout你輸入數(shù)據(jù)的絕對值為你輸入數(shù)據(jù)的絕對值為:mendl;選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件13編程技巧編程技巧1在程序中

12、,如果書寫的某些語句只有在程序中,如果書寫的某些語句只有在特定的條件成立的情況下才會被執(zhí)行時,需在特定的條件成立的情況下才會被執(zhí)行時,需要用到要用到“一路分支選擇結(jié)構(gòu)一路分支選擇結(jié)構(gòu)”來實現(xiàn),相應(yīng)的來實現(xiàn),相應(yīng)的語句為語句為“if語句語句”,其格式如下:,其格式如下: if(條件條件)語句;語句;(1)簡單的條件通過包含關(guān)系運算符的)簡單的條件通過包含關(guān)系運算符的關(guān)系表達式來表示,關(guān)系表達式來表示,C+語言的關(guān)系運算符見語言的關(guān)系運算符見表表3.1。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件14關(guān)系運算符關(guān)系運算符運算符運算優(yōu)先級=小于小于等于大于大于等于1111= =!=等于不等于22選擇結(jié)構(gòu)程

13、序設(shè)計 前一頁 休息精選課件15編程技巧編程技巧 若滿足條件,關(guān)系表達式的值為布爾值若滿足條件,關(guān)系表達式的值為布爾值true;若不滿足條件,關(guān)系表達式的值為布爾;若不滿足條件,關(guān)系表達式的值為布爾值值false ; 關(guān)系運算符若為兩字符,在書寫時兩字符關(guān)系運算符若為兩字符,在書寫時兩字符間不能加空格;間不能加空格; =與與=的區(qū)別:如的區(qū)別:如x=1為條件表達式,判為條件表達式,判斷斷x是否等于是否等于1。x=1為賦值表達式,將數(shù)值為賦值表達式,將數(shù)值1存存入變量入變量x中;中; 兩個浮點數(shù)之間一般不用兩個浮點數(shù)之間一般不用=來判斷是否相來判斷是否相等;等; 關(guān)系運算符的優(yōu)先級低于算術(shù)運算符

14、,高關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,高于賦值運算符。于賦值運算符。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件16編程技巧編程技巧(2 2)ifif語句的內(nèi)嵌語句只能是一條,即該語句的內(nèi)嵌語句只能是一條,即該處語句多于一條時,需要將這些語句用處語句多于一條時,需要將這些語句用 括括起來構(gòu)成復(fù)合語句;起來構(gòu)成復(fù)合語句;(3 3)ifif語句的執(zhí)行過程:首先測試條件是語句的執(zhí)行過程:首先測試條件是否成立,成立則執(zhí)行條件后的內(nèi)嵌語句,否則否成立,成立則執(zhí)行條件后的內(nèi)嵌語句,否則結(jié)束結(jié)束ifif語句,執(zhí)行其后續(xù)語句。語句,執(zhí)行其后續(xù)語句。練習(xí):將鍵盤輸入的兩個數(shù)按從大到小的練習(xí):將鍵盤輸入的兩個數(shù)按從大到

15、小的順序存儲并輸出。(兩種交換數(shù)據(jù)的方法)順序存儲并輸出。(兩種交換數(shù)據(jù)的方法)選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件17例例輸入一個年份,判斷該年是否輸入一個年份,判斷該年是否為閏年,并輸出判斷結(jié)果為閏年,并輸出判斷結(jié)果 源程序清單:#include using namespace std;void main( ) int year;coutyear;if(year%4=0&year%100!=0|year%400=0)coutyear is a leap yearendl;elsecoutyear“ is not a leap year”endl;選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選

16、課件18 選擇結(jié)構(gòu)程序設(shè)計(1)在程序中,如果在特定的條件成立的情況下執(zhí)行一種操作,不成立的情況下執(zhí)行另一種操作,則需要用到“兩路分支選擇結(jié)構(gòu)”來實現(xiàn),相應(yīng)的C+語句是“ifelse語句”,其具體格式為:if(if(條件條件) )語句語句1 1;elseelse語句語句2 2; 內(nèi)嵌語句1、2都只能是一條語句; 條件成立時執(zhí)行內(nèi)嵌語句1,否則執(zhí)行內(nèi)嵌語句2 前一頁 休息精選課件19運算符運算優(yōu)先級!邏輯非1&邏輯與2|邏輯或3(2)如果條件比較復(fù)雜,需要由多個關(guān)系表達式按照一定的邏輯關(guān)系共同構(gòu)成,則需要使用邏輯運算符,C+語言的邏輯運算符見表3.2選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件

17、20由邏輯運算符構(gòu)成的邏輯表達式的運算結(jié)果也是布爾值; 邏輯非(!)放在一個條件表達式的前面,用于表示該條件的相反條件;邏輯與(&)運算符的前后各書寫一個條件,只有前后的兩個條件都成立時,由邏輯與表示的條件才成立;邏輯或(|)運算符的前后同樣需要各書寫一個條件,但它只要求這兩個條件中有任何一個條件成立就可以了;邏輯非運算符的優(yōu)先級與算術(shù)運算的+和-平級,邏輯與和邏輯或運算符的優(yōu)先級低于關(guān)系運算符,高于賦值運算符。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件21思路分析一:假設(shè)用a,b,c分別表示輸入的三個數(shù),則三個數(shù)中的最大值必然是兩個數(shù)中的較大值。因此可以先在a和b中找出一個較大值出來;然

18、后再用這個較大值與剩下的那個數(shù)c進行比較,其中的較大者即為三個數(shù)中的最大者。在本算法中,首先要判斷a和b誰大:在a大的情況下,又要判斷a和c誰大;在a小的情況下,又要判斷b和c誰大。因此在實現(xiàn)“判斷a和b誰大”的兩路分支選擇結(jié)構(gòu)的執(zhí)行部分將包含另外一個選擇結(jié)構(gòu)。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件22源程序清單一源程序清單一 #includeusing namespace std;void main( ) double a,b,c,max;coutabc;if(a=b)if(ac)max=a;elsemax=c;elseif(b=c)max=b;elsemax=c;cout“max=”max

19、endl;選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件23編程技巧編程技巧 (1)在)在ifelse語句中,如果在條件成立時語句中,如果在條件成立時和(或)條件不成立時需要根據(jù)另一個條件的和(或)條件不成立時需要根據(jù)另一個條件的成立情況來進一步?jīng)Q定該執(zhí)行什么操作,則需成立情況來進一步?jīng)Q定該執(zhí)行什么操作,則需要用到嵌套的選擇結(jié)構(gòu)。即在條件成立時執(zhí)行要用到嵌套的選擇結(jié)構(gòu)。即在條件成立時執(zhí)行的語句部分和(或)條件不成立時執(zhí)行的語的語句部分和(或)條件不成立時執(zhí)行的語句部分中書寫另一個選擇結(jié)構(gòu)的實現(xiàn)語句;句部分中書寫另一個選擇結(jié)構(gòu)的實現(xiàn)語句;(2)如果被嵌套的內(nèi)層選擇結(jié)構(gòu)是一路分)如果被嵌套的內(nèi)層選擇結(jié)構(gòu)是

20、一路分支選擇結(jié)構(gòu)的實現(xiàn)語句(支選擇結(jié)構(gòu)的實現(xiàn)語句(if語句),此時即使語句),此時即使該部分只有這一條語句,也需要將其用該部分只有這一條語句,也需要將其用 括起括起來,以隔離內(nèi)外層選擇結(jié)構(gòu)。來,以隔離內(nèi)外層選擇結(jié)構(gòu)。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件24思路分析二:思路分析二:假設(shè)用假設(shè)用a,b,c分別表示輸入的三個分別表示輸入的三個數(shù)。首先判斷數(shù)。首先判斷a是否為最大值:如果是,是否為最大值:如果是,就直接輸出判斷結(jié)果;如果不是,則最就直接輸出判斷結(jié)果;如果不是,則最大值必然在大值必然在b和和c中,此時再判斷中,此時再判斷b和和c的的大小關(guān)系就可以得出整個判斷結(jié)果。大小關(guān)系就可以得出整個

21、判斷結(jié)果。選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件25源程序清單二源程序清單二 #includeusing namespace std;void main( ) double a,b,c,max;coutabc;if(a=b&a=c)max=a;else if(b=c)max=b; else max=c;coutmax=maxb?c:de?f:g后后m變量中的值為變量中的值為7。 前一頁 休息精選課件28源程序清單三源程序清單三 #includeusing namespace std;void main( )double a,b,c,max;coutabc;if(ab)max=(ac)?

22、a:c;elsemax=(bc)?b:c;coutmax=maxendl;練習(xí):習(xí)題練習(xí):習(xí)題10 前一頁 休息精選課件29例例由鍵盤輸入一個四則運算式子,由鍵盤輸入一個四則運算式子,輸出該運算式子和運算結(jié)果輸出該運算式子和運算結(jié)果思路分析:假設(shè)輸入的數(shù)據(jù)分別為x、y,運算符號為op,本題要解決的問題實質(zhì)上就是根據(jù)運算符號op是什么,來決定對x、y兩個數(shù)據(jù)采用什么運算。源程序清單一:選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件30#includeusing namespace std;void main( )double x,y;char op;cout請輸入算式:請輸入算式:xopy;if(op=

23、+)coutx+y=x+yendl; else if(op=-)coutx-y=x-yendl;else if(op=*)coutx*y=x*yendl;else if(op=/)if(y=0.0)cout除式的分母為零除式的分母為零!endl;elsecoutx/y=x/yendl;elsecout“非四則運算非四則運算!”endl;選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件31#includeusing namespace std;void main( ) double x,y;char op;cout請輸入算式:xopy;switch(op)case +:coutx+y=x+yendl; b

24、reak; case -:coutx-y=x-yendl; break; case *:coutx*y=x*yendl; break; case /:if(y=0.0)cout除式的分母為零!endl;elsecoutx/y=x/yendl;break;default:cout“非四則運算!”endl;選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件32 選擇結(jié)構(gòu)程序設(shè)計本題是典型的“多路分支選擇結(jié)構(gòu)”,程序清單一采用嵌套的ifelse語句來實現(xiàn),程序清單二采用C+的switch開關(guān)分支語句來實現(xiàn),該語句的格式為: switch(switch(條件條件) )casecase常量表達式常量表達式1 1:語

25、句序列語句序列1 1break;break;casecase常量表達式常量表達式2 2:語句序列語句序列2 2break;break;defaultdefault:語句序列:語句序列n n 前一頁 休息精選課件33(1 1)switchswitch后的(后的( )中書寫的是需要進行比較的運)中書寫的是需要進行比較的運算式子,該式子的計算結(jié)果必須是整型或字符型數(shù)據(jù);算式子,該式子的計算結(jié)果必須是整型或字符型數(shù)據(jù);(2 2)switchswitch語句的語句的 中主要由若干個中主要由若干個casecase分句構(gòu)成,分句構(gòu)成,每個每個casecase關(guān)鍵字后面書寫一個整型或字符型常量。如果關(guān)鍵字后面

26、書寫一個整型或字符型常量。如果switchswitch后的(后的( )中的計算式子的計算結(jié)果等于該常量,)中的計算式子的計算結(jié)果等于該常量,則從該則從該casecase分句開始執(zhí)行,故分句開始執(zhí)行,故switchswitch語句也稱為開關(guān)語語句也稱為開關(guān)語句;句;(3 3)switchswitch語句找到執(zhí)行起始點后,將一直執(zhí)行到語句找到執(zhí)行起始點后,將一直執(zhí)行到 為止。若想提前結(jié)束運行,可在需要執(zhí)行的最后一條語為止。若想提前結(jié)束運行,可在需要執(zhí)行的最后一條語句后加上句后加上breakbreak語句;語句;(4 4)如果)如果switchswitch后的(后的( )中的計算式子的計算結(jié)果)中的

27、計算式子的計算結(jié)果與所有與所有casecase分句后的常量都不相等,則語句的執(zhí)行起始分句后的常量都不相等,則語句的執(zhí)行起始點為點為defaultdefault。若沒有。若沒有defaultdefault分句,則不執(zhí)行任何操作分句,則不執(zhí)行任何操作選擇結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件34算法描述:算法描述: 例例 計算計算0n之間所有整數(shù)之和,之間所有整數(shù)之和,其中其中n為正整數(shù),由鍵盤輸入為正整數(shù),由鍵盤輸入 循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件35源程序清單源程序清單 #includeusing namespace std;void main( ) int n,i,sum;coutn;i

28、=1; sum=0;while(i=n)sum=sum+i;i=i+1; cout1與與n之間所有整數(shù)之和為:之間所有整數(shù)之和為:sumendl;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件36 (1)在程序中,如果書寫的某些語句可)在程序中,如果書寫的某些語句可能需要被重復(fù)執(zhí)行,就要用到循環(huán)結(jié)構(gòu)。這些能需要被重復(fù)執(zhí)行,就要用到循環(huán)結(jié)構(gòu)。這些可能被重復(fù)執(zhí)行的語句稱為該循環(huán)結(jié)構(gòu)的循環(huán)可能被重復(fù)執(zhí)行的語句稱為該循環(huán)結(jié)構(gòu)的循環(huán)體。循環(huán)體是否被重復(fù)執(zhí)行以及循環(huán)體被重復(fù)體。循環(huán)體是否被重復(fù)執(zhí)行以及循環(huán)體被重復(fù)執(zhí)行的次數(shù)取決于一個條件,該條件稱為循環(huán)執(zhí)行的次數(shù)取決于一個條件,該條件稱為循環(huán)結(jié)構(gòu)的循環(huán)條件;結(jié)構(gòu)的

29、循環(huán)條件;(2)當(dāng)型循環(huán)結(jié)構(gòu)的實現(xiàn)語句之一為)當(dāng)型循環(huán)結(jié)構(gòu)的實現(xiàn)語句之一為“while語句語句”,其語句格式為:,其語句格式為:while(條件條件)語句語句Page 36循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件37循環(huán)結(jié)構(gòu)中條件的表示方法與選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)中條件的表示方法與選擇結(jié)構(gòu)相同;相同;循環(huán)體超過一條時,應(yīng)寫成復(fù)合語句;循環(huán)體超過一條時,應(yīng)寫成復(fù)合語句;while語句的執(zhí)行過程:首先判斷循環(huán)條語句的執(zhí)行過程:首先判斷循環(huán)條件:若條件成立,則執(zhí)行一次循環(huán)體,然后重件:若條件成立,則執(zhí)行一次循環(huán)體,然后重復(fù)復(fù)“判斷判斷執(zhí)行執(zhí)行”的過程。直到該循環(huán)條件不的過程。直到該循環(huán)條件不再成立時退出循環(huán)

30、結(jié)構(gòu);再成立時退出循環(huán)結(jié)構(gòu);為避免為避免“死循環(huán)死循環(huán)”,循環(huán)體中應(yīng)含有修,循環(huán)體中應(yīng)含有修正與循環(huán)條件相關(guān)數(shù)據(jù)的語句。正與循環(huán)條件相關(guān)數(shù)據(jù)的語句。練習(xí):計算練習(xí):計算n之間所有奇數(shù)之和(兩方法)之間所有奇數(shù)之和(兩方法)計算并輸出一個正整數(shù)的反序數(shù)計算并輸出一個正整數(shù)的反序數(shù)Page 37循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件38例例 計算計算n!,其中!,其中n為正整數(shù),為正整數(shù),由鍵盤輸入由鍵盤輸入 源程序清單:源程序清單:#include using namespace std;void main( )int mul=1,j,n;coutn;for(j=1;j=n;j+)mul*=j;

31、coutmul=mulendl;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件39編程技巧編程技巧(1)當(dāng)型循環(huán)也可用)當(dāng)型循環(huán)也可用for語句來實現(xiàn),語法格式為:語句來實現(xiàn),語法格式為:for(表達式表達式1;表達式表達式2;表達式表達式3)語句語句表達式表達式1:進入循環(huán)前執(zhí)行一次,作用是為有關(guān):進入循環(huán)前執(zhí)行一次,作用是為有關(guān)變量賦初值;表達式變量賦初值;表達式2:用于控制循環(huán)的條件;表達:用于控制循環(huán)的條件;表達式式3:用于修正有關(guān)變量的值;表達式:用于修正有關(guān)變量的值;表達式1和表達式和表達式3可可以是逗號表達式以是逗號表達式表達式表達式1、2、3都可以省略,但分號不能省略。都可以省略,但分

32、號不能省略。省略表達式省略表達式1表示不需要賦初值(該任務(wù)可在表示不需要賦初值(該任務(wù)可在for語句語句前完成);省略表達式前完成);省略表達式2表示循環(huán)條件永遠為真;省表示循環(huán)條件永遠為真;省略表達式略表達式3表示沒有修正部分(循環(huán)體內(nèi)應(yīng)有相關(guān)修表示沒有修正部分(循環(huán)體內(nèi)應(yīng)有相關(guān)修正);省略表達式正);省略表達式1和和3的的for語句等效于語句等效于while語句。語句。循環(huán)體仍只能是一條語句;循環(huán)體仍只能是一條語句;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件40編程技巧編程技巧 forfor語句的執(zhí)行過程:首先求解表達式語句的執(zhí)行過程:首先求解表達式1 1,然,然后判斷表達式后判斷表達式2 2

33、是否成立,如果成立,則執(zhí)行循環(huán)是否成立,如果成立,則執(zhí)行循環(huán)體,并求解表達式體,并求解表達式3 3 ,之后重復(fù),之后重復(fù)“判斷判斷執(zhí)行執(zhí)行求求解解”的過程,直到循環(huán)條件不成立時退出循環(huán)。的過程,直到循環(huán)條件不成立時退出循環(huán)。(2 2)whilewhile和和forfor語句實現(xiàn)的都是當(dāng)型循環(huán)結(jié)構(gòu),語句實現(xiàn)的都是當(dāng)型循環(huán)結(jié)構(gòu),因此可以相互轉(zhuǎn)換,如本例中的因此可以相互轉(zhuǎn)換,如本例中的forfor語句可以用語句可以用whilewhile語句改寫成如下形式:語句改寫成如下形式:j=1;while(j=n) mul*=j; j+;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件41編程技巧編程技巧(3)通過對比可

34、以發(fā)現(xiàn),)通過對比可以發(fā)現(xiàn),for語句在實現(xiàn)結(jié)語句在實現(xiàn)結(jié)果上比果上比while語句更簡潔,因此使用更普遍。語句更簡潔,因此使用更普遍。而且通過而且通過for語句(語句( )中的三個表達式很容易)中的三個表達式很容易計算出循環(huán)的執(zhí)行次數(shù)(如通過本例中的計算出循環(huán)的執(zhí)行次數(shù)(如通過本例中的j=1;j=n;j+部分可以直接推算出循環(huán)的次數(shù)部分可以直接推算出循環(huán)的次數(shù)為為n次),使得次),使得for語句在已知循環(huán)次數(shù)的場景語句在已知循環(huán)次數(shù)的場景下應(yīng)用尤為突出。下應(yīng)用尤為突出。練習(xí):計算練習(xí):計算1!+2!+3!+n!Page 41循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件42寫出程序運行結(jié)果寫出程序運

35、行結(jié)果#includeusing namespace std;void main( )int i,a(0);for(i=1;i=6;i+)switch(i%3) case 0: i-;case 1: a-=2; break;case 2: i+=1;default: +a;couta“,”iendl;運行結(jié)果:運行結(jié)果:-2,7 前一頁 休息精選課件43例例計算計算e= 1+(1/1!)+(1/2!)+ (1/n!) + 的近似值,的近似值,1/n!10-7時停止計算時停止計算 算法描述:算法描述:循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件44源程序清單源程序清單 #includeusing na

36、mespace std;void main( ) double e=1.0, u=1.0;int n=1;doe=e+u;n=n+1;u=u/n;while(u=1.0e-7);coute=e,(n=n)endl;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件45編程技巧編程技巧(1 1)本例采用直到型循環(huán)結(jié)構(gòu)。注意:直)本例采用直到型循環(huán)結(jié)構(gòu)。注意:直到型循環(huán)必須保證循環(huán)體至少執(zhí)行一次。其實到型循環(huán)必須保證循環(huán)體至少執(zhí)行一次。其實現(xiàn)語句格式為:現(xiàn)語句格式為:dodo語句語句whilewhile(條件)(條件); ; do-while do-while語句實現(xiàn)的是直到型循環(huán)結(jié)構(gòu),語句實現(xiàn)的是直到型循環(huán)

37、結(jié)構(gòu),但其判斷條件有所改變:循環(huán)條件成立時繼續(xù)但其判斷條件有所改變:循環(huán)條件成立時繼續(xù)執(zhí)行下次循環(huán)體;執(zhí)行下次循環(huán)體; 循環(huán)體仍為一條語句;循環(huán)體仍為一條語句;循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件46 do-while語句的執(zhí)行過程:首先執(zhí)行一次循環(huán)體,然后重復(fù)“判斷執(zhí)行”的過程,直到循環(huán)條件不成立時退出循環(huán);注意:循環(huán)條件位于while關(guān)鍵字后的圓括號( )中,且圓括號后面需要加分號。練習(xí):計算兩個正整數(shù)計算兩個正整數(shù)m m和和n n的最大公約數(shù)的最大公約數(shù)(用當(dāng)型和直到型循環(huán)結(jié)構(gòu)分別實現(xiàn))(用當(dāng)型和直到型循環(huán)結(jié)構(gòu)分別實現(xiàn))編程技巧編程技巧循環(huán)結(jié)構(gòu)程序設(shè)計 前一頁 休息精選課件47例例 判

38、斷正整數(shù)判斷正整數(shù)m是否為素數(shù)是否為素數(shù) 算法描述:算法描述: Page 47循環(huán)控制語句 前一頁 休息精選課件48源程序清單源程序清單#includeusing namespace std;void main( ) int m,j;cout請輸入一整數(shù):請輸入一整數(shù):m;for(j=2;jm;j+)if(m%j=0)break;if(jm) coutm不是素數(shù)。不是素數(shù)。 endl;else coutm是素數(shù)。是素數(shù)。 endl;循環(huán)控制語句 前一頁 休息精選課件49編程技巧編程技巧 (1)如果在循環(huán)體中根據(jù)需要想退出循環(huán),)如果在循環(huán)體中根據(jù)需要想退出循環(huán),可以使用可以使用break語句。

39、其作用是只要程序執(zhí)行該語句。其作用是只要程序執(zhí)行該語句,則結(jié)束整個循環(huán)結(jié)構(gòu);語句,則結(jié)束整個循環(huán)結(jié)構(gòu);(2)退出循環(huán)結(jié)構(gòu)后,如何知道在執(zhí)行循環(huán))退出循環(huán)結(jié)構(gòu)后,如何知道在執(zhí)行循環(huán)結(jié)構(gòu)時是否執(zhí)行過結(jié)構(gòu)時是否執(zhí)行過break語句呢?那就是判斷循語句呢?那就是判斷循環(huán)條件是否依然成立:若循環(huán)條件依然成立,說環(huán)條件是否依然成立:若循環(huán)條件依然成立,說明循環(huán)結(jié)構(gòu)是在執(zhí)行循環(huán)體的過程中執(zhí)行了明循環(huán)結(jié)構(gòu)是在執(zhí)行循環(huán)體的過程中執(zhí)行了break語句而被提前終止退出的。相反,如果循語句而被提前終止退出的。相反,如果循環(huán)條件不成立,說明循環(huán)結(jié)構(gòu)是在通過循環(huán)條件環(huán)條件不成立,說明循環(huán)結(jié)構(gòu)是在通過循環(huán)條件不成立而退出的

40、,同時意味著在執(zhí)行循環(huán)體的過不成立而退出的,同時意味著在執(zhí)行循環(huán)體的過程中一直沒有執(zhí)行程中一直沒有執(zhí)行break語句。語句。循環(huán)控制語句 前一頁 休息精選課件50例例找出并輸出找出并輸出100150之間和之間和400450之間能被之間能被9整除的數(shù)整除的數(shù) 源程序清單:源程序清單:#includeusing namespace std;void main( ) int n;for(n=100;n150&n400)continue;if(n%9=0) coutn ;cout150&n400成立時將執(zhí)行continue語句,這就表示其后的循環(huán)體部分if(n%9=0)在本次循環(huán)時不會

41、執(zhí)行。 循環(huán)控制語句 前一頁 休息精選課件52例例編程求編程求100到到999之間的回文數(shù),之間的回文數(shù),回文數(shù)是指正讀與反讀都一樣的數(shù)回文數(shù)是指正讀與反讀都一樣的數(shù)算法分析:算法分析:本題實質(zhì)是要找出所有的三位回文數(shù)。對于本題實質(zhì)是要找出所有的三位回文數(shù)。對于一個三位數(shù)而言,如果它是回文數(shù),則其百位數(shù)一個三位數(shù)而言,如果它是回文數(shù),則其百位數(shù)與個位數(shù)必然相同(取值范圍為與個位數(shù)必然相同(取值范圍為19),而此時),而此時對應(yīng)的十位數(shù)可以是對應(yīng)的十位數(shù)可以是09中的任意一個數(shù)。如果中的任意一個數(shù)。如果用變量用變量i表示其個位數(shù),則該變量需要在表示其個位數(shù),則該變量需要在19之之間進行循環(huán)。同時

42、,如果用變量間進行循環(huán)。同時,如果用變量j表示該數(shù)的十表示該數(shù)的十位數(shù),則對于任何一個個位數(shù)位數(shù),則對于任何一個個位數(shù)i而言,變量而言,變量j都需都需要在要在09之間進行變化。這就意味著在一個循環(huán)之間進行變化。這就意味著在一個循環(huán)的循環(huán)體中需要包含另外一個循環(huán)。的循環(huán)體中需要包含另外一個循環(huán)。循環(huán)的嵌套 前一頁 休息精選課件53算法描述算法描述 Page 53循環(huán)的嵌套 前一頁 休息精選課件54源程序清單源程序清單 #includeusing namespace std;void main( )int n,i,j;for(i=1;i=9;i+)for(j=0;j=9;j+)n=i*100+j*

43、10+i;coutnendl;循環(huán)的嵌套 前一頁 休息精選課件55編程技巧編程技巧 (1)一個循環(huán)結(jié)構(gòu)的循環(huán)體中包含另一個循環(huán)結(jié))一個循環(huán)結(jié)構(gòu)的循環(huán)體中包含另一個循環(huán)結(jié)構(gòu),稱為循環(huán)結(jié)構(gòu)的嵌套;構(gòu),稱為循環(huán)結(jié)構(gòu)的嵌套;(2)在嵌套的循環(huán)結(jié)構(gòu)中,內(nèi)外層循環(huán)可以使用)在嵌套的循環(huán)結(jié)構(gòu)中,內(nèi)外層循環(huán)可以使用相同的循環(huán)語句來實現(xiàn)(如本例都采用相同的循環(huán)語句來實現(xiàn)(如本例都采用for語句來實語句來實現(xiàn)),也可以使用不同的循環(huán)語句來實現(xiàn);現(xiàn)),也可以使用不同的循環(huán)語句來實現(xiàn);(3)在嵌套的循環(huán)結(jié)構(gòu)中,外層循環(huán)結(jié)構(gòu)每執(zhí)行)在嵌套的循環(huán)結(jié)構(gòu)中,外層循環(huán)結(jié)構(gòu)每執(zhí)行一次,內(nèi)層循環(huán)結(jié)構(gòu)將執(zhí)行整輪循環(huán)(如本例中,一次,

44、內(nèi)層循環(huán)結(jié)構(gòu)將執(zhí)行整輪循環(huán)(如本例中,當(dāng)外層循環(huán)變量當(dāng)外層循環(huán)變量i為為1時,內(nèi)層循環(huán)將循環(huán)一輪,即變時,內(nèi)層循環(huán)將循環(huán)一輪,即變量量j將依次取值將依次取值09;當(dāng)外層循環(huán)的變量;當(dāng)外層循環(huán)的變量i變化為變化為2后,后,內(nèi)層循環(huán)又將循環(huán)一輪);內(nèi)層循環(huán)又將循環(huán)一輪);()內(nèi)外層循環(huán)的循環(huán)控制變量不能同名。()內(nèi)外層循環(huán)的循環(huán)控制變量不能同名。練習(xí):找出練習(xí):找出m、n之間所有的回文數(shù)之間所有的回文數(shù)計算計算m、n之間所有素數(shù)之和之間所有素數(shù)之和循環(huán)的嵌套 前一頁 休息精選課件56閱讀程序閱讀程序#include using namespace std;void main()int j=1,sum=0;loop:sum+=j;j+;if(j=100)goto loop;coutsum=sumendl; 前一頁 休息精選課件57編程技巧編程技巧(1)goto語句的功能是控制程序語句的功能是控制程序的流程無條件轉(zhuǎn)移到標(biāo)號指定的語句處的流程無條件轉(zhuǎn)移到標(biāo)號指定的語句處繼續(xù)執(zhí)行。由于繼續(xù)執(zhí)行。由于goto語句常常會破壞程語句常常會破壞程序的結(jié)構(gòu)性,除非某些特殊情況,一般序的結(jié)構(gòu)性,除非某些特殊情況,一般不用不用goto語句。語句。(2)goto語句的使用范圍僅局限語句的使用范

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論