程序和流程控制編程及應(yīng)用教材_第1頁(yè)
程序和流程控制編程及應(yīng)用教材_第2頁(yè)
程序和流程控制編程及應(yīng)用教材_第3頁(yè)
程序和流程控制編程及應(yīng)用教材_第4頁(yè)
程序和流程控制編程及應(yīng)用教材_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第1、2章回顧章回顧C(jī)程序結(jié)構(gòu):程序結(jié)構(gòu): C程序由main函數(shù)和若干個(gè)其他子函數(shù)(標(biāo)準(zhǔn)函數(shù)和自定義函數(shù)等)構(gòu)成。函數(shù)包括函數(shù)頭和函數(shù)體,C程序語(yǔ)句以分號(hào)作為結(jié)束標(biāo)志。語(yǔ)法單位(單詞):語(yǔ)法單位(單詞):關(guān)鍵字、標(biāo)識(shí)符、分隔符、常關(guān)鍵字、標(biāo)識(shí)符、分隔符、常量、變量、運(yùn)算符量、變量、運(yùn)算符。數(shù)據(jù)類型的規(guī)定以及表達(dá)式運(yùn)算規(guī)則。數(shù)據(jù)類型的規(guī)定以及表達(dá)式運(yùn)算規(guī)則。輸入輸出函數(shù)輸入輸出函數(shù)getchar,putchar,scanf,printf的使用。的使用。第第3 3章章 程序和流程控制程序和流程控制 3.1 C語(yǔ)言程序的版式及語(yǔ)句語(yǔ)言程序的版式及語(yǔ)句 3.2 結(jié)構(gòu)化程序設(shè)計(jì)和流程控制結(jié)構(gòu)化程序設(shè)計(jì)

2、和流程控制 3.3 if語(yǔ)句語(yǔ)句 3.4 switch多分支選擇語(yǔ)句多分支選擇語(yǔ)句 3.5 循環(huán)控制循環(huán)控制 3.6 輔助控制語(yǔ)句輔助控制語(yǔ)句 3.7 典型程序編寫(xiě)方法舉例典型程序編寫(xiě)方法舉例 3.8 小結(jié)小結(jié)C語(yǔ)言流程控制語(yǔ)句語(yǔ)言流程控制語(yǔ)句3.1 C語(yǔ)言程序的版式及語(yǔ)句語(yǔ)言程序的版式及語(yǔ)句 3.1.1 C語(yǔ)言程序的版式 3.1.2 C語(yǔ)言的語(yǔ)句例例3.1 /* 求二整數(shù)之和的程序求二整數(shù)之和的程序 */#include /預(yù)處理預(yù)處理void main( ) /函數(shù)定義函數(shù)定義 int a,b; /變量說(shuō)明變量說(shuō)明 int sum; scanf(%d%d,&a,&b); / 數(shù)據(jù)輸入數(shù)據(jù)輸

3、入 sum = a + b ; /執(zhí)行部分執(zhí)行部分 printf(sum=%d,sum); /信息輸出信息輸出該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:7 8 /輸入輸入sum=153.1.1 C語(yǔ)言程序的版式特征語(yǔ)言程序的版式特征程序設(shè)計(jì)程序設(shè)計(jì)主要任務(wù)主要任務(wù) 輸入輸入 處理處理1.輸出輸出 編寫(xiě)C語(yǔ)言程序一般應(yīng)包含如下幾個(gè)部分 (1)注釋部分注釋部分:格式為*注釋內(nèi)容*或/注釋內(nèi)容;在函數(shù)的最上端,一般都應(yīng)有一段注釋信息,主要說(shuō)明函數(shù)的功能,輸入、輸出及其限制;如是商品軟件還應(yīng)包含版權(quán)信息,在程序的其他部分也可加注釋。編程者要養(yǎng)成一邊編程序、一邊加注釋的習(xí)慣。一般長(zhǎng)段的注釋用*注釋內(nèi)容*形

4、式,短段的注釋用/注釋內(nèi)容形式。 (2)預(yù)處理塊、全局變量說(shuō)明等預(yù)處理塊、全局變量說(shuō)明等。(參見(jiàn)后面章節(jié)) (3)函數(shù)定義部分函數(shù)定義部分,包括函數(shù)類型,函數(shù)名及參數(shù)表,由于只有一個(gè)函數(shù)故取名main(),由于無(wú)返回值故類型為void,無(wú)參數(shù)輸入時(shí),main()內(nèi)參數(shù)表為空。 (4)變量說(shuō)明部分變量說(shuō)明部分,對(duì)所用的變量進(jìn)行說(shuō)明; (5)數(shù)據(jù)輸入部分?jǐn)?shù)據(jù)輸入部分,對(duì)要使用的變量賦初值,可直接或間接輸入,有些是在第(4)部分完成(即變量直接初始化); (6)執(zhí)行部分執(zhí)行部分,它是整個(gè)程序的核心,一般是對(duì)程序算法用結(jié)構(gòu)化程序設(shè)計(jì)方法進(jìn)行描述,然后將其轉(zhuǎn)化成對(duì)應(yīng)的C語(yǔ)言語(yǔ)句; (7)信息輸出部分信息

5、輸出部分,根據(jù)要求輸出所求的信息或返回結(jié)果;有些是在第(6)部分一邊執(zhí)行一邊輸出。如上述程序的執(zhí)行部分采用函數(shù)調(diào)用則如上述程序的執(zhí)行部分采用函數(shù)調(diào)用則上述程序應(yīng)為上述程序應(yīng)為例例3.2 /* 求二整數(shù)之和的程序求二整數(shù)之和的程序 */#include /預(yù)處理預(yù)處理int add(int x,int y); /函數(shù)聲明函數(shù)聲明void main( ) /函數(shù)定義函數(shù)定義 int a,b; /變量說(shuō)明變量說(shuō)明 int sum; scanf(%d%d,&a,&b); /數(shù)據(jù)輸入數(shù)據(jù)輸入 sum = add(a, b) ; /執(zhí)行部分執(zhí)行部分 printf(sum=%d,sum); /信息輸出信息輸

6、出/*求和函數(shù),輸入?yún)?shù)為二整數(shù),求和函數(shù),輸入?yún)?shù)為二整數(shù),返回值為其和返回值為其和*/int add(int x, int y) /函數(shù)定義函數(shù)定義 int z; / 變量說(shuō)明變量說(shuō)明 z = x + y; /執(zhí)行部分執(zhí)行部分 return z; /返回結(jié)果返回結(jié)果輸入:輸入:7 8 該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:sum=15語(yǔ)句是語(yǔ)句是C語(yǔ)言程序的基本元素,語(yǔ)句以分號(hào)為結(jié)束標(biāo)志。語(yǔ)言程序的基本元素,語(yǔ)句以分號(hào)為結(jié)束標(biāo)志。程序中的各函數(shù)模塊都是由一定含義的語(yǔ)句組成的。程序中的各函數(shù)模塊都是由一定含義的語(yǔ)句組成的。 例例: char ch =H;/*分號(hào)為語(yǔ)句結(jié)束標(biāo)志分號(hào)為語(yǔ)句結(jié)束

7、標(biāo)志*/ int y= 7 ; c=a+b; printf( “hello !”) ;語(yǔ)句的分類:語(yǔ)句的分類:說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句 用來(lái)對(duì)程序中所使用的各種類型變量及屬性進(jìn)行用來(lái)對(duì)程序中所使用的各種類型變量及屬性進(jìn)行說(shuō)明,按其所起作用有時(shí)也稱為定義語(yǔ)句。說(shuō)明,按其所起作用有時(shí)也稱為定義語(yǔ)句。執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句 包括表達(dá)式語(yǔ)句、流程控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句等表達(dá)式語(yǔ)句、流程控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句等完成一定運(yùn)算操作功能的語(yǔ)句。完成一定運(yùn)算操作功能的語(yǔ)句。3.1.2 C語(yǔ)言的語(yǔ)句語(yǔ)言的語(yǔ)句說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句 用來(lái)對(duì)程序中所使用的各種類型變量進(jìn)行說(shuō)明,也稱為定義用來(lái)對(duì)程序中所使用的各種類型變量進(jìn)行說(shuō)明,也稱為定

8、義語(yǔ)句。語(yǔ)句。 說(shuō)明語(yǔ)句的格式:說(shuō)明語(yǔ)句的格式: 數(shù)據(jù)類型數(shù)據(jù)類型 變量名列表;變量名列表; 例例: int i, j ; /說(shuō)明了兩個(gè)整型變量說(shuō)明了兩個(gè)整型變量i和和j 說(shuō)明語(yǔ)句同時(shí)也可以進(jìn)行初始化賦值,如:說(shuō)明語(yǔ)句同時(shí)也可以進(jìn)行初始化賦值,如: char ch =H; unsigned long y = 0 x35847412 ;執(zhí)行語(yǔ)句中所使用的每一個(gè)變量都必須在此前說(shuō)明過(guò)。執(zhí)行語(yǔ)句中所使用的每一個(gè)變量都必須在此前說(shuō)明過(guò)。 2. 執(zhí)行語(yǔ)句。一般包含四大類:執(zhí)行語(yǔ)句。一般包含四大類: 表達(dá)式語(yǔ)句(包括空語(yǔ)句)表達(dá)式語(yǔ)句(包括空語(yǔ)句) 復(fù)合語(yǔ)句復(fù)合語(yǔ)句 流程控制語(yǔ)句流程控制語(yǔ)句 輔助控制語(yǔ)句

9、輔助控制語(yǔ)句 (1)表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句 任何一個(gè)表達(dá)式加上一個(gè)分號(hào)就是一條表達(dá)式語(yǔ)句;任何一個(gè)表達(dá)式加上一個(gè)分號(hào)就是一條表達(dá)式語(yǔ)句; /表達(dá)式語(yǔ)句,通常是賦值表達(dá)式或函數(shù)調(diào)用表達(dá)式。表達(dá)式語(yǔ)句,通常是賦值表達(dá)式或函數(shù)調(diào)用表達(dá)式。 例:例: c=a+b; sum = add( a , b) ; /賦值語(yǔ)句賦值語(yǔ)句 printf( “hello !”) ; /函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句 ; /空語(yǔ)句空語(yǔ)句 (2)復(fù)合語(yǔ)句復(fù)合語(yǔ)句 將若干語(yǔ)句用一對(duì)大括號(hào)將若干語(yǔ)句用一對(duì)大括號(hào) 括起來(lái)就構(gòu)成了復(fù)合括起來(lái)就構(gòu)成了復(fù)合語(yǔ)句。復(fù)合語(yǔ)句的一般格式為語(yǔ)句。復(fù)合語(yǔ)句的一般格式為: 說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句; 可執(zhí)行語(yǔ)句可

10、執(zhí)行語(yǔ)句; 復(fù)合語(yǔ)句在程序結(jié)構(gòu)上是以整體出現(xiàn),相當(dāng)于程序塊復(fù)合語(yǔ)句在程序結(jié)構(gòu)上是以整體出現(xiàn),相當(dāng)于程序塊(BLOCK),),當(dāng)一個(gè)功能必須用多條語(yǔ)句才能完成時(shí),當(dāng)一個(gè)功能必須用多條語(yǔ)句才能完成時(shí),就需要使用復(fù)合語(yǔ)句。就需要使用復(fù)合語(yǔ)句。采用采用 可以清晰地表達(dá)程序的層次結(jié)構(gòu)。可以清晰地表達(dá)程序的層次結(jié)構(gòu)。3.2 結(jié)構(gòu)化程序設(shè)計(jì)和流程控制結(jié)構(gòu)化程序設(shè)計(jì)和流程控制 3.2.1 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì) 3.2.2 C語(yǔ)言的流程控制語(yǔ)句和輔助控制語(yǔ)句語(yǔ)言的流程控制語(yǔ)句和輔助控制語(yǔ)句3.2.1 結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì) 結(jié)構(gòu)化程序設(shè)計(jì)的基本思想,結(jié)構(gòu)化程序設(shè)計(jì)的基本思想,任何程序都可以用三種基

11、任何程序都可以用三種基本結(jié)構(gòu)表示:本結(jié)構(gòu)表示: 順序結(jié)構(gòu)順序結(jié)構(gòu) 選擇結(jié)構(gòu)選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)。 采用這三種基本結(jié)構(gòu)編寫(xiě)程序的設(shè)計(jì)風(fēng)格稱為采用這三種基本結(jié)構(gòu)編寫(xiě)程序的設(shè)計(jì)風(fēng)格稱為結(jié)構(gòu)化程序設(shè)計(jì)。結(jié)構(gòu)化程序設(shè)計(jì)。圖圖3.1順序結(jié)構(gòu)示意圖順序結(jié)構(gòu)示意圖順序結(jié)構(gòu)順序結(jié)構(gòu): : 按語(yǔ)句順序依次執(zhí)行。按語(yǔ)句順序依次執(zhí)行。/通過(guò)語(yǔ)句書(shū)寫(xiě)順序自然實(shí)現(xiàn)通過(guò)語(yǔ)句書(shū)寫(xiě)順序自然實(shí)現(xiàn) int a,b; /變量說(shuō)明變量說(shuō)明 int sum; scanf(“%d%d”,&a,&b);/輸入輸入 sum = a + b ; /執(zhí)行運(yùn)算執(zhí)行運(yùn)算 printf(“sum=%d”,sum); /輸出輸出 選擇結(jié)構(gòu)選擇結(jié)構(gòu)

12、根據(jù)條件選擇兩支或多支程序中的一支執(zhí)行。根據(jù)條件選擇兩支或多支程序中的一支執(zhí)行。 圖3.2選擇結(jié)構(gòu)示意圖由兩分支選擇結(jié)構(gòu)可以派生出另一種基本結(jié)構(gòu),多分支選擇結(jié)構(gòu)。/if,switch/if,switch語(yǔ)句語(yǔ)句, ,選擇運(yùn)算符實(shí)現(xiàn)選擇運(yùn)算符實(shí)現(xiàn) if(a=0) printf(come in !); else printf(go away!); 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 在判斷條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。在判斷條件成立的情況下,反復(fù)執(zhí)行某個(gè)程序段。圖3.3循環(huán)結(jié)構(gòu)示意圖/while,do while以及以及/ for語(yǔ)句來(lái)實(shí)現(xiàn)語(yǔ)句來(lái)實(shí)現(xiàn)while ( i =90&a=90&a=100) pri

13、ntf(“A !); else printf(“b!);2 if單路分支形式(選擇性執(zhí)行語(yǔ)該分支單路分支形式(選擇性執(zhí)行語(yǔ)該分支) scanf(“%f”,&i); if ( i60) printf(“不不及格及格”); printf(“%f”,i);在在C語(yǔ)言程序中,還常用如下書(shū)寫(xiě)形式語(yǔ)言程序中,還常用如下書(shū)寫(xiě)形式: if(x) 等價(jià)于等價(jià)于 if(x!=0) if(!x) 等價(jià)于等價(jià)于 if(x=0) 如變量如變量x為為float或或double實(shí)型變量,則與實(shí)型變量,則與0比較比較的的if語(yǔ)句建議如下:語(yǔ)句建議如下: if (fabs(x)=90)grade= A ; else if (i

14、=70) grade=B ; else if (i=60) grade=C ; else if (i=0) grade=D ; putchar(grade); /輸出該生成績(jī)等級(jí)輸出該生成績(jī)等級(jí) 也可用也可用 printf(“%c/n”,grade); 90100分分A7090分分B6070分分C060分分D 例例3.3 給某班學(xué)生的一次考試成績(jī)分等級(jí)給某班學(xué)生的一次考試成績(jī)分等級(jí). 90分以上的為分以上的為A,70分到分到90分之間的為分之間的為B,60分到分到70分之間的為分之間的為C,60分以下的得分以下的得D。Sample-3-3-1.c算法算法2: ; float i; /定義定義i

15、表示學(xué)生成績(jī),表示學(xué)生成績(jī), char grade; /grade表示等級(jí)表示等級(jí)。 scanf(“%f”,&i); /輸入學(xué)生成績(jī)輸入學(xué)生成績(jī) if (i60)grade= D ; else if (i70) grade=C ; else if (i=90)grade= A ; else if (i=70) grade=B ; else if (i=60) grade=C ; else if (i=0) grade=D ; putchar(grade); /輸出該生成績(jī)等級(jí)輸出該生成績(jī)等級(jí) 也可用也可用 printf(“%c/n”,grade); 90100分分A7090分分B6070分分C

16、060分分D 例例3.3 給某班學(xué)生的一次考試成績(jī)分等級(jí)給某班學(xué)生的一次考試成績(jī)分等級(jí). 90分以上的為分以上的為A,70分到分到90分之間的為分之間的為B,60分到分到70分之間的為分之間的為C,60分以下的得分以下的得D。Sample-3-3-1.c 例例3.4 求一元二次方程求一元二次方程 ax2+bx+c=0的根,實(shí)系數(shù)的根,實(shí)系數(shù)a,b,c從終端輸入。從終端輸入。 算法分析:算法分析: 先判斷輸入的系數(shù)是否滿足方程是二次方程,判斷先判斷輸入的系數(shù)是否滿足方程是二次方程,判斷a是否是否為為0。接著應(yīng)考慮兩個(gè)不同實(shí)根,相同實(shí)根,和復(fù)根三種情況討。接著應(yīng)考慮兩個(gè)不同實(shí)根,相同實(shí)根,和復(fù)根三

17、種情況討論論: 當(dāng)當(dāng)b2-4ac0時(shí),有兩個(gè)不同的實(shí)根,其中時(shí),有兩個(gè)不同的實(shí)根,其中x1,x2為其兩個(gè)根;為其兩個(gè)根; 當(dāng)當(dāng)b2-4ac0時(shí),有兩個(gè)相同的實(shí)根,其中時(shí),有兩個(gè)相同的實(shí)根,其中x1,x2為其兩個(gè)等根;為其兩個(gè)等根; 當(dāng)當(dāng)b2-4ac0時(shí),有兩個(gè)共軛的虛根;我們把虛根的實(shí)部時(shí),有兩個(gè)共軛的虛根;我們把虛根的實(shí)部x3和虛部和虛部x4分成兩部份分開(kāi)計(jì)算,后來(lái)再組合在一起。分成兩部份分開(kāi)計(jì)算,后來(lái)再組合在一起。 程序如下:程序如下: #include #include void main( ) float a,b,c; float x1,x2; float x3,x4; printf(

18、input numbers: a ,b ,c:); scanf(%f%f%f,&a,&b,&c); if ( a = 0) if ( b=0) printf(error input n); else printf(“x=%.2fn,-c/b); /return ; else if ( b*b 4*a*c) x1 = (-b+sqrt(b*b-4*a*c)/(2*a); x2 = (-b-sqrt(b*b-4*a*c)/(2*a); printf(x1=%.2f,x2=%.2fn,x1,x2); else if ( b*b = 4*a*c) x1 = x2 = (-b+sqrt(b*b-4*a*

19、c)/(2*a); printf(x1=x2=%.2fn,x1); else x3 = -b/(2*a); x4 = sqrt(4*a*c- b*b)/(2*a); printf(x1=%.2f+%.2f in,x3,x4); printf(x2=%.2f-%.2f in,x3,x4); Sample-3-4.c 該程序的運(yùn)行結(jié)果(分該程序的運(yùn)行結(jié)果(分5種情況)為:種情況)為:(1) 0 1 4 /輸入輸入 x=-4 /輸出輸出(2) 0 0 4 /輸入輸入 the input is error /輸出輸出(3) 1 4 3 /輸入輸入 x1= -1.00 ,x2= -3.00 /輸出輸出(

20、4) 1 4 4 /輸入輸入 x1=x2=-2.00 /輸出輸出 (5) 1 2 4 /輸入輸入 x1=-1+1.73 i /輸出輸出 x2=-1-1.73 iif多條件分支下的流程控制if 語(yǔ)句的不足語(yǔ)句的不足條件表達(dá)式的結(jié)果條件表達(dá)式的結(jié)果只有真或假兩種結(jié)只有真或假兩種結(jié)果果,由一個(gè)條件語(yǔ),由一個(gè)條件語(yǔ)句只能提供兩個(gè)分句只能提供兩個(gè)分支供選擇。支供選擇。多重多重if語(yǔ)句可以實(shí)語(yǔ)句可以實(shí)現(xiàn)多重分支,但現(xiàn)多重分支,但程程序結(jié)構(gòu)顯得繁瑣序結(jié)構(gòu)顯得繁瑣,欠清晰欠清晰,執(zhí)行效率也執(zhí)行效率也比較低。比較低。圖圖3.8 switch語(yǔ)句的流程控制語(yǔ)句的流程控制3.4 switch多分支選擇語(yǔ)句多分支選擇

21、語(yǔ)句 switch分支選擇語(yǔ)句,它可以結(jié)構(gòu)清晰地直接表達(dá)分支選擇語(yǔ)句,它可以結(jié)構(gòu)清晰地直接表達(dá)多分支選擇多分支選擇, 執(zhí)行效率更高執(zhí)行效率更高。switch(表達(dá)式表達(dá)式) case 判斷值判斷值1: 語(yǔ)句組語(yǔ)句組1; break; case 判斷值判斷值2: 語(yǔ)句組語(yǔ)句組2; break; case 判斷值判斷值 n: 語(yǔ)句組語(yǔ)句組n; default: 語(yǔ)句組語(yǔ)句組n+1; break;printf(“the end”);使用使用switch語(yǔ)句注意事項(xiàng)語(yǔ)句注意事項(xiàng) 1. switch ( )后面圓括號(hào)中的表達(dá)式要求后面圓括號(hào)中的表達(dá)式要求結(jié)果是整數(shù),各個(gè)結(jié)果是整數(shù),各個(gè)case判斷值要求

22、是整判斷值要求是整形常量形常量; switch語(yǔ)句比較表達(dá)式的值與語(yǔ)句比較表達(dá)式的值與某個(gè)某個(gè)case后常量值相等,則從該后常量值相等,則從該case后后面的第一個(gè)語(yǔ)句開(kāi)始依次執(zhí)行面的第一個(gè)語(yǔ)句開(kāi)始依次執(zhí)行 2. 各個(gè)各個(gè)case和及其下面的語(yǔ)句組的順序和及其下面的語(yǔ)句組的順序是任意的,但各個(gè)是任意的,但各個(gè)case后面的判斷值必后面的判斷值必須是不同值須是不同值,default后無(wú)判斷值后無(wú)判斷值,其功能其功能相當(dāng)與相當(dāng)與if語(yǔ)句中的語(yǔ)句中的else 。 switch語(yǔ)句形式switch(表達(dá)式表達(dá)式) case 判斷值判斷值1: 語(yǔ)句組語(yǔ)句組1; break; case 判斷值判斷值2:

23、語(yǔ)句組語(yǔ)句組2; break; case 判斷值判斷值 n-1: case 判斷值判斷值 n: 語(yǔ)句組語(yǔ)句組n; default: 語(yǔ)句組語(yǔ)句組n+1; break;printf(“the end”);switch語(yǔ)句使用注意事項(xiàng)語(yǔ)句使用注意事項(xiàng)3. break語(yǔ)句起著退出語(yǔ)句起著退出switch-case結(jié)構(gòu)的結(jié)構(gòu)的作用,若無(wú)此語(yǔ)句,程序?qū)㈨樞驁?zhí)行下作用,若無(wú)此語(yǔ)句,程序?qū)㈨樞驁?zhí)行下一個(gè)一個(gè)case語(yǔ)句組。語(yǔ)句組。 當(dāng)表達(dá)式的結(jié)果值與所有的當(dāng)表達(dá)式的結(jié)果值與所有的case的判斷的判斷值都不一致時(shí),程序才執(zhí)行值都不一致時(shí),程序才執(zhí)行default部分部分的語(yǔ)句組。的語(yǔ)句組。default部分不

24、是必須的。部分不是必須的。5.對(duì)于表達(dá)式的多個(gè)結(jié)果值執(zhí)行相同語(yǔ)句對(duì)于表達(dá)式的多個(gè)結(jié)果值執(zhí)行相同語(yǔ)句組時(shí)組時(shí),程序的形式是多個(gè)程序的形式是多個(gè)case重疊。重疊。switch語(yǔ)句形式#include void main( ) float a,b,c; int n; printf(“請(qǐng)輸入兩數(shù)據(jù)請(qǐng)輸入兩數(shù)據(jù):”); scanf(“%f%f”,&a,&b); printf(“請(qǐng)選擇運(yùn)算種類請(qǐng)選擇運(yùn)算種類:1 加法;加法;2 減法;減法;3 乘法;乘法;4 除法除法”); scanf(“%d”,&n); switch (n) case 1: c=a+b; break; case 2: c=a-b; b

25、reak; case 3: c=a*b; break; case 4: if(b!=0) c=a/b; else printf(“data error”); break; default: printf(“選擇無(wú)選擇無(wú)效效”); printf(“結(jié)果為結(jié)果為:%.2f”,c); 例例3.5.0 編程實(shí)現(xiàn):用戶輸入兩個(gè)數(shù)據(jù),選擇執(zhí)行某種四則運(yùn)算,編程實(shí)現(xiàn):用戶輸入兩個(gè)數(shù)據(jù),選擇執(zhí)行某種四則運(yùn)算,輸出結(jié)果。輸出結(jié)果。Sample 3-5-0.c#define ESC 0 x11b;#define F1 0 x3b00 /F1鍵的鍵值為鍵的鍵值為0 x3b00 #define F2 0 x3c00

26、#define F3 0 x3d00 #define F4 0 x3e00 #define F5 0 x3f00 #define F6 0 x4000 #include #include void main( ) unsigned int key_value; key_value = bioskey(0); switch (key_value) case F1: F1功能處理程序功能處理程序; break; case F2: F2功能處理程序功能處理程序; break; case F3: case F4: F3,F4相同功能處理程序相同功能處理程序; break; case F5: F5功能處

27、理程序功能處理程序; break; case F6: F6功能處理程序功能處理程序; break; default: 默認(rèn)處理程序默認(rèn)處理程序; break; 例例3.5 編一示意性的菜單處理程序,編一示意性的菜單處理程序, 按下一功能鍵,按下一功能鍵, 執(zhí)執(zhí)行響應(yīng)的功能處理。行響應(yīng)的功能處理。例例3.6 分段函數(shù)計(jì)算,輸入變量數(shù)值分段函數(shù)計(jì)算,輸入變量數(shù)值x,計(jì)算結(jié)果。,計(jì)算結(jié)果。 864464334222201xxxxxxxxy注意:注意:面對(duì)問(wèn)題面對(duì)問(wèn)題,應(yīng)按計(jì)算機(jī)程序設(shè)計(jì)的方式來(lái)思考對(duì)問(wèn)應(yīng)按計(jì)算機(jī)程序設(shè)計(jì)的方式來(lái)思考對(duì)問(wèn)題的描述和解決方案題的描述和解決方案: 考慮變量的定義考慮變量的定

28、義(幾個(gè)變量幾個(gè)變量,數(shù)據(jù)類數(shù)據(jù)類型型), 流程控制語(yǔ)句的選用流程控制語(yǔ)句的選用, 再編程實(shí)現(xiàn)再編程實(shí)現(xiàn).#include void main( ) float x,y; printf(input the number x=); scanf(%f,&x); if( x = 0 & x=2&x= 4 & x = 6 & x8) y= 4*x + 4; else printf(error in input datan); printf(y=.2f,y); 該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為: 1.00 /輸入輸入2.00 /輸出輸出分析:利用多分支的分析:利用多分支的if 語(yǔ)句形式來(lái)編寫(xiě)語(yǔ)句形

29、式來(lái)編寫(xiě):#includevoid main() float x, y; printf(input the number x=); scanf(%f, &x); switch (int) x) case 0: case 1: y = x + 1; break; case 2: case 3: y = 2 * x + 2; break; case 4: case 5: y = 3 * x + 3; break; case 6: case 7: y = 4 * x + 4; break; default: printf(error input datan); printf(y = %.2f , y

30、);Sample3-6-2.cpp利用利用switch語(yǔ)句同樣可以實(shí)現(xiàn)上述功能語(yǔ)句同樣可以實(shí)現(xiàn)上述功能: /輸入學(xué)生成績(jī),判別所屬等級(jí)輸入學(xué)生成績(jī),判別所屬等級(jí)Sample-3-3-2.c#includevoid main() float x, y; printf(input the number x=); scanf(%f, &x); switch ( (int) x / 2 ) case 0: y = x + 1; break; case 1: y = 2 * x + 2; break; case 2: y = 3 * x + 3; break; case 3: y = 4 * x + 4

31、; break; default: printf(error input datan); break; printf(y = %.2f , y);更精巧的程序更精巧的程序: 3.5 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 3.5.1 while3.5.1 while語(yǔ)句語(yǔ)句 3.5.2 for3.5.2 for語(yǔ)句語(yǔ)句 3.5.3 do-while3.5.3 do-while語(yǔ)句語(yǔ)句 3.5.4 3.5.4 循環(huán)語(yǔ)句的嵌套循環(huán)語(yǔ)句的嵌套( (多重循環(huán)多重循環(huán) ) )循環(huán)控制結(jié)構(gòu)是在條件成立時(shí),反復(fù)執(zhí)行循環(huán)體內(nèi)的程序段循環(huán)控制結(jié)構(gòu)是在條件成立時(shí),反復(fù)執(zhí)行循環(huán)體內(nèi)的程序段.C語(yǔ)言中三種循環(huán)流程控制語(yǔ)句語(yǔ)言中三種循環(huán)流程

32、控制語(yǔ)句:3.5.1 while語(yǔ)句語(yǔ)句while循環(huán)語(yǔ)句是首先判斷循環(huán)執(zhí)行條件循環(huán)語(yǔ)句是首先判斷循環(huán)執(zhí)行條件,當(dāng)其成立當(dāng)其成立(非非0值值)時(shí),時(shí),則反復(fù)執(zhí)行循環(huán)體內(nèi)的程序段則反復(fù)執(zhí)行循環(huán)體內(nèi)的程序段.圖圖3.9 while語(yǔ)句的流程及語(yǔ)句形式語(yǔ)句的流程及語(yǔ)句形式while循環(huán)的表達(dá)式是循環(huán)進(jìn)行的條件。循環(huán)的表達(dá)式是循環(huán)進(jìn)行的條件。當(dāng)條件表達(dá)式值為真當(dāng)條件表達(dá)式值為真(非零非零)時(shí),執(zhí)行循時(shí),執(zhí)行循環(huán)體,為假環(huán)體,為假(等于等于0)則循環(huán)結(jié)束則循環(huán)結(jié)束;while(x)等價(jià)于等價(jià)于while(x!=0);while(!x)等等價(jià)于價(jià)于while(x = = 0); 條件表達(dá)式中一般包括一個(gè)能

33、夠改變表?xiàng)l件表達(dá)式中一般包括一個(gè)能夠改變表達(dá)式的變量,這個(gè)變量稱為循環(huán)變量。達(dá)式的變量,這個(gè)變量稱為循環(huán)變量。對(duì)于循環(huán)變量的初始化應(yīng)在對(duì)于循環(huán)變量的初始化應(yīng)在while( )語(yǔ)句語(yǔ)句之前進(jìn)行。之前進(jìn)行。3. 當(dāng)循環(huán)體不需要實(shí)現(xiàn)任何功能時(shí),可用當(dāng)循環(huán)體不需要實(shí)現(xiàn)任何功能時(shí),可用空語(yǔ)句作為循環(huán)體??照Z(yǔ)句作為循環(huán)體。while(ch=getchar( )!=A) ;4. 循環(huán)語(yǔ)句應(yīng)有出口。循環(huán)語(yǔ)句應(yīng)有出口。(通過(guò)循環(huán)語(yǔ)句的條通過(guò)循環(huán)語(yǔ)句的條件判斷或循環(huán)體中件判斷或循環(huán)體中break語(yǔ)句退出循環(huán)語(yǔ)句退出循環(huán))。6. while語(yǔ)句中條件表達(dá)式與語(yǔ)句中條件表達(dá)式與if語(yǔ)句中條件語(yǔ)句中條件表達(dá)式都可以為各

34、種表達(dá)式。表達(dá)式都可以為各種表達(dá)式。int i , sum; sum = 0; i = 1;while ( i = 100) sum = sum + i ; i +; While語(yǔ)句使用注意事項(xiàng)語(yǔ)句使用注意事項(xiàng)例例3.7用用 while循環(huán)語(yǔ)句編寫(xiě)一求和程序循環(huán)語(yǔ)句編寫(xiě)一求和程序 #include void main( ) int i , sum; sum = 0; i = 1; while ( i = 100) sum = sum + i ; i +; printf(sum = %dn , sum); 該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:sum =5050要求要求1.n之和之和?奇數(shù)之和

35、奇數(shù)之和?十位數(shù)為十位數(shù)為3的數(shù)之和的數(shù)之和?并輸出這些數(shù)并輸出這些數(shù)?Sample-3-73.5.3 do-while語(yǔ)句語(yǔ)句圖圖3.11 do-while語(yǔ)句的流程與語(yǔ)句形式語(yǔ)句的流程與語(yǔ)句形式先執(zhí)行一次循環(huán)體再判斷是否循環(huán)下一次先執(zhí)行一次循環(huán)體再判斷是否循環(huán)下一次!例: int i=0; do printf(%3d , i+) ; while(i5);輸出: 0 1 2 3 4while語(yǔ)句: int i=0; while(i5); printf(%3d , i+) ; 輸出: 0 1 2 3 4當(dāng)當(dāng)int i=6; while語(yǔ)句語(yǔ)句do.while語(yǔ)句分別輸出語(yǔ)句分別輸出: ?(1)

36、do-while循環(huán)類似于循環(huán)類似于while循環(huán),區(qū)別在于循環(huán),區(qū)別在于循環(huán)條件判斷位置循環(huán)條件判斷位置不同不同。do-while是在執(zhí)行一次循環(huán)體結(jié)束時(shí)判斷是否繼續(xù)循環(huán)。是在執(zhí)行一次循環(huán)體結(jié)束時(shí)判斷是否繼續(xù)循環(huán)。(2)能用)能用while循環(huán)和循環(huán)和for循環(huán)描述的程序循環(huán)描述的程序大多數(shù)情況下大多數(shù)情況下都能用都能用do-while循環(huán)描述循環(huán)描述, 比如上節(jié)中的例子也可用比如上節(jié)中的例子也可用do-while來(lái)編寫(xiě)。來(lái)編寫(xiě)。(3)能用)能用do-while循環(huán)描述的程序一定能用循環(huán)描述的程序一定能用while和和for循環(huán)描述。循環(huán)描述。do-while語(yǔ)句與while的比較例例3.9

37、 利用利用dowhile循環(huán)編寫(xiě)求和程序循環(huán)編寫(xiě)求和程序#include void main( ) int i=1 , sum =0; do sum = sum + i ; i +; while ( i=100); printf(sum = %d n, sum);該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:sum =50503.5.2 for語(yǔ)句語(yǔ)句圖圖3.10 for語(yǔ)句的流程和語(yǔ)句形式語(yǔ)句的流程和語(yǔ)句形式使用說(shuō)明:for ( i=0 ; i100; i+=5) printf(%dn,i);等價(jià)于:i=0;for (; i100;) printf(%dn,i); i+=5;for循環(huán)通常用于描述

38、循環(huán)范圍比較明確。循環(huán)變量變循環(huán)通常用于描述循環(huán)范圍比較明確。循環(huán)變量變化滿足化滿足 “初值、終值、步長(zhǎng)初值、終值、步長(zhǎng)”型變化規(guī)律型變化規(guī)律.如如: for ( i=0 ; i100; i+=5) printf(%dn,i);for循環(huán)中表達(dá)式循環(huán)中表達(dá)式1和表達(dá)式和表達(dá)式3還可包含逗號(hào)運(yùn)算表達(dá)式。還可包含逗號(hào)運(yùn)算表達(dá)式。如如: for ( a=0,b=10; a100; a+=b) printf(%dn,a);for(表達(dá)式表達(dá)式1; 表達(dá)式表達(dá)式2; 表達(dá)式表達(dá)式3) 語(yǔ)句注意事項(xiàng)語(yǔ)句注意事項(xiàng): 表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2和表達(dá)式和表達(dá)式3可以全部或部分省掉,但是分號(hào)可以全部或部分

39、省掉,但是分號(hào)不能省不能省,當(dāng)省略表達(dá)式,當(dāng)省略表達(dá)式2時(shí)相當(dāng)于永真條件(條件永遠(yuǎn)成立),時(shí)相當(dāng)于永真條件(條件永遠(yuǎn)成立),即即for( ; ; )等同于等同于 for( ; 1 ; ),此種情況下,只有通過(guò)循環(huán)體,此種情況下,只有通過(guò)循環(huán)體中使用中使用break或或return語(yǔ)句來(lái)控制循環(huán)的結(jié)束。語(yǔ)句來(lái)控制循環(huán)的結(jié)束。 當(dāng)當(dāng)for語(yǔ)句省略了表達(dá)式語(yǔ)句省略了表達(dá)式1和和3時(shí)時(shí),等效于等效于while(表達(dá)式表達(dá)式2)循環(huán)循環(huán).(2) 循環(huán)體也可以為空語(yǔ)句,起延遲一段時(shí)間的作用循環(huán)體也可以為空語(yǔ)句,起延遲一段時(shí)間的作用;如如: for(int i=0 ; i10000 ; i+) ;或或for

40、(int i=0 ; i10000 ; i+) (3) 在在for 循環(huán)體內(nèi)一般不要操作循環(huán)變量循環(huán)體內(nèi)一般不要操作循環(huán)變量,以防,以防for 循環(huán)失控。循環(huán)失控。(4) 注意注意for語(yǔ)句循環(huán)量取值區(qū)間語(yǔ)句循環(huán)量取值區(qū)間以及條件表達(dá)式以及條件表達(dá)式2的終止循環(huán)條件。的終止循環(huán)條件。Sample-3-7如下如下2種寫(xiě)法功能是相同的,都是循環(huán)種寫(xiě)法功能是相同的,都是循環(huán)N次次,。for (x=0,a=0 ; xN ; x+) a+=x;for (x=0,a=0 ; x=N-1 ;x+) a+=x;示例(a) 循環(huán)變量屬于半開(kāi)半閉區(qū)間 示例(b) 循環(huán)變量屬于閉區(qū)間for (x=1,a=0; x=

41、N ; x+) a+=x;循環(huán)語(yǔ)句編程注意:條件表達(dá)式的初始狀態(tài)和終止條件,循環(huán)語(yǔ)句編程注意:條件表達(dá)式的初始狀態(tài)和終止條件,在編寫(xiě)程在編寫(xiě)程序時(shí)應(yīng)仔細(xì)推敲序時(shí)應(yīng)仔細(xì)推敲, 驗(yàn)算程序執(zhí)行到此處時(shí)各有關(guān)參數(shù)取值情況驗(yàn)算程序執(zhí)行到此處時(shí)各有關(guān)參數(shù)取值情況.例例3.8 我們還是用上一節(jié)的例子,利用我們還是用上一節(jié)的例子,利用for循循環(huán)語(yǔ)句編寫(xiě)程序求環(huán)語(yǔ)句編寫(xiě)程序求1到到100 的和的和;#include void main( ) int i ; int sum ; for (i = 1 , sum = 0 ; i = 100; i +) sum += i ; printf(sum = %d n,

42、sum);i=1,sum=0;for ( ; i = 100; ) sum += i ; i+; i=1,sum=0;while ( i = 100 ) sum += i ; i+; Sample-3-7.cpp修改得修改得循環(huán)體部分又包含循環(huán)結(jié)構(gòu)時(shí)循環(huán)體部分又包含循環(huán)結(jié)構(gòu)時(shí),就形成了多重循環(huán)就形成了多重循環(huán).例如例如while循環(huán)語(yǔ)句如下循環(huán)語(yǔ)句如下: while(條件表達(dá)式條件表達(dá)式) 循環(huán)體部分循環(huán)體部分; 多重循環(huán)多重循環(huán): while(條件表達(dá)式條件表達(dá)式1) while(條件表達(dá)式條件表達(dá)式2) 循環(huán)體部分循環(huán)體部分2; 3.5.4 循環(huán)語(yǔ)句的嵌套循環(huán)語(yǔ)句的嵌套-多重循環(huán)多重循環(huán)循

43、環(huán)語(yǔ)句組合形成二重循環(huán)的幾種形式循環(huán)語(yǔ)句組合形成二重循環(huán)的幾種形式: :(1) while( ) (2) while( )(1) while( ) (2) while( ) while( ) for( ; ; ) while( ) for( ; ; ) (3) for( ; ; ) (4) for( ; ; )(3) for( ; ; ) (4) for( ; ; ) for ( ; ; ) while( ) for ( ; ; ) while( ) 編寫(xiě)多重循環(huán)時(shí)應(yīng)注意以下問(wèn)題:(1) (1) 對(duì)于多重循環(huán),特別要對(duì)于多重循環(huán),特別要注意循環(huán)有關(guān)的變量賦注意循環(huán)有關(guān)的變量賦初值的位置初值的位

44、置: :只需執(zhí)行一次的賦初值操作應(yīng)放在最只需執(zhí)行一次的賦初值操作應(yīng)放在最外層循環(huán)開(kāi)始執(zhí)行之前。外層循環(huán)開(kāi)始執(zhí)行之前。(2) (2) 內(nèi)外循環(huán)變量不應(yīng)該同名內(nèi)外循環(huán)變量不應(yīng)該同名,否則將造成循環(huán)控,否則將造成循環(huán)控制混亂,導(dǎo)致死循環(huán)或計(jì)算結(jié)果錯(cuò)誤。制混亂,導(dǎo)致死循環(huán)或計(jì)算結(jié)果錯(cuò)誤。(3) (3) 正確地區(qū)分內(nèi)外循環(huán)體正確地區(qū)分內(nèi)外循環(huán)體,在內(nèi)循環(huán)執(zhí)行的所有,在內(nèi)循環(huán)執(zhí)行的所有語(yǔ)句必須用語(yǔ)句必須用 括起來(lái)組成復(fù)合語(yǔ)句作為內(nèi)層循環(huán)括起來(lái)組成復(fù)合語(yǔ)句作為內(nèi)層循環(huán)體體; ;屬于外循環(huán)的語(yǔ)句應(yīng)放在內(nèi)層循環(huán)體之外,外屬于外循環(huán)的語(yǔ)句應(yīng)放在內(nèi)層循環(huán)體之外,外循環(huán)之中。循環(huán)之中。(4) (4) 不應(yīng)該在循環(huán)中執(zhí)

45、行的操作應(yīng)放在最外層循環(huán)不應(yīng)該在循環(huán)中執(zhí)行的操作應(yīng)放在最外層循環(huán)進(jìn)入之前或最外層循環(huán)結(jié)束后。進(jìn)入之前或最外層循環(huán)結(jié)束后。 例:輸出下列由例:輸出下列由 * * 組成的圖案組成的圖案* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *Sample 3-10-0例例3.10

46、編程顯示輸出如下所示的三角形的程序編程顯示輸出如下所示的三角形的程序 * * * * * *算法分析算法分析: 輸出輸出6行行*,循環(huán)循環(huán)i=16 逐行輸出字符個(gè)數(shù)逐行輸出字符個(gè)數(shù)2*i-11. 字符前空格數(shù)字符前空格數(shù)6-i#include void main( ) int i,j; for ( i = 0 ; i 6 ; i +) /共輸出共輸出n行行*字符字符 printf(“n”); /回車(chē)換行回車(chē)換行 for(j = 0 ; j 5-i ; j +) /每行先輸出每行先輸出n-i個(gè)空格個(gè)空格 printf( ); for(j=0 ; j2*i+1 ; j+) /輸出輸出2i+1個(gè)字符

47、個(gè)字符* printf(*); Sample3-10例例3.11打印九九乘法表打印九九乘法表 page77 Sample3-113.6 輔助控制語(yǔ)句輔助控制語(yǔ)句 3.6.1 break語(yǔ)句語(yǔ)句 3.6.2 continue語(yǔ)句語(yǔ)句 goto 語(yǔ)句和標(biāo)號(hào)語(yǔ)句和標(biāo)號(hào) return語(yǔ)句語(yǔ)句3.6.1 break語(yǔ)句break語(yǔ)句用于循環(huán)語(yǔ)句和語(yǔ)句用于循環(huán)語(yǔ)句和switch語(yǔ)句。語(yǔ)句。 可使流程跳出可使流程跳出switch結(jié)構(gòu)或循環(huán)體結(jié)構(gòu)或循環(huán)體,執(zhí)行后面的,執(zhí)行后面的語(yǔ)句。語(yǔ)句。break語(yǔ)句語(yǔ)句只能跳出一層循環(huán)只能跳出一層循環(huán)。break語(yǔ)句不能用于循環(huán)體語(yǔ)句語(yǔ)句不能用于循環(huán)體語(yǔ)句和和switch

48、 語(yǔ)句之外的任何其語(yǔ)句之外的任何其它語(yǔ)句。它語(yǔ)句。for(int i=1;i=5;i+) sum2=0 for(int j=i;j32767) break; sum1+=sum2; if(sum232767|sum132767) break;3.6.2 continue語(yǔ)句語(yǔ)句結(jié)束本次循環(huán),即跳過(guò)循環(huán)體后續(xù)的語(yǔ)句,進(jìn)行下一次的循環(huán)判定。結(jié)束本次循環(huán),即跳過(guò)循環(huán)體后續(xù)的語(yǔ)句,進(jìn)行下一次的循環(huán)判定。continue語(yǔ)句和語(yǔ)句和break語(yǔ)句的區(qū)別是語(yǔ)句的區(qū)別是: continue語(yǔ)句只結(jié)束本次循環(huán)體后續(xù)語(yǔ)句的執(zhí)行,而不是跳出循環(huán)。語(yǔ)句只結(jié)束本次循環(huán)體后續(xù)語(yǔ)句的執(zhí)行,而不是跳出循環(huán)。break語(yǔ)句則

49、是結(jié)束整個(gè)循環(huán)語(yǔ)句,執(zhí)行程序中后續(xù)語(yǔ)句。語(yǔ)句則是結(jié)束整個(gè)循環(huán)語(yǔ)句,執(zhí)行程序中后續(xù)語(yǔ)句。for(int i=1;i32767) break;printf( “ End”);for(int i=1;i32767) sum2=0; continue; printf( “ End”);例例3.13 把把0100之間能被之間能被5整除的數(shù)輸出。整除的數(shù)輸出。 void main( ) int n; for(n=0;n=100;n+) /n從數(shù)字從數(shù)字0到到100逐個(gè)進(jìn)行測(cè)試逐個(gè)進(jìn)行測(cè)試 if(n%5!=0) /是否能整除是否能整除 continue; /不能整除則執(zhí)行下一次循環(huán)不能整除則執(zhí)行下一次循環(huán)

50、printf(%dt,n); printf(“n the end); if(n%5=0) printf(%dt,n);Sample 3-13 例例3.14.輸入一個(gè)圓的半徑,輸出圓的面積。輸入一個(gè)圓的半徑,輸出圓的面積。要求要求: (1).允許反復(fù)的輸入半徑,計(jì)算并顯示圓的面積,允許反復(fù)的輸入半徑,計(jì)算并顯示圓的面積,直到輸入的半徑是直到輸入的半徑是0時(shí)為止時(shí)為止; (2).對(duì)輸入的半徑進(jìn)行檢查,若發(fā)現(xiàn)是負(fù)數(shù)將提示對(duì)輸入的半徑進(jìn)行檢查,若發(fā)現(xiàn)是負(fù)數(shù)將提示操作者重新輸入。操作者重新輸入。#include#include #define PI 3.1415926void main() double

51、 r, area; while (1) printf(input the radius:); scanf(%lf, &r); if (fabs(r) 1e-5) break; else if (r 0) printf(the input is errorn); continue; area = PI * r * r; printf(the area is:%lfn, area); 該程序的運(yùn)行結(jié)果為: input the radius:-1/輸入 the input is error input the radius:1 3.1415926 input the radius:0 /退出整個(gè)do

52、-while循環(huán)。Sample 3-14.cppgoto 語(yǔ)句和標(biāo)號(hào)語(yǔ)句和標(biāo)號(hào) page81 程序中使用程序中使用goto語(yǔ)句時(shí)要求和標(biāo)號(hào)配合,一般形式:語(yǔ)句時(shí)要求和標(biāo)號(hào)配合,一般形式: goto 標(biāo)號(hào)標(biāo)號(hào); 標(biāo)號(hào)標(biāo)號(hào): 語(yǔ)句語(yǔ)句; goto 語(yǔ)句的功能是,把程序控制轉(zhuǎn)移到標(biāo)號(hào)指定的語(yǔ)句處。語(yǔ)句的功能是,把程序控制轉(zhuǎn)移到標(biāo)號(hào)指定的語(yǔ)句處。既執(zhí)行既執(zhí)行g(shù)oto語(yǔ)句之后,程序從指定標(biāo)號(hào)處的語(yǔ)句繼續(xù)執(zhí)行。語(yǔ)句之后,程序從指定標(biāo)號(hào)處的語(yǔ)句繼續(xù)執(zhí)行。 注意注意: goto語(yǔ)句常用的用法是用它退出多重循環(huán)語(yǔ)句常用的用法是用它退出多重循環(huán)。 用用goto語(yǔ)句設(shè)計(jì)程序存在的問(wèn)題:語(yǔ)句設(shè)計(jì)程序存在的問(wèn)題: 1.

53、 破壞結(jié)構(gòu)化設(shè)計(jì)風(fēng)格。破壞結(jié)構(gòu)化設(shè)計(jì)風(fēng)格。 2. goto語(yǔ)句經(jīng)常帶來(lái)錯(cuò)誤或隱患。語(yǔ)句經(jīng)常帶來(lái)錯(cuò)誤或隱患。 所以不提倡使用所以不提倡使用goto語(yǔ)句語(yǔ)句3.7 典型問(wèn)題程序設(shè)計(jì)舉例典型問(wèn)題程序設(shè)計(jì)舉例 程序設(shè)計(jì)宗旨:結(jié)構(gòu)化程序設(shè)計(jì)是通過(guò)三種流程程序設(shè)計(jì)宗旨:結(jié)構(gòu)化程序設(shè)計(jì)是通過(guò)三種流程控制語(yǔ)句的組合來(lái)解決將各種問(wèn)題控制語(yǔ)句的組合來(lái)解決將各種問(wèn)題. 算法設(shè)計(jì)靈活算法設(shè)計(jì)靈活多樣,要熟練掌握和應(yīng)用多樣,要熟練掌握和應(yīng)用C語(yǔ)言規(guī)則。語(yǔ)言規(guī)則。 具體編程思路:具體編程思路:分析問(wèn)題中涉及的數(shù)據(jù)信息分析問(wèn)題中涉及的數(shù)據(jù)信息,設(shè)計(jì)設(shè)計(jì)數(shù)據(jù)輸入接口定義所需變量;數(shù)據(jù)輸入接口定義所需變量;再設(shè)計(jì)數(shù)據(jù)處理程再設(shè)

54、計(jì)數(shù)據(jù)處理程序流程序流程, 選擇合適的語(yǔ)句書(shū)寫(xiě)程序;最后選擇合適的語(yǔ)句書(shū)寫(xiě)程序;最后輸出處理輸出處理結(jié)果結(jié)果 定義變量時(shí)注意數(shù)據(jù)類型取值范圍,運(yùn)算處理過(guò)定義變量時(shí)注意數(shù)據(jù)類型取值范圍,運(yùn)算處理過(guò)程也要注意數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換等規(guī)則,程也要注意數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換等規(guī)則,算法設(shè)算法設(shè)計(jì)要靈活運(yùn)用三種流程結(jié)構(gòu)的組合、嵌套。計(jì)要靈活運(yùn)用三種流程結(jié)構(gòu)的組合、嵌套。一一 典型問(wèn)題典型問(wèn)題1-(求數(shù)列和求數(shù)列和)例例3.15 1, 3, 5, 7, 9.前二十項(xiàng)之和。前二十項(xiàng)之和。算法分析算法分析: 循環(huán)求和運(yùn)算循環(huán)求和運(yùn)算 規(guī)律規(guī)律: 第第1項(xiàng)已知,第項(xiàng)已知,第i+1項(xiàng)項(xiàng) =第第i項(xiàng)項(xiàng) + 2 循環(huán)條件循環(huán)

55、條件:前前20項(xiàng)項(xiàng),適合用適合用for語(yǔ)句實(shí)現(xiàn)語(yǔ)句實(shí)現(xiàn).#include void main( ) int i , sum, t ; /sum代表和代表和, t代表某項(xiàng)代表某項(xiàng) sum = 0 ; t = 1 ; for (i=1 ; i=20 ; i+) sum + = t; /累加累加 t += 2; /求下一項(xiàng)求下一項(xiàng) printf( sum = %d,sum);該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:sum =400Sample 3-15 例例3.16 求序列:求序列: 1!, 2!, 3!, 4!.的前八項(xiàng)之和的前八項(xiàng)之和.算法分析算法分析: 循環(huán)求和運(yùn)算循環(huán)求和運(yùn)算 數(shù)列項(xiàng)變化規(guī)律

56、數(shù)列項(xiàng)變化規(guī)律: 第第i+1項(xiàng)項(xiàng) =第第i項(xiàng)項(xiàng) * (i+1) ; 循環(huán)條件循環(huán)條件:適合采用適合采用for語(yǔ)句語(yǔ)句,8項(xiàng)項(xiàng)#include void main( ) int i; long sum, t ; /sum代表和代表和, t代表某項(xiàng)代表某項(xiàng),注意數(shù)據(jù)類型注意數(shù)據(jù)類型 sum = 0 ; t = 1 ; for (i=1 ; i=8 ; i+) sum + = t; /求和求和 t *= (i+1); /求下一項(xiàng)求下一項(xiàng)t=(i+1)! printf( sum = %ld,sum); 該程序的運(yùn)行結(jié)果為:該程序的運(yùn)行結(jié)果為:sum =46233Sample3-16.c用用for語(yǔ)句雙

57、重循環(huán)實(shí)現(xiàn)語(yǔ)句雙重循環(huán)實(shí)現(xiàn): int i; long sum, t ; /sum代表和代表和, t為某項(xiàng)階乘為某項(xiàng)階乘 sum = 0 ; for (i=1 ; i=8 ; i+) t = 1; for(int j=1; j=1e-6 的數(shù)據(jù)項(xiàng)之和。的數(shù)據(jù)項(xiàng)之和。 算法分析:算法分析: 數(shù)列求和數(shù)列求和 數(shù)列項(xiàng)變化規(guī)律數(shù)列項(xiàng)變化規(guī)律: 第第i項(xiàng)分子項(xiàng)分子: ai=ai-1 + 2; 分母分母: bi=bi-1* 2; 循環(huán)條件循環(huán)條件: 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)=1e-6,適合采用適合采用while語(yǔ)句語(yǔ)句329,167,85,43,21#include void main() int i; float

58、sum=0, a, b; / sum代表和代表和,a為分子為分子,b為分母為分母 a = 1, b = 2; / 分子、分母賦初值分子、分母賦初值 while (a / b = 1e-6) sum = sum + a / b; / 累加一項(xiàng)累加一項(xiàng) a = a + 2; / 求下一項(xiàng)的分子求下一項(xiàng)的分子 b = b * 2; / 求下一項(xiàng)的分母求下一項(xiàng)的分母 printf( sum = %f, sum);該程序的運(yùn)行結(jié)果為:sum =2.999999 (浮點(diǎn)數(shù)的舍入誤差造成的現(xiàn)象) 例例3.18 計(jì)算計(jì)算 并使最后一項(xiàng)的絕對(duì)值小于并使最后一項(xiàng)的絕對(duì)值小于1e-6為止。為止。 分析:本數(shù)列的項(xiàng)變

59、化包括分子、分母以及符號(hào)。分析:本數(shù)列的項(xiàng)變化包括分子、分母以及符號(hào)。算法分析:算法分析: 循環(huán)求和循環(huán)求和 數(shù)列項(xiàng)變化規(guī)律數(shù)列項(xiàng)變化規(guī)律: 第第i項(xiàng)分子項(xiàng)分子: ai=x2i-1=ai-1 * x * x; 分母分母: bi= (2i+1)!=bi-1* 2i*(2i+1); 符號(hào)符號(hào): s = s * (-1) ; 循環(huán)條件循環(huán)條件: 數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)=1e-6, 可采用可采用for語(yǔ)句也可采用語(yǔ)句也可采用while語(yǔ)句語(yǔ)句.! 9! 7! 5! 3)sin(9753xxxxxx.! 9! 7! 5! 3)sin(9753xxxxxx用for語(yǔ)句相應(yīng)程序如下:#include#includev

60、oid main() int i; / sum代表和,a為分子,b為分母 float x, sum, a, b; char s; /s代表符號(hào) printf(please input x:); scanf(%f, &x); s = 1; sum = 0; a = x; / 分子賦初值 b = 1; / 分母賦初值 for (i = 1; a / b = 1e-6; i+) sum = sum + s * a / b a = a * x * x; b = b * 2 * i * (2 * i + 1); s *= -1;/改變符號(hào)位 printf( sum = %fn, sum);該程序的運(yùn)行結(jié)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論