C語(yǔ)言程序控制結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序控制結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序控制結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言程序控制結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言程序控制結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩95頁(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第第4章章 程序控制結(jié)構(gòu)程序控制結(jié)構(gòu)l 主要內(nèi)容主要內(nèi)容4.1 C4.1 C語(yǔ)言的執(zhí)行語(yǔ)句語(yǔ)言的執(zhí)行語(yǔ)句4.2 4.2 順序結(jié)構(gòu)順序結(jié)構(gòu)4.3 4.3 選擇結(jié)構(gòu)選擇結(jié)構(gòu)4.4 4.4 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)34.1C語(yǔ)言的執(zhí)行語(yǔ)句語(yǔ)言的執(zhí)行語(yǔ)句 C語(yǔ)言的語(yǔ)句分為聲明語(yǔ)句和執(zhí)行語(yǔ)句。第語(yǔ)言的語(yǔ)句分為聲明語(yǔ)句和執(zhí)行語(yǔ)句。第3章介紹的變量章介紹的變量定義語(yǔ)句是最常見的聲明語(yǔ)句,定義語(yǔ)句是最常見的聲明語(yǔ)句,聲明語(yǔ)句在編譯時(shí)處理聲明語(yǔ)句在編譯時(shí)處理,在程,在程序序運(yùn)行時(shí)不產(chǎn)生相應(yīng)的操作運(yùn)行時(shí)不產(chǎn)生相應(yīng)的操作。執(zhí)行語(yǔ)句的作用是在程序運(yùn)行時(shí)執(zhí)行語(yǔ)句的作用是在程序運(yùn)行時(shí)向計(jì)算機(jī)系統(tǒng)發(fā)出操作命令向計(jì)算機(jī)系統(tǒng)發(fā)出操作

2、命令,使計(jì)算機(jī)執(zhí)行特定的操作,使計(jì)算機(jī)執(zhí)行特定的操作. C語(yǔ)句語(yǔ)句:以以“;”作作結(jié)束結(jié)束符符,編譯后產(chǎn)生機(jī)器指令編譯后產(chǎn)生機(jī)器指令。 C語(yǔ)句分類:語(yǔ)句分類:u表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句u空語(yǔ)句空語(yǔ)句u控制語(yǔ)句控制語(yǔ)句u復(fù)合語(yǔ)句復(fù)合語(yǔ)句44.1.1表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句是在表達(dá)式的末尾加上分號(hào)構(gòu)成的語(yǔ)句。表達(dá)式語(yǔ)句是在表達(dá)式的末尾加上分號(hào)構(gòu)成的語(yǔ)句。nz=x+sin(y); na-=a* *a; 賦值語(yǔ)句賦值語(yǔ)句ni+; 自增自增1語(yǔ)句語(yǔ)句nx=0,y=1; 逗號(hào)表達(dá)式語(yǔ)句逗號(hào)表達(dá)式語(yǔ)句nx+y; 無(wú)意義無(wú)意義nprintf(“This is a C program.n”); 函數(shù)調(diào)用語(yǔ)句函

3、數(shù)調(diào)用語(yǔ)句賦值語(yǔ)句和函數(shù)調(diào)用語(yǔ)句賦值語(yǔ)句和函數(shù)調(diào)用語(yǔ)句是使用最多的表達(dá)式語(yǔ)句是使用最多的表達(dá)式語(yǔ)句54.1.2空語(yǔ)句空語(yǔ)句n僅由一個(gè)僅由一個(gè)“;”構(gòu)成的語(yǔ)句構(gòu)成的語(yǔ)句n只是在邏輯上起到一個(gè)語(yǔ)句的作用,在編譯時(shí)不只是在邏輯上起到一個(gè)語(yǔ)句的作用,在編譯時(shí)不產(chǎn)生任何指令,在執(zhí)行時(shí)不產(chǎn)生任何操作。產(chǎn)生任何指令,在執(zhí)行時(shí)不產(chǎn)生任何操作。n作用:作用:n構(gòu)成標(biāo)號(hào)語(yǔ)句,標(biāo)示流程的轉(zhuǎn)向點(diǎn);構(gòu)成標(biāo)號(hào)語(yǔ)句,標(biāo)示流程的轉(zhuǎn)向點(diǎn);n構(gòu)成循環(huán)語(yǔ)句中空循環(huán)體構(gòu)成循環(huán)語(yǔ)句中空循環(huán)體。n例如:例如:while(getchar()!=n) ;n只要從鍵盤上輸入的字符不是回車則重新輸入。只要從鍵盤上輸入的字符不是回車則重新輸入。6

4、4.1.3復(fù)合語(yǔ)句復(fù)合語(yǔ)句用用 括起來(lái)的一組語(yǔ)句。括起來(lái)的一組語(yǔ)句。一般形式:一般形式: 執(zhí)行語(yǔ)句;執(zhí)行語(yǔ)句; 74.1.4控制語(yǔ)句控制語(yǔ)句n控制語(yǔ)句:完成一定的控制功能控制語(yǔ)句:完成一定的控制功能。84.2順序結(jié)構(gòu)順序結(jié)構(gòu)n流程圖流程圖流程圖是表示算法的一種工具,用一些圖框來(lái)流程圖是表示算法的一種工具,用一些圖框來(lái)表示各種操作。表示各種操作。 一個(gè)流程圖包括以下幾部分一個(gè)流程圖包括以下幾部分 :n表示相應(yīng)操作的框;表示相應(yīng)操作的框;n帶箭頭的流程線;帶箭頭的流程線;n框內(nèi)外必要的文字說(shuō)明??騼?nèi)外必要的文字說(shuō)明。9順序結(jié)構(gòu)順序結(jié)構(gòu)n常用的流程圖符號(hào):常用的流程圖符號(hào):起止框起止框判斷框判斷框處

5、理框處理框輸入輸入/輸出框輸出框注釋框注釋框流向線流向線連接點(diǎn)連接點(diǎn)10順序結(jié)構(gòu)順序結(jié)構(gòu)n結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)結(jié)構(gòu)化程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)順序結(jié)構(gòu):按書寫順序執(zhí)行的語(yǔ)句構(gòu)成的程序段按書寫順序執(zhí)行的語(yǔ)句構(gòu)成的程序段ABAB流程圖N-S圖11n例例4.1 輸入任意兩個(gè)整數(shù),求它們的和及平均值。輸入任意兩個(gè)整數(shù),求它們的和及平均值。要求平均值取兩位小數(shù)輸出。要求平均值取兩位小數(shù)輸出。12n例例4.2 給定一個(gè)三位正整數(shù),分別輸出其個(gè)位數(shù)、十位數(shù)給定一個(gè)三位正整數(shù),分別輸出其個(gè)位數(shù)、十位數(shù)和百位數(shù)。和百位數(shù)。13n例例4.3 取一個(gè)取一個(gè)16位的二進(jìn)制數(shù)位的二進(jìn)制數(shù)a的的7、6、5、4四個(gè)位,

6、四個(gè)位,如圖如圖4-2中加陰影的部分。中加陰影的部分。void main() unsigned a,b,c,d; scanf(%x,&a); /* *以十六進(jìn)制形式輸入整數(shù)以十六進(jìn)制形式輸入整數(shù)a* */ b=a4; c=(0=5&a=10)例:輸入一個(gè)整數(shù)例:輸入一個(gè)整數(shù),求絕對(duì)值求絕對(duì)值.main( )int i ;scanf(%d,&i);if (i 0) i= -i ;printf(%d, i);例:執(zhí)行下列程序段例:執(zhí)行下列程序段后后 a 的值是的值是_。 int a=3; if (2) a=5;19單分支語(yǔ)句單分支語(yǔ)句#include main( ) char c; printf(

7、input a letter:); c=getchar(); if(c=A&cb If ab 將將a a和和b b對(duì)換對(duì)換If ac If ac 將將a a和和c c對(duì)換對(duì)換If bc If bc 將將b b和和c c對(duì)換對(duì)換abacbca和b交換a和c交換c和b交換yyynn單分支語(yǔ)句單分支語(yǔ)句22單分支語(yǔ)句單分支語(yǔ)句232 2、if(if(表達(dá)式表達(dá)式) ) 語(yǔ)句語(yǔ)句1 1 else else 語(yǔ)句語(yǔ)句2 2 條件條件 語(yǔ)句語(yǔ)句1 語(yǔ)句語(yǔ)句2YN雙分支雙分支if-else語(yǔ)句語(yǔ)句24雙分支雙分支if-else語(yǔ)句語(yǔ)句說(shuō)明:在說(shuō)明:在if和和else后面后面可以只含有一條語(yǔ)句可以只含有一條語(yǔ)

8、句,也可也可以含有用花括號(hào)以含有用花括號(hào) 括起來(lái)的復(fù)合語(yǔ)句括起來(lái)的復(fù)合語(yǔ)句。如:。如:if (a+b)c&(b+c)a&(c+a)b) s=0.5* *(a+b+c); area=sqrt(s* *(s-a)* *(s-b)* *(s-c); printf(area=%6.2f,area); else printf(it is not a trilateral. );25n例:例: 輸入兩個(gè)數(shù)并判斷兩數(shù)是否相等輸入兩個(gè)數(shù)并判斷兩數(shù)是否相等。#include void main( ) int a,b; printf(Enter integer a:); scanf(%d,&a); printf(

9、Enter integer b:); scanf(%d,&b); if(a=b) printf(a=bn); else printf(a!=bn); 雙分支雙分支if-else語(yǔ)句語(yǔ)句26分析以下程序的輸出結(jié)果:分析以下程序的輸出結(jié)果:27283.多分支語(yǔ)句多分支語(yǔ)句幾種形式:幾種形式: 293 3、ifif(表達(dá)式(表達(dá)式1 1)語(yǔ)句)語(yǔ)句1 1 else if( else if(表達(dá)式表達(dá)式2)2)語(yǔ)句語(yǔ)句2 2 else if( else if(表達(dá)式表達(dá)式3)3)語(yǔ)句語(yǔ)句3 3 else if( else if(表達(dá)式表達(dá)式m)m)語(yǔ)句語(yǔ)句m m else else 語(yǔ)句語(yǔ)句n n多分

10、支語(yǔ)句多分支語(yǔ)句30例: if (number500)cost=0.15;if (number500)cost=0.15; else if(number300)cost=0.10; else if(number300)cost=0.10; else if(number100)cost=0.075; else if(number100)cost=0.075; else if(number50)cost=0.05; else if(number50)cost=0.05; else cost=0; else cost=0;多分支語(yǔ)句多分支語(yǔ)句31多分支語(yǔ)句多分支語(yǔ)句匹配規(guī)則:匹配規(guī)則:ElseEls

11、e總是與它上面的,最近的,統(tǒng)一復(fù)合語(yǔ)句中的,未配總是與它上面的,最近的,統(tǒng)一復(fù)合語(yǔ)句中的,未配對(duì)的對(duì)的ifif語(yǔ)句配對(duì)。語(yǔ)句配對(duì)。當(dāng)當(dāng)ifif和和elseelse數(shù)目不同時(shí),可以加數(shù)目不同時(shí),可以加花括號(hào)花括號(hào)來(lái)確定配對(duì)關(guān)系。來(lái)確定配對(duì)關(guān)系。32 -1 (x0)算法算法1 1: 算法算法1 1:輸入輸入x x 輸入輸入x x若若x0,x0,則則y=-1 y=-1 若若x0,x0,x0,則則y=1 y=1 若若x=0,x=0,則則y=0y=0輸出輸出y y 若若x0,x0,則則y=1y=1 輸出輸出y y 多分支語(yǔ)句多分支語(yǔ)句3334程序1: 程序2: if(x=0) y=-1; if(x0)

12、y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1;程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;正確正確上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的?上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的?X=90) printf(An); else if (score=80) printf(Bn); else if (score=70) printf(Cn); else if (score=60) printf(Dn); else pri

13、ntf(En); 37多分支語(yǔ)句多分支語(yǔ)句例例4.8 分段函數(shù)定義如右:分段函數(shù)定義如右:根據(jù)所輸入的根據(jù)所輸入的x的值,求函數(shù)的值,求函數(shù)值。值。main ( ) float x,y; scanf(%f,&x); if(x0) y=0; else if (x=50) y=x; else y=x* *x; printf(x=%f,y=%fn,x,y); )50()500 () 0(0)(2xxxxxxfy384.3.2 switch語(yǔ)句語(yǔ)句switchswitch語(yǔ)句的格式:語(yǔ)句的格式:switchswitch (表達(dá)式) case常量表達(dá)式:語(yǔ)句 break; case常量表達(dá)式:語(yǔ)句 br

14、eak; case常量表達(dá)式:語(yǔ)句 break; default :語(yǔ)句 當(dāng)表達(dá)式的值與某一個(gè)當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的后面的常量表達(dá)式的值相值相等時(shí)等時(shí),就,就從此從此case后面的語(yǔ)句開始執(zhí)行下去后面的語(yǔ)句開始執(zhí)行下去,若所有的,若所有的case中的常量表達(dá)式的值都中的常量表達(dá)式的值都沒(méi)有與表達(dá)式的值匹配的沒(méi)有與表達(dá)式的值匹配的,就就執(zhí)行執(zhí)行default后面的語(yǔ)句后面的語(yǔ)句。39switch語(yǔ)句語(yǔ)句case 1語(yǔ)句組語(yǔ)句組1break?case 2語(yǔ)句組語(yǔ)句組2break?case N語(yǔ)句組語(yǔ)句組nbreak?是是是是是是否否否否否否有有無(wú)無(wú)無(wú)無(wú)無(wú)無(wú)有有有有case

15、N+140switch語(yǔ)句語(yǔ)句執(zhí)行流程:執(zhí)行流程:n首先計(jì)算首先計(jì)算switch圓括號(hào)中表達(dá)式的值圓括號(hào)中表達(dá)式的值,然后將結(jié)果值按前,然后將結(jié)果值按前后順序依次與各個(gè)后順序依次與各個(gè)case后的常量表達(dá)式進(jìn)行比較。后的常量表達(dá)式進(jìn)行比較。n當(dāng)表達(dá)式的值與某一個(gè)當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的后面的常量表達(dá)式的值相等值相等時(shí)時(shí),就執(zhí)行,就執(zhí)行該該case后邊的語(yǔ)句組后邊的語(yǔ)句組k,接著如果接著如果遇到遇到break語(yǔ)語(yǔ)句句, 則結(jié)束整個(gè)則結(jié)束整個(gè)switch語(yǔ)句語(yǔ)句(即退出即退出switch)。如果。如果不遇到不遇到break語(yǔ)句語(yǔ)句,則按順序執(zhí)行下面其他則按順序執(zhí)行下面其他ca

16、se后邊的語(yǔ)句組后邊的語(yǔ)句組, 直直至遇到至遇到break語(yǔ)句或最后邊的語(yǔ)句或最后邊的“”為止為止, 才結(jié)束才結(jié)束switch語(yǔ)語(yǔ)句句n當(dāng)結(jié)果值與常量表達(dá)式當(dāng)結(jié)果值與常量表達(dá)式k的值都不相等時(shí)的值都不相等時(shí), 若有若有default, 則執(zhí)行其后語(yǔ)句則執(zhí)行其后語(yǔ)句;若無(wú)若無(wú)default, 則什么都沒(méi)執(zhí)行則什么都沒(méi)執(zhí)行41switch語(yǔ)句語(yǔ)句說(shuō)明:說(shuō)明:1)switch關(guān)鍵字,關(guān)鍵字,case也是關(guān)鍵字,與其后面的常量表達(dá)式也是關(guān)鍵字,與其后面的常量表達(dá)式合稱合稱case語(yǔ)句標(biāo)號(hào),常量表達(dá)式類型必須與語(yǔ)句標(biāo)號(hào),常量表達(dá)式類型必須與switch后面表后面表達(dá)式類型相匹配,達(dá)式類型相匹配,且各且各

17、case語(yǔ)句標(biāo)號(hào)的值各不相同,不能語(yǔ)句標(biāo)號(hào)的值各不相同,不能重復(fù)重復(fù);default也是關(guān)鍵字也是關(guān)鍵字,起語(yǔ)句標(biāo)號(hào)的作用,代表除了,起語(yǔ)句標(biāo)號(hào)的作用,代表除了以上所有以上所有case標(biāo)號(hào)之外的那些標(biāo)號(hào);標(biāo)號(hào)之外的那些標(biāo)號(hào);2)語(yǔ)句)語(yǔ)句1、語(yǔ)句、語(yǔ)句2可以是一條語(yǔ)句,也可以是若干條可以是一條語(yǔ)句,也可以是若干條,在必要,在必要時(shí),時(shí), case語(yǔ)句標(biāo)號(hào)后的語(yǔ)句可以省略不寫語(yǔ)句標(biāo)號(hào)后的語(yǔ)句可以省略不寫;3) switch的表達(dá)式通常是的表達(dá)式通常是一個(gè)整型或字符型變量一個(gè)整型或字符型變量,也允許,也允許枚枚舉型變量舉型變量,其結(jié)果,其結(jié)果為相應(yīng)的整數(shù)、字符或枚舉常量為相應(yīng)的整數(shù)、字符或枚舉常量

18、;4)break語(yǔ)句不是一定需要加上,語(yǔ)句不是一定需要加上,執(zhí)行完一個(gè)執(zhí)行完一個(gè)case后面的語(yǔ)后面的語(yǔ)句,若沒(méi)有遇到句,若沒(méi)有遇到break,就自動(dòng)進(jìn)入下一個(gè),就自動(dòng)進(jìn)入下一個(gè)case繼續(xù)執(zhí)行繼續(xù)執(zhí)行,而不再判斷是否與之匹配而不再判斷是否與之匹配。42當(dāng)程序在執(zhí)行時(shí),如果輸入的是當(dāng)程序在執(zhí)行時(shí),如果輸入的是A #include stdio.hmain()char a; a=getchar(); switch(a) case 65: printf(%c,A); case 66: printf(%c,B); default :printf(%sn,other); 43當(dāng)程序在執(zhí)行時(shí),屏幕上輸出為

19、:當(dāng)程序在執(zhí)行時(shí),屏幕上輸出為: #include stdio.hmain() int k=2; switch(k) case 1: printf(%dn,k+);break; case 2: printf(%d,k+); case 3: printf(%dn,k+);break; cade 4: printf(%dn,k+); default :printf(Full!n“); 44switch語(yǔ)句語(yǔ)句例例:要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,用要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,用switch語(yǔ)句實(shí)現(xiàn)語(yǔ)句實(shí)現(xiàn)45補(bǔ)充例:輸入成績(jī)補(bǔ)充例:輸入成績(jī), 用用A、B、C、D、F、R分別表示

20、優(yōu)、分別表示優(yōu)、良、中、及格、不及格、補(bǔ)考、缺考。良、中、及格、不及格、補(bǔ)考、缺考。 grade=getchar( ); switch (grade) case A: case a: printf(優(yōu)優(yōu));break; case B: case b: printf(良良);break; case C: case c: printf(中中);break; case D: case d: printf(及格及格);break; case F : case f : printf(不及格不及格); /* * 此處沒(méi)有此處沒(méi)有break語(yǔ)句語(yǔ)句 * */ case R: case r: printf(請(qǐng)

21、補(bǔ)考請(qǐng)補(bǔ)考);break; default: printf(輸入錯(cuò)輸入錯(cuò)); 46switch語(yǔ)句語(yǔ)句例:某幼兒園只收例:某幼兒園只收2至至6歲的兒童。歲的兒童。23歲入小班,歲入小班,4歲入中班,歲入中班,56歲入大班。根據(jù)輸入的年齡,求歲入大班。根據(jù)輸入的年齡,求應(yīng)入的班級(jí)。應(yīng)入的班級(jí)。 分析:分析:設(shè)年齡為設(shè)年齡為age,當(dāng),當(dāng)age為為2和和3時(shí),應(yīng)輸出時(shí),應(yīng)輸出同樣的內(nèi)容同樣的內(nèi)容“入小班入小班”,age為為5和和6時(shí)輸出同樣的時(shí)輸出同樣的內(nèi)容內(nèi)容“入大班入大班”。該題算法比較簡(jiǎn)單。該題算法比較簡(jiǎn)單。47switch語(yǔ)句語(yǔ)句#include void main() int age;

22、printf(Please enter age: ); scanf(%d, &age); switch(age) case 2: case 3:printf(入小班入小班n); break; case 4:printf(入中班入中班n); break; case 5: case 6:printf(入大班入大班n); break; default:printf(不能入園不能入園n); 48void main() int x,y,a=0,b=0; scanf(x=%d,y=%d, &x, &y) ; switch (x ) case 1: switch (y ) case 0: a+; case

23、1: b+; default: a+; b+; break; case 2: a+=2; b+=2; break; default : a+=3; b+=3; printf(a=%d,b=%dn,a ,b) ;運(yùn)行結(jié)果:運(yùn)行結(jié)果:輸入:輸入:x=1,y=0 輸出:輸出:a=2 b=2switch語(yǔ)句的嵌套語(yǔ)句的嵌套49選擇結(jié)構(gòu)程序舉例選擇結(jié)構(gòu)程序舉例例例4.13 輸入一個(gè)字符,判別該字符是數(shù)字、英文大寫字母、輸入一個(gè)字符,判別該字符是數(shù)字、英文大寫字母、小寫字母還是其它字符。小寫字母還是其它字符。#include void main() char c; printf(input a char:

24、 );c=getchar();if (c=0&c=A&c=a&c=z) printf(This is a small letter.n);else printf(This is an other character.n);50選擇結(jié)構(gòu)程序舉例選擇結(jié)構(gòu)程序舉例例例4.14 輸入三角形三邊長(zhǎng),求三角形面積。輸入三角形三邊長(zhǎng),求三角形面積。#include void main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,&c); if ( a+bc & a+cb & b+ca ) s=(a+b+c)/2; area=sqrt(s* *(s-a)* *(s-b

25、)* *(s-c); printf(area=%7.2fn,area); else printf(Not a triangle.n);51選擇結(jié)構(gòu)程序舉例選擇結(jié)構(gòu)程序舉例例例4.15 輸入輸入a、b、c三個(gè)整數(shù),輸出最大數(shù)和最小數(shù)。三個(gè)整數(shù),輸出最大數(shù)和最小數(shù)。 void main() int a,b,c,max,min; printf(input three numbers: ); scanf(%d,%d,%d,&a,&b,&c); max = ab?a:b; min = amax) max=c; else if (c=6) printf(%dn, n); else printf(%dn,

26、+n); 2對(duì)于整型變量對(duì)于整型變量a,賦值語(yǔ)句,賦值語(yǔ)句 a=(a%3=0?1:0); 與(與( )語(yǔ))語(yǔ)句不等價(jià)。句不等價(jià)。 (A) if (a%3=0) a=1; else a=0; (B) if (a%3!=0) a=0; else a=1; (C) if (a%3) a=0; else a=1; (D) if (a%3) a=1; else a=0;53課堂練習(xí)課堂練習(xí)3以下程序的運(yùn)行結(jié)果是(以下程序的運(yùn)行結(jié)果是( )。)。main() int n=c; switch(n+) default: printf(error ); break; case a: case b: printf

27、(good ); break; case c: printf(pass ); case d: printf(warn ); 54循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)n在許多問(wèn)題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)在許多問(wèn)題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、構(gòu)化程序設(shè)計(jì)的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元選擇結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元。n特點(diǎn)特點(diǎn):當(dāng)給定的條件成立時(shí):當(dāng)給定的條件成立時(shí), , 反復(fù)執(zhí)行某個(gè)程序反復(fù)執(zhí)行某個(gè)程序段,直到條件不成立為止。段,直到條件不成立為止。給定的條件稱為循環(huán)給定的條件稱為循環(huán)條件條件,反復(fù)執(zhí)行的程序段

28、稱為循環(huán)體,反復(fù)執(zhí)行的程序段稱為循環(huán)體, , 它由它由C C的語(yǔ)的語(yǔ)句構(gòu)成。句構(gòu)成。nC語(yǔ)言提供了語(yǔ)言提供了3種循環(huán)結(jié)構(gòu):種循環(huán)結(jié)構(gòu):while語(yǔ)句;語(yǔ)句;do-while語(yǔ)句;語(yǔ)句;for語(yǔ)句語(yǔ)句554.4.1用用while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)whilewhile語(yǔ)句用來(lái)實(shí)現(xiàn)語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型當(dāng)型”循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)。一般形式:一般形式: while (while (表達(dá)式表達(dá)式) ) 語(yǔ)句語(yǔ)句 當(dāng)表達(dá)式為非當(dāng)表達(dá)式為非0 0值時(shí),值時(shí),執(zhí)行執(zhí)行whilewhile語(yǔ)句中的內(nèi)嵌語(yǔ)句中的內(nèi)嵌語(yǔ)句。語(yǔ)句。其特點(diǎn)是其特點(diǎn)是: :先判斷表達(dá)式,先判斷表達(dá)式,后執(zhí)行語(yǔ)句。后執(zhí)行語(yǔ)句。(1) 與與

29、if 的區(qū)別的區(qū)別, if 只一只一次次, while反復(fù)判斷反復(fù)判斷, 反復(fù)反復(fù)執(zhí)行執(zhí)行;(2) while 語(yǔ)句中通常有語(yǔ)句中通常有改變表達(dá)式的值的語(yǔ)句改變表達(dá)式的值的語(yǔ)句。56用用while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)例例4.18 計(jì)算計(jì)算1+2+100。main() int i=1, s=0; while ( i=100) s+=i; i+; printf(%d, %d, i, s); getch();1.1.如果缺少如果缺少i+i+這一行會(huì)出現(xiàn)這一行會(huì)出現(xiàn)什么情況?什么情況?2.2.若計(jì)算若計(jì)算:n!:n!該該程序應(yīng)如何修程序應(yīng)如何修改改? ?57例例4.19 根據(jù)公式根據(jù)公式 計(jì)算計(jì)算

30、的值。的值。2222n1312116#include void main() int i=1, n; double pi=0; printf(Input an integer:n); scanf(%d, &n); while(i=n) pi+=1.0/(i*i); i+; pi=sqrt(pi*6); printf(pi=%lfn, pi);58用用while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)例例4.21 猴子吃桃問(wèn)題:猴子摘下了一堆桃子,第一天吃總數(shù)猴子吃桃問(wèn)題:猴子摘下了一堆桃子,第一天吃總數(shù)的一半多一個(gè),第二天吃剩下的一半多一個(gè),以后每天都吃的一半多一個(gè),第二天吃剩下的一半多一個(gè),以后每天都吃前一

31、天剩下的一半多一個(gè),到第十天想再吃時(shí)剩一個(gè),求猴前一天剩下的一半多一個(gè),到第十天想再吃時(shí)剩一個(gè),求猴子摘了多少個(gè)桃子?子摘了多少個(gè)桃子?算法分析算法分析: 設(shè)第設(shè)第 i 天未吃前有天未吃前有 x i 個(gè)桃子個(gè)桃子, 由題意得由題意得: x1/2-1=x2 x2/2-1=x3 x9/2-1=x10已知已知x10=1, 我們有我們有: x10=1 xn-1=(xn+1)* *2void main( ) int k,x1,x2; k=1; x2=1; while(k=9) x1=(x2+1)*2; x2=x1; k+; printf(Total number=%dn,x1);59用用while語(yǔ)句實(shí)

32、現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)補(bǔ)充補(bǔ)充1. 統(tǒng)計(jì)從鍵盤輸入的統(tǒng)計(jì)從鍵盤輸入的字符個(gè)數(shù)。字符個(gè)數(shù)。(以回車結(jié)束以回車結(jié)束)補(bǔ)充補(bǔ)充2. 從鍵盤輸入一個(gè)整數(shù)從鍵盤輸入一個(gè)整數(shù)(至少大于至少大于9), 求最高位的數(shù)求最高位的數(shù)字字. #include main( ) int count=0; while (getchar() !=n) count+; printf(count=%d,count); 這種結(jié)構(gòu)的循環(huán)次這種結(jié)構(gòu)的循環(huán)次數(shù)是不確定的。數(shù)是不確定的。while (d9) d=d/10; /* 反復(fù)執(zhí)行反復(fù)執(zhí)行d=d/10 */ printf(最高位是最高位是%d,d);也可寫成:也可寫成:while (

33、d/=10)9); /* 空循環(huán)體空循環(huán)體,反復(fù)執(zhí)行反復(fù)執(zhí)行d=d/10 */ printf(最高位是最高位是%d,d);604.4.2用用do-whiledo-while實(shí)現(xiàn)循環(huán)實(shí)現(xiàn)循環(huán) do-whiledo-while語(yǔ)句的特語(yǔ)句的特點(diǎn)點(diǎn): :先執(zhí)行循環(huán)體,然先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否后判斷循環(huán)條件是否成立。成立。一般形式般形式: : do 循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 while (表達(dá)式表達(dá)式); 執(zhí)行過(guò)程:執(zhí)行過(guò)程:先執(zhí)行一次指定的循環(huán)體語(yǔ)句先執(zhí)行一次指定的循環(huán)體語(yǔ)句,然,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“(“真真”) ) 時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)

34、句,時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)句,如此反復(fù),直到表達(dá)式的值等于如此反復(fù),直到表達(dá)式的值等于0 0為止,此為止,此時(shí)循環(huán)結(jié)束。時(shí)循環(huán)結(jié)束。61用用do-whiledo-while實(shí)現(xiàn)循環(huán)實(shí)現(xiàn)循環(huán)n用用do-while計(jì)算計(jì)算 : 1+2+100。main() int i=1, s=0; do s=s+i; i+; while ( i=100); printf(%d, %d, i, s); getch();計(jì)算:計(jì)算:1-3+5-7+101main() int i=1,s=0; int s=1,t=1; do s=s+t* *i; i=i+2 t=-t; while(i1e-6); pi=pi* *

35、4; printf(pi=%10.6fn, pi);7151311463while和和dowhile循環(huán)的比較循環(huán)的比較644.4.3用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)nC C語(yǔ)言中的語(yǔ)言中的forfor語(yǔ)句使用最為靈活,不僅可以用于循環(huán)次數(shù)語(yǔ)句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替循環(huán)結(jié)束條件的情況,它完全可以代替whilewhile語(yǔ)句。語(yǔ)句。n一般形式一般形式: : for(for(表達(dá)式表達(dá)式1 1;表達(dá)式;表達(dá)式2 2;表達(dá)式;表達(dá)式3) 3) 循環(huán)體循環(huán)

36、體也可寫作:也可寫作:for(for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) )循環(huán)體循環(huán)體65用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)forfor語(yǔ)句的執(zhí)行過(guò)程:語(yǔ)句的執(zhí)行過(guò)程: (1) (1) 先求解表達(dá)式先求解表達(dá)式1 1。 (2) (2) 求解表達(dá)式求解表達(dá)式2 2,若其值為,若其值為真真( (值為非值為非0)0),則執(zhí)行,則執(zhí)行forfor語(yǔ)語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第執(zhí)行下面第(3)(3)步。若為假步。若為假( (值為值為0)0),則結(jié)束循環(huán),轉(zhuǎn)到,則結(jié)束循環(huán),轉(zhuǎn)到第第(5)(5)步。步。 (3) (3) 求解表達(dá)式

37、求解表達(dá)式3 3。 (4) (4) 轉(zhuǎn)回上面第轉(zhuǎn)回上面第(2)(2)步驟繼續(xù)步驟繼續(xù)執(zhí)行。執(zhí)行。 (5) (5) 循環(huán)結(jié)束,執(zhí)行循環(huán)結(jié)束,執(zhí)行forfor語(yǔ)句語(yǔ)句下面的一個(gè)語(yǔ)句下面的一個(gè)語(yǔ)句 66n用用for循環(huán)計(jì)算循環(huán)計(jì)算 : 1+2+100。main( ) int i, s=0; for (i=1; i=100; i+) /* * 注意括號(hào)后沒(méi)有分號(hào)注意括號(hào)后沒(méi)有分號(hào) * */ s=s+i; /* * 求和求和: 1+2+3+100 * */ printf(%d, s);變量變量i用于控制循環(huán)次數(shù)用于控制循環(huán)次數(shù), 我們稱其為循環(huán)控制變量我們稱其為循環(huán)控制變量。1. 最后最后i的值是多少的

38、值是多少?2. 從從1加到加到10000或或更多呢更多呢?用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)67說(shuō)明:說(shuō)明:n表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2和表達(dá)式和表達(dá)式3之間之間必須用分號(hào)隔開必須用分號(hào)隔開,但表,但表達(dá)式達(dá)式3后面不能加分號(hào)。后面不能加分號(hào)。n循環(huán)體如果循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái)包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。以復(fù)合語(yǔ)句形式出現(xiàn)。n循環(huán)體有可能一次也不執(zhí)行循環(huán)體有可能一次也不執(zhí)行。 n循環(huán)體循環(huán)體可以為空可以為空。n表達(dá)式表達(dá)式1和表達(dá)式和表達(dá)式3都可以為逗號(hào)表達(dá)式。(例)都可以為逗號(hào)表達(dá)式。(例)n表達(dá)式表達(dá)式1,表達(dá)式,表達(dá)式2和表

39、達(dá)式和表達(dá)式3都可省略,但不鼓勵(lì)省略表都可省略,但不鼓勵(lì)省略表達(dá)式達(dá)式2和表達(dá)式和表達(dá)式3。(例:省略表達(dá)式。(例:省略表達(dá)式1)nfor語(yǔ)句循環(huán)與語(yǔ)句循環(huán)與while循環(huán)可以互相轉(zhuǎn)換,但循環(huán)可以互相轉(zhuǎn)換,但for循環(huán)的結(jié)構(gòu)循環(huán)的結(jié)構(gòu)更簡(jiǎn)潔。更簡(jiǎn)潔。68for語(yǔ)句的省略形式語(yǔ)句的省略形式例例(1): i=1; for ( ; i=1000; i+) sum=sum+i ; 例例(2): for (i=1; i1000) break ;sum=sum+i ;1)表達(dá)式)表達(dá)式1可省略,但分號(hào)不能省可省略,但分號(hào)不能省,在在for語(yǔ)句前為變量賦初語(yǔ)句前為變量賦初值值;2)表達(dá)式表達(dá)式3也可省略,但

40、也可省略,但應(yīng)把其放入循環(huán)體內(nèi)應(yīng)把其放入循環(huán)體內(nèi),否則,否則for無(wú)法無(wú)法正常結(jié)束;正常結(jié)束;3)表達(dá)式)表達(dá)式2省略后,省略后,for語(yǔ)句將無(wú)限循環(huán)下去。語(yǔ)句將無(wú)限循環(huán)下去??稍谘h(huán)體內(nèi)可在循環(huán)體內(nèi)加退出循環(huán)的語(yǔ)句加退出循環(huán)的語(yǔ)句69for語(yǔ)句的省略形式語(yǔ)句的省略形式4)表達(dá)式)表達(dá)式1和表達(dá)式和表達(dá)式3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是一個(gè)逗號(hào)表達(dá)式,一個(gè)逗號(hào)表達(dá)式,表達(dá)式表達(dá)式1和表達(dá)式和表達(dá)式3也可以是與循環(huán)無(wú)關(guān)也可以是與循環(huán)無(wú)關(guān)的任意表達(dá)式的任意表達(dá)式;5)三個(gè)表達(dá)式全省略,無(wú)終止執(zhí)行循環(huán)體,)三個(gè)表達(dá)式全省略,無(wú)終止執(zhí)行循環(huán)體,分號(hào)不能省分號(hào)不能??;6

41、)把循環(huán)體內(nèi)容放到表達(dá)式)把循環(huán)體內(nèi)容放到表達(dá)式3,循環(huán)體為空語(yǔ)句。盡量避免,循環(huán)體為空語(yǔ)句。盡量避免此寫法此寫法例例(4): i=1,sum=0; for (p=0 ; i1000; sum=sum+i, i+) ;例例(5): i=1,sum=0; for (; ; ) sum=sum+i ; i+; if (i100) break; 70用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)例例4.25 求求1!+2!+10!的值。的值。void main() int i, n=10; long s, t; for(i=1, t=1, s=0; i=n; i+) t* *=i; /* *t為上一個(gè)數(shù)為上一個(gè)

42、數(shù)i-1的階乘值,再乘以的階乘值,再乘以i,即,即i!=(i-1)!* *i* */ s+=t; /* *累加累加i!* */ printf (s=%ldn, s);71用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)例例4.27 編程輸出編程輸出“斐波那契數(shù)列斐波那契數(shù)列”的前的前20項(xiàng)。項(xiàng)。“斐波那契數(shù)列斐波那契數(shù)列”是意大利中世紀(jì)數(shù)學(xué)家列昂納多是意大利中世紀(jì)數(shù)學(xué)家列昂納多斐波那契斐波那契以兔子繁殖為例子而引入的,故又稱為以兔子繁殖為例子而引入的,故又稱為“兔子數(shù)列兔子數(shù)列”。main() int i, x1=1, x2=1; for(i=1; i=10; i+) /* *每次生成并輸出兩項(xiàng),所以循環(huán)每

43、次生成并輸出兩項(xiàng),所以循環(huán)10次次* */ printf(%10d %10d , x1, x2); if(i%2=0) printf(n); /* *當(dāng)當(dāng)i為偶數(shù)時(shí)換行,即每四個(gè)換行為偶數(shù)時(shí)換行,即每四個(gè)換行* */ x1=x1+x2; x2=x2+x1; 72用用for語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán)最簡(jiǎn)單的寫法最簡(jiǎn)單的寫法:main() int i, j, k=10000; for (i=1, j=0; i=k; i=i+j, j=i-j) printf( %d,i );這里這里: i 表示表示fibonacci(n) i=i+j; 即即 第第n項(xiàng)項(xiàng)=第第n-1項(xiàng)項(xiàng)+第第n-2項(xiàng)項(xiàng) j=i-j;

44、即即 第第n-1項(xiàng)項(xiàng)=第第n項(xiàng)項(xiàng)-第第n-2項(xiàng)項(xiàng) 使使i存放當(dāng)前項(xiàng)存放當(dāng)前項(xiàng), j存放前一項(xiàng)存放前一項(xiàng)程序運(yùn)行結(jié)果為:程序運(yùn)行結(jié)果為: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765734.4.4 continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句1. break語(yǔ)句語(yǔ)句 (1)在在while、 for、 dowhile語(yǔ)句的循環(huán)體或語(yǔ)句的循環(huán)體或switch語(yǔ)句的語(yǔ)句組中語(yǔ)句的語(yǔ)句組中, 使用使用break語(yǔ)句可使程語(yǔ)句可使程序立即退出該結(jié)構(gòu)。故有中斷語(yǔ)句之稱。序立即退出該結(jié)構(gòu)。故有中斷語(yǔ)句之稱。 其語(yǔ)法格式如

45、下:其語(yǔ)法格式如下: break; (2)功能:功能:用用在循環(huán)語(yǔ)句或在循環(huán)語(yǔ)句或switch語(yǔ)句中語(yǔ)句中,使得跳出使得跳出循環(huán)體或分支,提前結(jié)束循環(huán)或分支。循環(huán)體或分支,提前結(jié)束循環(huán)或分支。74continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句#include void main() int i; for (i=1 ; ; i+) if (!(512-i* *15)%13)break; printf(%d+%d=512n, i* *15, 512-i* *15);例例4.28 將數(shù)字將數(shù)字512表表示成兩個(gè)數(shù)的和,這示成兩個(gè)數(shù)的和,這兩個(gè)數(shù)分別為兩個(gè)數(shù)分別為15和和13的倍數(shù)。的倍數(shù)。運(yùn)行結(jié)果:

46、運(yùn)行結(jié)果: 135+377=51275continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句 說(shuō)明說(shuō)明l break只能只能終止并終止并跳出最近一層的循環(huán)跳出最近一層的循環(huán)結(jié)構(gòu)。結(jié)構(gòu)。l break不能用于循不能用于循環(huán)語(yǔ)句和環(huán)語(yǔ)句和switch語(yǔ)句語(yǔ)句之外的任何其它語(yǔ)句之外的任何其它語(yǔ)句之中。之中。l 在循環(huán)語(yǔ)句中,在循環(huán)語(yǔ)句中,break總是與選擇語(yǔ)總是與選擇語(yǔ)句配合使用。句配合使用。main() int i, s; s=0; for (i=1;i5) break; printf(%dn, s); 76continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句2. continue語(yǔ)句語(yǔ)句n一般形式:一般形式

47、: continue;功能:功能:用用在循環(huán)語(yǔ)句中在循環(huán)語(yǔ)句中,使得使得結(jié)束本次循環(huán),即跳過(guò)循環(huán)結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。環(huán)的判定。 補(bǔ)充例題:補(bǔ)充例題: for (i=1; i=10; i+) if ( i%2=0 ) continue; printf(“%d”, i); 該程序的功能是:只打印出單數(shù)該程序的功能是:只打印出單數(shù)77continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句n 說(shuō)明說(shuō)明:ncontinue只能只能終止本終止本次循環(huán)次循環(huán),而不是終止整而不是終止整個(gè)循環(huán)的執(zhí)行個(gè)循環(huán)的執(zhí)行

48、。n continue不能用于循不能用于循環(huán)語(yǔ)句之外的環(huán)語(yǔ)句之外的任何其它任何其它語(yǔ)句之中語(yǔ)句之中.ncontinue總是與選擇總是與選擇語(yǔ)句配合使用。語(yǔ)句配合使用。n例例4.29 輸出輸出100200之間所之間所有能被有能被7或或9整除的數(shù)。整除的數(shù)。78continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句補(bǔ)充例:計(jì)算輸入的補(bǔ)充例:計(jì)算輸入的10個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及正數(shù)平均值。個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及正數(shù)平均值。 main() int i,n,a; float s=0.0; printf(請(qǐng)輸入請(qǐng)輸入10個(gè)整數(shù):個(gè)整數(shù):n); for (n=0,i=0;i10;i+) scanf(%d,&a); if

49、 (a0) 下兩句要加下兩句要加 */ s+=a; n+; printf(共有共有%d個(gè)正數(shù)個(gè)正數(shù).其平均值為其平均值為%f。n,n,s/n); 793. continue和和break的區(qū)別的區(qū)別:continue語(yǔ)句只是結(jié)束本次循環(huán),而不是終止整語(yǔ)句只是結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,而個(gè)循環(huán)的執(zhí)行,而break語(yǔ)句則是結(jié)束整個(gè)循環(huán)語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷條件是否成立。過(guò)程,不再判斷條件是否成立。80continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句main() int i, a=0, b=0, c=0, d=0; for (i=1;i=4;i+) switch(i) cas

50、e 1 : a=1; continue; case 2 : b=2; case 3 : c=3; break; case 4 : d=4; printf(%d%d%d%dn, a, b, c, d); main() int i, s; s=0; for (i=1;i5) break; printf(%dn, s); 81continue語(yǔ)句和語(yǔ)句和break語(yǔ)句語(yǔ)句main() int k=4,n=0; clrscr(); for (;n=1; i-) /*總共要輸出總共要輸出8行星號(hào)行星號(hào)*/ for(j=1; j=8-i; j+) printf( ); /*控制每行星號(hào)前面顯示的空格控制每

51、行星號(hào)前面顯示的空格*/ for(k=1; k=2* *i-1; k+) printf(*); /*控制每行星號(hào)的個(gè)數(shù)控制每行星號(hào)的個(gè)數(shù)*/ printf(n); /*控制輸出每行星號(hào)后換行控制輸出每行星號(hào)后換行*/ 85循環(huán)的嵌套循環(huán)的嵌套例例4.31 改寫例改寫例4.25 求求1!+2!+10!的程序,用嵌的程序,用嵌套的循環(huán)結(jié)構(gòu)套的循環(huán)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。來(lái)實(shí)現(xiàn)。main() int i, n=10, j; long s=0, t; for(i=1; i=n; i+) for(t=1, j=1; j=i; j+) t* *=j; / /* *每次循環(huán)都重新計(jì)算每次循環(huán)都重新計(jì)算i i!* */

52、/ s+=t; / /* *累加累加i!i!* */ / printf (s=%ldn,s);86程序舉例程序舉例窮舉法窮舉法例例4.32 三位三位自方冪數(shù)又自方冪數(shù)又稱水仙花數(shù),稱水仙花數(shù),用窮舉法求用窮舉法求出所有水仙出所有水仙花數(shù)。如:花數(shù)。如:13+53+33=153main() int i,j,k,m1,m2; printf(narcissus numbers are: ); for(i=1;i=9;i+) for(j=0;j=9;j+) for(k=0;k=9;k+) m1=i* *100+j* *10+k; m2=i* *i* *i i+j* *j* *j+k* *k* *k;

53、if (m1=m2) printf(%4d,m1); printf(n);87程序舉例程序舉例數(shù)的分離數(shù)的分離例例4.33 編寫一編寫一個(gè)程序,輸入個(gè)程序,輸入132767之間之間的整數(shù),把這的整數(shù),把這個(gè)整數(shù)顯示為個(gè)整數(shù)顯示為一系列數(shù)字,一系列數(shù)字,每組數(shù)字都是每組數(shù)字都是用兩個(gè)空格分用兩個(gè)空格分開。例如,整開。例如,整數(shù)數(shù)1234應(yīng)該顯應(yīng)該顯示為:示為:1 2 3 4。 main() int i,num,counter,temp; counter=1; printf(Enter an integer: ); scanf(%d,&num); temp=num; while(temp/10)

54、/*計(jì)算位數(shù)計(jì)算位數(shù)*/ temp/=10; counter+; while(counter) temp=1; for(i=1;i=0); do x=(x1+x2)/2; y=(x+1.1)*x+0.9)*x-1.4; y1=(x1+1.1)*x1+0.9)*x1-1.4; if (y*y10) x1=x; else x2=x; while(fabs(y)=1e-6); printf(A root of equation is: %8.2fn, x);89程序舉例程序舉例多項(xiàng)式計(jì)算多項(xiàng)式計(jì)算例例4.35 編程計(jì)算多項(xiàng)式編程計(jì)算多項(xiàng)式 的值。的值。void main() float sum, t

55、erm, x; int n, k, sign; printf(Input n, x: n); scanf(%d,%f, &n, &x); sum=x; term=x; sign=1; for(k=2; k=n; k+) term* *=x* *x/(2* *k-2)/(2* *k-1); sign=-sign; sum+=sign* *term; printf(sum=%fn, sum);)!12n(x) 1(! 7x5!x! 3x1x12n1n753!90程序舉例程序舉例數(shù)的判別數(shù)的判別例4.36 輸入一個(gè)數(shù),判斷這個(gè)數(shù)是否為素?cái)?shù)。void main() int m, i, k; print

56、f(Enter an integer:n); scanf(%d,&m); k=m/2; for(i=2; ik) printf(%d is a prime numbern,m); else printf(%d is not a prime numbern,m);91程序舉例程序舉例輾轉(zhuǎn)相除法輾轉(zhuǎn)相除法例例4.37 用輾用輾轉(zhuǎn)相除轉(zhuǎn)相除法求兩法求兩個(gè)數(shù)的個(gè)數(shù)的最大公最大公約數(shù)和約數(shù)和最小公最小公倍數(shù)。倍數(shù)。void main() int a,b,m,n,temp,c,d; printf(Please enter 2 integers n,m:n); scanf(%d,%d,&m,&n); d=m*n; while(temp) a=mn?m:n; b=m=n?m:n;

溫馨提示

  • 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)論