版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、,本章導(dǎo)讀 本章從實(shí)例分析著手,使讀者了解并掌握C語言三種基本流程控制結(jié)構(gòu):順序、選擇、循環(huán)結(jié)構(gòu) ,加深對(duì)C語言程序開發(fā)設(shè)計(jì)過程的感性認(rèn)識(shí),強(qiáng)化培養(yǎng)編程思路,為進(jìn)一步進(jìn)行C語言程序設(shè)計(jì)打下基礎(chǔ)。, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本書目錄,第3章 結(jié)構(gòu)化程序設(shè)計(jì),本章主要知識(shí)點(diǎn) (1) 順序結(jié)構(gòu)及程序設(shè)計(jì)。 (2)選擇結(jié)構(gòu)及程序設(shè)計(jì)。 (3)循環(huán)結(jié)構(gòu)及程序設(shè)計(jì)。 (4)結(jié)構(gòu)化程序設(shè)計(jì)方法、編程思路與綜合實(shí)訓(xùn),第3章 結(jié)構(gòu)化程序設(shè)計(jì), C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本章導(dǎo)讀,3.2 選擇結(jié)構(gòu)程序設(shè)計(jì),3.3 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),3.4 結(jié)構(gòu)化程序設(shè)
2、計(jì)方法與綜合實(shí)訓(xùn),3.1 順序結(jié)構(gòu)程序設(shè)計(jì), C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本章目錄,3.1.2 順序結(jié)構(gòu)語句,3.1.3 程序?qū)嵱?xùn),3.1.1 順序結(jié)構(gòu)的C程序?qū)嵗?3.1 順序結(jié)構(gòu)程序設(shè)計(jì),3.1.1 C程序?qū)嵗? C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,C程序?qū)嵗?【例3.1】編程實(shí)現(xiàn):輸入一個(gè)長方形的二邊長,求長方形的面積并輸出。 /*程序名為l3_1.cpp。*/ #include stdio.h main() float a,b,s; scanf(%f%f, ,返回本節(jié)目錄,程序運(yùn)行情況如下: 輸入: 3.0 4.0 輸出: Th
3、e area of rectangle is 12.00 . 這個(gè)程序?qū)儆陧樞蚪Y(jié)構(gòu),程序是按照書寫的順序自上而下一步步執(zhí)行,程序中的每一條語句都被執(zhí)行一次,且僅能被執(zhí)行一次。,【例3.1】編程, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.1.2 順序結(jié)構(gòu)語句1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),C語言的順序結(jié)構(gòu)語句可以分為四大類: 1.表達(dá)式語句 表達(dá)式的后面加一個(gè)分號(hào)就構(gòu)成了一個(gè)語句,例如:sum=a+b; 。事實(shí)上,C語言中有使用價(jià)值的表達(dá)式語句主要有3種: (1)賦值語句。 例如: sum=a+b; (2)自動(dòng)增1、減1運(yùn)算符構(gòu)成的表達(dá)式語句。例如: i
4、+; (3)逗號(hào)表達(dá)式語句。例: x=1,y=2; 2.空語句 語句僅有一個(gè)分號(hào)“;”,它表示什么也不做。一般和后面章節(jié)所講循環(huán)語句結(jié)合使用起到延時(shí)作用。 3. 復(fù)合語句 由和把一些變量定義和執(zhí)行語句組合在一起,稱之為復(fù)合語句,又稱語句塊。復(fù)合語句的語句形式如下: 語句1;語句2;語句n;,返回本節(jié)目錄,返回本節(jié)目錄,例如:int a=0,b=1,sum; sum=a+b; printf(%d,sum); 【注意】與C語言中的其他語句不同,復(fù)合語句不以分號(hào)作為結(jié)束符,若復(fù)合語句的后面出現(xiàn)分號(hào),那不是該復(fù)合語句的組成成分,而是單獨(dú)的一個(gè)空語句。在復(fù)合語句起始部分可以有變量定義,如:int a=0
5、,b=1,sum;,也可以沒有。復(fù)合語句的內(nèi)可能會(huì)有多個(gè)語句,但在語法上把它整體上視為一條語句看待。 4.函數(shù)調(diào)用語句 由一個(gè)函數(shù)調(diào)用加上一個(gè)分號(hào)組成一個(gè)語句,如: scanf(%d%d,3.1.2 順序結(jié)構(gòu)語句2, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境), C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),C程序?qū)嵗?【例3.2】由鍵盤輸入兩個(gè)整數(shù)給變量a和b,然后輸出a和b,在交換a和b中的值后,再輸出a和b,驗(yàn)證兩個(gè)變量中的數(shù)值是否正確地進(jìn)行了交換。 /*程序名為l3_2.cpp。*/ #include stdio.h main() int a,b,t; printf(En
6、ter a and b:n); scanf(%d%d, 程序運(yùn)行情況如下: Enter a and b: 123 456 a=123,b=456 a=456,b=123,返回本節(jié)目錄,3.1.3 程序?qū)嵱?xùn)【例3.2】,返回本節(jié)目錄,注意:在程序中交換兩個(gè)變量a 和b的值,不可以簡單地用: a=b;b=a;兩條語句來實(shí)現(xiàn)。假設(shè)a 和b的值分別為23和78,賦值語句a=b;將使a的值變?yōu)?8,接下來的b=a;使b的值變?yōu)?8,這樣,a和b的值最終都變?yōu)?8。所以在本例中引入了中間變量t,用來臨時(shí)存放a的值,這樣才能完成變量a和b的正確交換。,【例3. 3】輸入一個(gè)double類型的數(shù),使該數(shù)保留小
7、數(shù)點(diǎn)后兩位,對(duì)第三位小數(shù)進(jìn)行四舍五入處理,然后輸出此數(shù),以便驗(yàn)證處理是否正確。 /*程序名為l3_3.cpp。*/ #include stdio.h main() double x; printf(Input x:n); scanf(%lf,3.1.3 程序?qū)嵱?xùn)【例3.3】, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.1.3 程序?qū)嵱?xùn)【例3. 3】, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,printf(1) x=%fn,x); /*將x輸出*/ x=x*100; x=x+0.5; x=(int)x; x=x/100; /*將x擴(kuò)大100倍,加上0.5之
8、后取整,再縮小100倍*/ printf(2) x=%fn,x); /*將四舍五入后的x輸出*/ 程序運(yùn)行情況如下: Input x:3.14159 則輸出的結(jié)果為: (1) x=3.141590 (2) x=3.140000,3.1.3 程序?qū)嵱?xùn)【例3.4】, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,【例3.4】從鍵盤上輸入一大寫英文字母,要求改用相應(yīng)的小寫字母輸出。 /*程序名為l3_4.cpp。*/ #include stdio.h main() char c1,c2; scanf(%c, ,程序運(yùn)行時(shí): 輸入:B 輸出: The upper case is B
9、 . The lower case is b .,3.2 選擇結(jié)構(gòu)程序設(shè)計(jì), C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.2.1 選擇結(jié)構(gòu)的C程序?qū)嵗?3.2.2 if 語句,3.2.3 switch 語句,3.2.4 程序?qū)嵱?xùn),返回本章目錄,3.2.1 選擇結(jié)構(gòu)的 C程序?qū)嵗? C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,【例3.5】請(qǐng)輸入兩個(gè)整數(shù)a,b,比較a+b和ab哪個(gè)大,輸出判斷結(jié)果。 /*程序名為l3_5.cpp。*/ #include stdio.h main() int a,b,s1,s2; printf(請(qǐng)輸入兩個(gè)整數(shù)a,b:); scanf
10、(%d,%d, /*語句B*/ , C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),運(yùn)行結(jié)果為: 請(qǐng)輸入兩個(gè)整數(shù)a,b:2,3 (a+b)s2,則執(zhí)行語句A(跳過語句B不執(zhí)行),否則,就跳過語句A執(zhí)行語句B??梢奿f語句在程序中起到了改變語句執(zhí)行順序的作用。if語句就是我們?cè)谙乱还?jié)中要介紹的條件分支語句。,3.2.1 選擇結(jié)構(gòu)的 C程序?qū)嵗Y(jié)果,返回本節(jié)目錄,3.2.2 if 語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),. if語句的一般形式,返回本節(jié)目錄,2. if-else中的復(fù)合語句,3. 非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式,4. if語句的嵌套,. if語句的一般
11、形式1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),1if語句的一般形式: if語句有兩種形式: (1)不含else子句的if語句 語句形式如下: if() 例如if(ab)t=a;a=b;b=t; 其中,if是C語言的關(guān)鍵字,表達(dá)式兩側(cè)的圓括號(hào)不可少,最后是一條語句,稱為if子句。如果在if子句中需要多個(gè)語句,則應(yīng)該使用花括號(hào)把一組語句括起來組成復(fù)合語句,這樣在語法上仍滿足一條語句的要求。 執(zhí)行過程:首先計(jì)算緊跟在if后面一對(duì)圓括號(hào)中的表達(dá)式的值,如果該表達(dá)式的值為非零(“真”),則執(zhí)行其后的if子句,然后去執(zhí)行if語句后的下一個(gè)語句。如果該表達(dá)式的值為零(“假”),則跳過if子句
12、,直接執(zhí)行if語句后的下一個(gè)語句。,返回3.2.2目錄,. if語句的一般形式2, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),(2)含else子句的if語句 語句形式如下: if() else 執(zhí)行過程:首先計(jì)算的值,如果該表達(dá)式的值為非零(真),則執(zhí)行,如果該表達(dá)式的值為零(假),則跳過,直接執(zhí)行,兩者執(zhí)行其一后再去執(zhí)行if語句后的下一個(gè)語句。,返回3.2.2目錄, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),. if語句的一般形式實(shí)例,【例3.6】求分段函數(shù)的值,如果x0, y=2x+1,否則, y=0 。 #include stdio.h main() /*程序名為l3
13、_6.cpp。*/ int x,y; /*變量y存放f(x)的值*/ printf(請(qǐng)輸入x的值:); scanf(%d, ,返回3.2.2目錄,. if語句的一般形式實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),運(yùn)行結(jié)果: 請(qǐng)輸入x的值:3 當(dāng)x=3時(shí),f(x)=7 因?yàn)檩斎離=3,那么x=0為真,所以輸出2*3+1=7。 C語言中有一種特有的條件運(yùn)算符“?:”,我們?cè)谇懊嬲鹿?jié)已作介紹,它在某種程序上可以起到邏輯判斷的作用。本例中的if語句也可用條件運(yùn)算符表達(dá)式實(shí)現(xiàn)如下: y=x=0?2*x+1:0; 但有些判斷不能用條件表達(dá)式完成,或者很繁瑣、表達(dá)不清晰。,返回3.2.2目錄
14、,2. if-else中的復(fù)合語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),2. if-else中的復(fù)合語句,如果兩個(gè)分支中需要執(zhí)行的語句不止一條,必須用“”括起來,作為一個(gè)復(fù)合語句使用。若只是一條語句,“”可以省略。 【注意】 (1)if后面的一定要有括號(hào); (2)if和else同屬于一個(gè)if語句,else不能作為語句單獨(dú)使用,它只是if語句的一部分,與if配對(duì)使用,因此程序中不可以沒有if而只有else; (3)只能執(zhí)行與if有關(guān)的語句或者執(zhí)行與else有關(guān)的語句,而不可能同時(shí)執(zhí)行兩者; (4)如果和是非復(fù)合語句,那么該語句一定要以分號(hào)結(jié)束, (5)if語句的表達(dá)式可以是任意
15、類型的C語言的合法的表達(dá)式,但計(jì)算結(jié)果必須為整型、字符型或浮點(diǎn)型之一。,返回3.2.2目錄,3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式,【例3.10】以賦值表達(dá)式為分支條件的實(shí)例。 /*程序名為l3_10.cpp。*/ #includestdio.h main() int s; if(s=2) printf(hello); else printf(error); ,if后面圓括號(hào)中的表示,分支條件的類型不限于邏輯/關(guān)系表達(dá)式,可以是任意的C語言有效表達(dá)式(如賦值表達(dá)式,算術(shù)表達(dá)式等等),因此也可以是
16、作為表達(dá)式特例的常量或變量。,返回3.2.2目錄, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式2,【例3.10】中的條件表達(dá)式是一個(gè)賦值表達(dá)式,并不是判斷s是否等于2。相當(dāng)于if(2)printf(hello);,這是合法的。由于該條件表達(dá)式的值是非零值,恒為真,故本程序的printf(error);無論如何都不會(huì)被執(zhí)行。if語句最終執(zhí)行哪一個(gè)分支,取決于條件表達(dá)式的計(jì)算結(jié)果。同一個(gè)條件的也可以用多種表達(dá)方式。 【例3.11】以變量為分支條件的實(shí)例。 /*程序名為l3_11.cpp。*/ #include stdio.h main() int
17、x,y; scanf(%d,返回3.2.2目錄,3.非關(guān)系、非邏輯表達(dá)式構(gòu)成的條件表達(dá)式3, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),printf(y=%dn,y); 現(xiàn)把程序中if(x)改成if(x!=0),此時(shí)雖然條件表達(dá)式寫法不同,但是完成的功能是相同的。 下面兩種表示方法經(jīng)常使用: if(x)等價(jià)于if(x!=0) if(!x)等價(jià)于if(x=0),返回3.2.2目錄,4. if語句的嵌套1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),在一個(gè)if語句中又包含另一個(gè)if語句,從而構(gòu)成了if語句的嵌套使用。內(nèi)嵌的if語句既可以嵌套在if子句中,也可以嵌套在else子句
18、中。例如:,【例3.12】輸入a,b兩個(gè)整數(shù)的值,比較大小并輸出結(jié)果。 #include stdio.h“ /*程序名為l3_12.cpp。*/ main() int a,b; printf(請(qǐng)輸入a,b:) ; scanf(%d%d, ,返回3.2.2目錄,4. if語句的嵌套2, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),【注意】if語句的嵌套形式不是刻意去追求的,而是在解決問題過程中隨著解決問題的需要而采用的。 if與else的配對(duì)規(guī)則 if語句出現(xiàn)嵌套形式時(shí),C語言規(guī)定:else子句總是和前面最近的不帶else子句的if語句配對(duì),與書寫格式無關(guān)。注意從書寫格式要有層次感(好的
19、程序員應(yīng)該養(yǎng)成這一習(xí)慣,以便他人理解你的程序和自己將來的修改)。如果if的數(shù)目和else的數(shù)目相同,從內(nèi)層到外層一一對(duì)應(yīng),不易出錯(cuò)。如果if與else的數(shù)目不一致,為實(shí)現(xiàn)編程者的意圖,必要的時(shí)候必須加,來強(qiáng)制確定配對(duì)關(guān)系。否則,就不能實(shí)現(xiàn)編程者的真正意圖。,返回3.2.2目錄,4. if語句的嵌套實(shí)例1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),【例3.13】寫出下列程序的輸出結(jié)果。 /*程序名為l3_13.cpp。*/ #includestdio.h main() int x=4,y=5,z=2,max; max=x; if(zy) if(zx) max=z; else if(y
20、x) max=y; printf( max=%d,max); 運(yùn)行結(jié)果: max=4,返回3.2.2目錄,4. if語句的嵌套實(shí)例2, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),【例3.14】編寫程序,根據(jù)輸入的學(xué)生成績,給出相應(yīng)的等級(jí)。90分以上的等級(jí)為A,60分以下的等級(jí)為E,其余每10分一個(gè)等級(jí)。程序如下: #includestdio.h main() /*程序名為l3_14.cpp。*/ int g; printf(input g:); scanf(%d, ,返回3.2.2目錄,4. if語句的嵌套實(shí)例3, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),當(dāng)執(zhí)行以上程序時(shí)
21、,首先輸入、輸出學(xué)生的成績,然后進(jìn)入if語句; if語句中的表達(dá)式將依次對(duì)學(xué)生成績進(jìn)行判斷,若能使某 if 后的表達(dá)式值為1,則執(zhí)行與其相應(yīng)的子句,之后便退出整個(gè)if結(jié)構(gòu)。 例如,若輸入的成績?yōu)?8分,首先輸出: g=78 : ,當(dāng)從上至下逐一檢測時(shí),使g=70這一表達(dá)式的值為1,因此在輸出g=78 :之后再輸出C,便退出整個(gè)if結(jié)構(gòu)。 若輸入的成績?yōu)?0分,首先輸出相應(yīng)成績g=30:,其次進(jìn)入相應(yīng)判斷,最后再輸出相應(yīng)等級(jí)E,便退出整個(gè)if結(jié)構(gòu)。,返回3.2.2目錄,3.2.3 switch 語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),. switch語句的一般形式,返回本節(jié)目
22、錄,2. switch語句的執(zhí)行過程,3. switch語句的實(shí)例,1 . switch語句的一般形式, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),1. switch語句的一般形式,switch語句的一般形式是: switch() case : case : case : default: 【說明】: switch語句是關(guān)鍵字,其后面大括號(hào)里括起來的部分稱為 switch語句體。要特別注意必須寫這一對(duì)大括號(hào)。 switch后的運(yùn)算結(jié)果可以是整型、字符型或枚舉型表達(dá)式等,兩邊的括號(hào)不能省略。,返回3.2.3目錄, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),case也是關(guān)鍵字,
23、與其后面合稱為case語句標(biāo)號(hào)。的值在運(yùn)行前必須是確定的,不能改變,因此不能是包含變量的表達(dá)式,而且數(shù)據(jù)類型必須與一致。如: int x=3,y=7, z; switch(z) case 1+2: /*是正確的*/ case x+y: /*是錯(cuò)誤的*/ case和常量之間要有空格,case后面的常量之后有:。 default也是關(guān)鍵字,起標(biāo)號(hào)的作用。代表所有case標(biāo)號(hào)之外的那些標(biāo)號(hào)。default可以出現(xiàn)在語句體中任何標(biāo)號(hào)位置上。在switch語句體中也可以無default標(biāo)號(hào)。 、等,可以是一條語句,也可以是若干語句。 必要時(shí),case 語句標(biāo)號(hào)后的語句可以不寫。,1 . switch語句
24、的一般形式,返回3.2.3目錄,2 . switch語句的執(zhí)行過程, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),2. switch語句的執(zhí)行過程,首先計(jì)算的值,然后在switch語句體內(nèi)尋找與該吻合的case標(biāo)號(hào),如果有與該值相等的標(biāo)號(hào),則執(zhí)行從該標(biāo)號(hào)后開始的各語句,包括在其后的所有case和default語句,直到switch語句體結(jié)束。如果沒有與該值相等的標(biāo)號(hào),并且存在default標(biāo)號(hào),則從default標(biāo)號(hào)后的語句開始執(zhí)行,直到switch語句體結(jié)束。如果沒有與該值相等的標(biāo)號(hào),并且不存在default標(biāo)號(hào),則跳過switch語句體,什么也不執(zhí)行。 在switch語句中使用br
25、eak語句 break語句也稱間斷語句??梢栽诟鱾€(gè)case之后的語句最后加上break語句,每當(dāng)執(zhí)行到break語句時(shí),立即跳出switch語句體。switch語句通??偸呛蚥reak語句聯(lián)合使用,使得switch語句真正起到多個(gè)分支的作用。,返回3.2.3目錄,3 . switch語句的實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3. switch語句的實(shí)例,【例3.17】模擬自動(dòng)飲料機(jī)。按屏幕所示功能,輸入所選擇的合法數(shù)字,輸出可獲得的相應(yīng)飲料名稱。程序如下: /*程序名為l3_17.cpp。*/ #include stdio.h main() int button; pr
26、intf(=自動(dòng)飲料機(jī) =n); printf(1.可口可樂n); printf(2.雪碧n); printf(3.芬達(dá)n); printf(4.百事可樂n); printf(5.非??蓸穘); printf(請(qǐng)按1-5鍵選擇飲料:n); scanf(%d,返回3.2.3目錄,3 . switch語句的實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),switch(button) case 1:printf(n你獲得一聽可口可樂n);break; case 2:printf(n你獲得一聽雪碧n);break; case 3:printf(n你獲得一聽芬達(dá)n);break; case
27、4:printf(n你獲得一聽百事可樂n);break; case 5:printf(n你獲得一聽非??蓸穘);break; default:printf(n非法操作!n);break; 運(yùn)行結(jié)果: =自動(dòng)飲料機(jī)= 1.可口可樂 2.雪碧 3.芬達(dá) 4.百事可樂 5.非常可樂 請(qǐng)按1-5按鈕選擇飲料:3 你獲得一聽芬達(dá),返回3.2.3目錄, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本章目錄,3.3.2 while語句,3.3.3 do-while語句,3.3.1 循環(huán)結(jié)構(gòu)的C程序?qū)嵗?3.3 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),3.3.4 for 語句,3.3.5 循環(huán)的嵌套,3.3.6 bre
28、ak語句和continue語句,3.3.7 程序?qū)嵱?xùn),3.3.1 循環(huán)結(jié)構(gòu)的C程序?qū)嵗? C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),【例3.19】有一張厚度為0.1毫米的紙,假設(shè)它足夠大,重復(fù)將其對(duì)折,問對(duì)折多少次之后,其厚度可以抵達(dá)(再對(duì)折一次就超過)珠穆朗瑪峰的高度?程序如下: main() /*程序名為l3_14.cpp。*/ double h=0.1; int n=0; /* n用來累計(jì)對(duì)折次數(shù)*/ while(h=8848180) h=h*2; n=n+1; printf(對(duì)折次數(shù)為:%d,此時(shí)厚度:%.2fn,n-1,h/2); 重復(fù)對(duì)折一張紙,實(shí)質(zhì)就是厚度乘以2,次數(shù)加
29、1。用順序結(jié)構(gòu)編程為: h=h*2; n=n+1; 這樣的語句一直重復(fù)寫到h滿足題目要求為止。實(shí)際中這類問題,就可用循環(huán)結(jié)構(gòu)編程實(shí)現(xiàn)。本例中,使用的是循環(huán)結(jié)構(gòu)中的while語句。 C語言共有三種類型的循環(huán)語句,while、do-while和for語句。,返回本節(jié)目錄,3.3.2 while語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,1.while語句的一般形式,while() 說明:while語句是C的關(guān)鍵字,其后面的一對(duì)括號(hào)中的,可以是C語言的任意合法表達(dá)式,由它來控制循環(huán)體語句是否執(zhí)行,括號(hào)不能省略??梢允且粭l語句,也可以是多條語句,一般來說循環(huán)體是一條語句時(shí)
30、不用加,如果是多條語句,就一定要加 構(gòu)成復(fù)合語句。其中的語句可以是空語句、表達(dá)式語句或作為循環(huán)體一部分的復(fù)合語句,如果循環(huán)體是一個(gè)空語句,表示不執(zhí)行任何操作(一般用于延時(shí))。,(1)計(jì)算while后一對(duì)括號(hào)中的的值。當(dāng)值為非零時(shí),則執(zhí)行步驟(2);當(dāng)值為零時(shí),則執(zhí)行步驟(3)。 (2)執(zhí)行后,轉(zhuǎn)去執(zhí)行步驟(1)。 (3)退出while循環(huán)。,2.while語句的執(zhí)行過程,while語句實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.while語句實(shí)例,例3.21】用while循環(huán)語句實(shí)現(xiàn)從1加到100,并將結(jié)果打印出來。,/*程序名為l3_21.cpp。*/ #include
31、stdio.h main() / *若sum的值超過int型變量能表示的范圍,則設(shè)置成長整型*/ int sum=0,i=1; while(i=100) sum+=i; i+; printf(其和是 %dn,sum); /*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/ ,運(yùn)行結(jié)果: 其和是5050,返回本節(jié)目錄,do while(); 說明:do是C語言的關(guān)鍵字,必須和while聯(lián)合使用。do-while循環(huán)由do開始,用while結(jié)束;注意,在while結(jié)束后必須有分號(hào),它表示該語句的結(jié)束。其它同while循環(huán)語句。,3.3.3 do-while語句, C語言程序設(shè)計(jì) (Visual
32、 C+ 6.0環(huán)境),1.do-while語句的一般形式,返回本節(jié)目錄,2.do-while語句的執(zhí)行過程,(1)執(zhí)行do后面的。 (2)計(jì)算while后一對(duì)括號(hào)中的的值。當(dāng)值為非零時(shí),轉(zhuǎn)去執(zhí)行步驟(1)。當(dāng)值為零時(shí),則執(zhí)行步驟(3)。 (3)退出while循環(huán)。,運(yùn)行結(jié)果: 其和是5050 在本例中,循環(huán)條件和循環(huán)體以及得到的結(jié)果都是和while循環(huán)一樣的,只是用do-while語句來實(shí)現(xiàn)。,do-while語句實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),3.do-while語句實(shí)例,【例3.23】用do-while語句實(shí)現(xiàn)求1+2+100的和。 #include stdio
33、.h /*程序名為l3_23.cpp。*/ main() int sum=0,i=1; / *若sum的值超過int型變量能表示的范圍,則設(shè)置成長整型*/ do sum+=i; i+; while(i=100); printf(其和是 %dn,sum); /*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/ ,返回本節(jié)目錄,3.3.4 for 語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),for語句是C語言提供的一種在功能上比前面兩種循環(huán)語句更強(qiáng)的一種循環(huán)語句。 for循環(huán)語句格式如下: for(;) 說明:for是C語言的關(guān)鍵字,三個(gè)表達(dá)式之間的必須用分號(hào);隔開。三個(gè)表達(dá)式
34、可以是任意形式的C表達(dá)式,通常主要用于for循環(huán)的控制。一般用于計(jì)算循環(huán)變量初始值,為循環(huán)體是否執(zhí)行的條件,為循環(huán)變量的調(diào)整。的使用同while、do-while循環(huán)語句。for循環(huán)語句的格式還可以表示為: for(;) 在某種情況下,用for語句表示循環(huán),顯得緊湊而清晰。尤其是它能利用自動(dòng)地使循環(huán)變量發(fā)生改變,不像while結(jié)構(gòu)那樣要在循環(huán)體中設(shè)置修正操作。實(shí)際上,for語句中的不僅限于修正循環(huán)變量,而且可以是任何操作。例如前面例題中介紹的求1到100的和,用for語句可以表示為: for(sum=0,i=1;i=n;sum+=i,i+);,返回本節(jié)目錄,1.for語句的一般形式,for 語
35、句的執(zhí)行過程, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,2.for語句的執(zhí)行過程,首先計(jì)算。 求的值;若其值為非零,則轉(zhuǎn)去執(zhí)行;若的值為零,則轉(zhuǎn)去執(zhí)行,結(jié)束for語句。 執(zhí)行一次for循環(huán)體。 求解,轉(zhuǎn)執(zhí)行。 結(jié)束循環(huán),執(zhí)行循環(huán)之后的語句。,3.for語句實(shí)例,【例3.25】用for語句實(shí)現(xiàn)求1-100之和。 #include stdio.h main() /*程序名為l3_25.cpp。 int sum=0,i=1; / *若sum的值超過int型變量能表示的范圍,則設(shè)置為長整型*/,for 語句的實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)
36、目錄,for( ;i=n;i+) sum+=i; printf(其和是 %dn,sum); /*若sum為長整型,則相應(yīng)的輸出也設(shè)置成長整型ld*/ 運(yùn)行結(jié)果: 其和是5050 for循環(huán)的執(zhí)行過程:先執(zhí)行表達(dá)式1,為空語句,然后判斷i=n是否成立,如果為真,執(zhí)行循環(huán)體sum+=i,轉(zhuǎn)而執(zhí)行i+,再判斷i=n,如此反復(fù),直到i=n為假為止。在這個(gè)例子中,i是循環(huán)控制變量,每次循環(huán)時(shí),它的值都被改變且進(jìn)行檢驗(yàn)。,for 語句多樣性, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,for語句的多樣性,由于C語言中表達(dá)式的形式十分豐富,對(duì)for語句的三個(gè)控制表達(dá)式可以靈活運(yùn)用,因
37、此造成for語句形式多種多樣。 (1)為空語句 如上例中求1-100的和。本來由完成的初始化可提到循環(huán)之外完成。 (2)和是逗號(hào)表達(dá)方式,(3)用空循環(huán)來延長時(shí)間 常用空循環(huán)來產(chǎn)生延時(shí),以達(dá)到某種特定要求。如: for(t=0;t 是一個(gè)無限循環(huán)。將成為死循環(huán)。,3.3.5 循環(huán)的嵌套, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,在一個(gè)循環(huán)內(nèi)又完整地包含另一個(gè)循環(huán),稱為循環(huán)的嵌套,即循環(huán)體自身包含循環(huán)語句。 前面介紹了三種類型的循環(huán),它們自己本身可以嵌套,如在for循環(huán)中包含另一個(gè)for循環(huán),也可以互相嵌套,例如可以for循環(huán)中包含一個(gè)while循環(huán)或者do-while
38、循環(huán)等等。 下面通過幾個(gè)例子來介紹循環(huán)嵌套的概念和運(yùn)用。,【例3.26】打印如下形式的乘法小九九表: 1*1=1 2*1=2 2*2=4 9*1=9 9*2=18 9*3=27 9*9=81 分析:表體共九行,所以首先考慮一個(gè)打印九行的算法: for(i=1;i=9;i+) 打印第i行 其次考慮如何打印第i行。每行都有i個(gè)表達(dá)式?*?=積,可以寫為: for(j=1;j = i;j+) 打印第j個(gè)表達(dá)式,循環(huán)的嵌套實(shí)例, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,打印第j個(gè)表達(dá)式,可寫為: printf(%d*%d=%-3d,i,j,i*j); 在寫這個(gè)語句時(shí),不寫換行
39、,只能在第j個(gè)表達(dá)式輸出后寫一個(gè)語句使之換行。 printf(n); 綜上所述,打印以上形式的乘法小九九表的程序如下:,【例3.26】 /*程序名為l3_26.cpp。*/ #include stdio.h main() int i,j; /* i,j 分別控制行和列的輸出*/ for(i=1;i=9;i+) for(j=1;j = i;j+) printf(%d*%d=%-3d,i,j,i*j); printf(n); /*另起一行*/ ,3.3.6 break語句和continue語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,1. break語句,2. cont
40、inue語句,1. break語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回3.3.6目錄,1. break語句,前面已經(jīng)介紹過用break語句跳出當(dāng)前的switch語句流程。在循環(huán)結(jié)構(gòu)中,也可以用break語句使流程跳出本層循環(huán)體,從而提前強(qiáng)制性結(jié)束本層循環(huán)。 break語句的一般形式為: break;,【例3.28】在循環(huán)體中break語句執(zhí)行示例。 #include stdio.h main() /*程序名為l3_28.cpp。*/ int i,s=0; for(i=1;i5) break; printf(s=%dn,s); printf(使用break語句時(shí),s的最終
41、值為:%dn,s); ,break語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),程序運(yùn)行后的輸出結(jié)果如下: s=1 s=3 使用break語句時(shí),s的最終值為:6 本例中,如果沒有break語句,程序?qū)⑦M(jìn)行10次循環(huán);但當(dāng)i=3時(shí),s的值為6,if語句中的表達(dá)式s5 值為1,于是執(zhí)行break語句, 循環(huán)立即中斷,跳出for循環(huán),從而提前中止循環(huán),并轉(zhuǎn)向循環(huán)體外的下一條語句。此時(shí),s的值為6。 break語句使用說明: (1)只能在switch語句體和循環(huán)體內(nèi)使用break語句。 (2)當(dāng)break語句出現(xiàn)在,其作用是跳出該switch語句體。當(dāng)break語句出現(xiàn)在循環(huán)體中,但并
42、不在switch語句體內(nèi)時(shí),則在執(zhí)行break語句后,使流程跳出本層循環(huán)體。,返回3.3.6目錄,2. Continue語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),2.continue語句,continue語句的一般形式為: continue;,【例3.30】將【例3.28】中的break語句改用continue語句,來比較兩者的區(qū)別。 #include stdio.h main() /*程序名為l3_30.cpp。*/ int i,s=0; for(i=1;i5) continue; printf(s=%dn,s); printf(使用continue語句時(shí),s的最終值為:%
43、dn,s); ,返回3.3.6目錄,Continue語句, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),程序運(yùn)行后的輸出結(jié)果如下: s=1 s=3 使用continue語句時(shí),s的最終值為:55 在本例中,當(dāng)i=1時(shí),輸出s=1,當(dāng)i=2時(shí),輸出s=3,當(dāng)i=3時(shí),s的值為6,if語句中的表達(dá)式s5 值為1,于是執(zhí)行continue語句,跳過循環(huán)體中余下的語句,而去對(duì)for語句中的表達(dá)式3求值,然后進(jìn)行表達(dá)式2的條件測試,最后根據(jù)表達(dá)式2的值來決定循環(huán)是否繼續(xù)執(zhí)行。不論continue是作為何種語句成分出現(xiàn)的,都將按此功能執(zhí)行,這點(diǎn)與break有所不同??梢钥闯觯琧ontinue語句的
44、功能是結(jié)束本次循環(huán)。,返回3.3.6目錄,3.3.7 編程實(shí)訓(xùn)1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,【例3.32】編程輸出如下圖形: * * * * * 程序如下:,#include stdio.h main() /*程序名為l3_32.cpp。*/ int i,j; for(i=1;i=5;i+) for(j=1;j=10-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); ,3.3.7 編程實(shí)訓(xùn)2, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)首,【例3.33】求整數(shù)3-10
45、0中的素?cái)?shù)。為了檢查某數(shù)是否是素?cái)?shù),采用的方法是,從n=3起直到100止,逐個(gè)用i=2n/2去試除n,只要有一個(gè)能整除,說明該數(shù)不是素?cái)?shù)。程序如下:,main() /*程序名為l3_27.cpp。*/ int i,n,num; for(n=3,num=0;n=100;n+) for(i=2;i=n-1;i+) if(n%i=0) break; if(n=i) /*若n=i,則說明n不能被2n-1整除,所以n為素?cái)?shù) */ printf(%4d,n); num+; printf(n素?cái)?shù)個(gè)數(shù)是:%dn,num); 運(yùn)行結(jié)果: 3 5 7 11 13 17 19 23 29 31 37 41 43 4
46、7 53 59 61 67 71 73 79 83 89 97 素?cái)?shù)個(gè)數(shù)是:24, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本章目錄,3.4.2 綜合實(shí)訓(xùn),3.4.1 結(jié)構(gòu)化程序設(shè)計(jì)方法,3.4 結(jié)構(gòu)化程序設(shè)計(jì)方法與綜合實(shí)訓(xùn),3.4.1 結(jié)構(gòu)化程序設(shè)計(jì)方法, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),結(jié)構(gòu)化程序設(shè)計(jì)的思想是由E.W.Dijkstra等人于上世紀(jì)60年代后期提出的。其思想是:一個(gè)程序的任何邏輯問題均可用“順序”、“選擇”和“循環(huán)”這三種基本邏輯結(jié)構(gòu)來描述。實(shí)現(xiàn)這些程序流程的語句都是流程控制語句。流程控制語句在程序設(shè)計(jì)中起著重要的作用,通過三種基本控制結(jié)構(gòu)
47、,使結(jié)構(gòu)化程序具有唯一入口和唯一出口,沒有死循環(huán)。再一個(gè)特點(diǎn)是程序組織結(jié)構(gòu)化,即程序設(shè)計(jì)采用自頂向下,逐步細(xì)化,功能模塊化的方法。這種方法就是將程序設(shè)計(jì)成一個(gè)個(gè)功能簡單獨(dú)立的模塊. C語言是一種很好的結(jié)構(gòu)化程序設(shè)計(jì)語言,它提供了比其他高級(jí)語言更豐富的流程控制語句。有四種語句是順序執(zhí)行的:(1)空語句;(2)表達(dá)式語句;(3)函數(shù)調(diào)用語句;(4)復(fù)合語句。選擇語句有if語句和switch語句。循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句,如continue,break等。順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。由三種結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序
48、稱為結(jié)構(gòu)化程序。使用結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn)是:結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測試性和可維護(hù)性;使用少數(shù)基本結(jié)構(gòu),使程序結(jié)構(gòu)清晰,易讀易懂;容易驗(yàn)證程序的正確性。 循環(huán)程序設(shè)計(jì)是有一定的編程規(guī)律和思路的,窮舉與迭代是兩類具有代表性應(yīng)用的基本算法。 本節(jié)主要內(nèi)容是引導(dǎo)讀者編程來實(shí)現(xiàn)這些基本算法。,返回本節(jié)目錄,3.4.2 綜合實(shí)訓(xùn)1, C語言程序設(shè)計(jì) (Visual C+ 6.0環(huán)境),返回本節(jié)目錄,【例3.34】用泰勒級(jí)數(shù)求e的近似值。直到最后一項(xiàng)小于1e-6為止。 e=1+1/1!+1/2!+1/3!+1/n!+ 程序如下: /*源程序名為l3_34.cpp。 泰勒級(jí)數(shù) e*/,#include stdio.h main() float e=1.0,t=1.0;/*用e存放結(jié)果,用t存放n!,n的值每次加1*/ int n=1; while(1/t1e-6) t=t*n; /*求n!*/ e=e+1/t; /* 實(shí)現(xiàn)求n!的倒數(shù)的和 */ n+; printf(e=%
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備結(jié)構(gòu)設(shè)計(jì)培訓(xùn)課件教學(xué)
- 設(shè)備管道安裝培訓(xùn)課件
- 防雷接地培訓(xùn)課件
- 小滿節(jié)氣的文化探索
- 2026年電工技術(shù)中級(jí)理論與實(shí)踐筆試模擬題
- 2026年預(yù)測模擬試題庫AI從業(yè)者技能檢驗(yàn)
- 心理健康知識(shí)普及2026年心理調(diào)適能力測試題
- 2026年軟件定義網(wǎng)絡(luò)SDN的面試問題探討
- 2026年證券從業(yè)資格認(rèn)證筆試練習(xí)題
- 2026年網(wǎng)絡(luò)安全知識(shí)及應(yīng)急響應(yīng)題集
- 鐵路項(xiàng)目部管理制度
- 物流倉儲(chǔ)設(shè)備 檢查與維護(hù)規(guī)程 第1部分:巷道堆垛機(jī) 征求意見稿
- 刮刮樂營銷培訓(xùn)
- 2025-2030中國六氯乙硅烷行業(yè)需求量預(yù)測及前景動(dòng)態(tài)研究研究報(bào)告
- 山東省臨沂市沂水縣2024-2025學(xué)年七年級(jí)上學(xué)期期末考試英語試題
- 鐵路120型貨車空氣控制閥
- JBT 12530.2-2015 塑料焊縫無損檢測方法 第2部分:目視檢測
- JJG596-2012電子式交流電能表
- 定安海恒檳榔產(chǎn)業(yè)有限公司檳榔初加工項(xiàng)目 環(huán)評(píng)報(bào)告
- 如何系統(tǒng)評(píng)價(jià)和整合醫(yī)學(xué)文獻(xiàn)中的數(shù)據(jù)與證據(jù)
- 2022公務(wù)員錄用體檢操作手冊(cè)(試行)
評(píng)論
0/150
提交評(píng)論