C語言程序控制結構_第1頁
C語言程序控制結構_第2頁
C語言程序控制結構_第3頁
C語言程序控制結構_第4頁
C語言程序控制結構_第5頁
已閱讀5頁,還剩95頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第第4章章 程序控制結構程序控制結構l 主要內(nèi)容主要內(nèi)容4.1 C4.1 C語言的執(zhí)行語句語言的執(zhí)行語句4.2 4.2 順序結構順序結構4.3 4.3 選擇結構選擇結構4.4 4.4 循環(huán)結構循環(huán)結構34.1C語言的執(zhí)行語句語言的執(zhí)行語句 C語言的語句分為聲明語句和執(zhí)行語句。第語言的語句分為聲明語句和執(zhí)行語句。第3章介紹的變量章介紹的變量定義語句是最常見的聲明語句,定義語句是最常見的聲明語句,聲明語句在編譯時處理聲明語句在編譯時處理,在程,在程序序運行時不產(chǎn)生相應的操作運行時不產(chǎn)生相應的操作。執(zhí)行語句的作用是在程序運行時執(zhí)行語句的作用是在程序運行時向計算機系統(tǒng)發(fā)出操作命令向計算機系統(tǒng)發(fā)出操作

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

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

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

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

6、位,四個位,如圖如圖4-2中加陰影的部分。中加陰影的部分。void main() unsigned a,b,c,d; scanf(%x,&a); /* *以十六進制形式輸入整數(shù)以十六進制形式輸入整數(shù)a* */ b=a4; c=(0=5&a=10)例:輸入一個整數(shù)例:輸入一個整數(shù),求絕對值求絕對值.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單分支語句單分支語句#include main( ) c

7、har c; printf(input a letter:); c=getchar(); if(c=A&cb If ab 將將a a和和b b對換對換If ac If ac 將將a a和和c c對換對換If bc If bc 將將b b和和c c對換對換abacbca和b交換a和c交換c和b交換yyynn單分支語句單分支語句22單分支語句單分支語句232 2、if(if(表達式表達式) ) 語句語句1 1 else else 語句語句2 2 條件條件 語句語句1 語句語句2YN雙分支雙分支if-else語句語句24雙分支雙分支if-else語句語句說明:在說明:在if和和else后面后

8、面可以只含有一條語句可以只含有一條語句,也可也可以含有用花括號以含有用花括號 括起來的復合語句括起來的復合語句。如:。如: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例:例: 輸入兩個數(shù)并判斷兩數(shù)是否相等輸入兩個數(shù)并判斷兩數(shù)是否相等。#include void main( ) int a,b; printf(Enter integer

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

10、表達式m)m)語句語句m m else else 語句語句n n多分支語句多分支語句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;多分支語句

11、多分支語句31多分支語句多分支語句匹配規(guī)則:匹配規(guī)則:ElseElse總是與它上面的,最近的,統(tǒng)一復合語句中的,未配總是與它上面的,最近的,統(tǒng)一復合語句中的,未配對的對的ifif語句配對。語句配對。當當ifif和和elseelse數(shù)目不同時,可以加數(shù)目不同時,可以加花括號花括號來確定配對關系。來確定配對關系。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 多分支語句多分支語句3

12、334程序1: 程序2: if(x=0) y=-1; if(x0) 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;正確正確上例中的程序段有四個,請判斷哪個是正確的?上例中的程序段有四個,請判斷哪個是正確的?X=90) printf(An); else if (score=80) printf(Bn); else if (score=70) printf(Cn); else

13、if (score=60) printf(Dn); else printf(En); 37多分支語句多分支語句例例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語句語句switchswitch語句的格式:語句的格式:switchswitch (表達

14、式) case常量表達式:語句 break; case常量表達式:語句 break; case常量表達式:語句 break; default :語句 當表達式的值與某一個當表達式的值與某一個case后面的常量表達式的后面的常量表達式的值相值相等時等時,就,就從此從此case后面的語句開始執(zhí)行下去后面的語句開始執(zhí)行下去,若所有的,若所有的case中的常量表達式的值都中的常量表達式的值都沒有與表達式的值匹配的沒有與表達式的值匹配的,就就執(zhí)行執(zhí)行default后面的語句后面的語句。39switch語句語句case 1語句組語句組1break?case 2語句組語句組2break?case N語句組語

15、句組nbreak?是是是是是是否否否否否否有有無無無無無無有有有有case N+140switch語句語句執(zhí)行流程:執(zhí)行流程:n首先計算首先計算switch圓括號中表達式的值圓括號中表達式的值,然后將結果值按前,然后將結果值按前后順序依次與各個后順序依次與各個case后的常量表達式進行比較。后的常量表達式進行比較。n當表達式的值與某一個當表達式的值與某一個case后面的常量表達式的后面的常量表達式的值相等值相等時時,就執(zhí)行,就執(zhí)行該該case后邊的語句組后邊的語句組k,接著如果接著如果遇到遇到break語語句句, 則結束整個則結束整個switch語句語句(即退出即退出switch)。如果。如果

16、不遇到不遇到break語句語句,則按順序執(zhí)行下面其他則按順序執(zhí)行下面其他case后邊的語句組后邊的語句組, 直直至遇到至遇到break語句或最后邊的語句或最后邊的“”為止為止, 才結束才結束switch語語句句n當結果值與常量表達式當結果值與常量表達式k的值都不相等時的值都不相等時, 若有若有default, 則執(zhí)行其后語句則執(zhí)行其后語句;若無若無default, 則什么都沒執(zhí)行則什么都沒執(zhí)行41switch語句語句說明:說明:1)switch關鍵字,關鍵字,case也是關鍵字,與其后面的常量表達式也是關鍵字,與其后面的常量表達式合稱合稱case語句標號,常量表達式類型必須與語句標號,常量表達

17、式類型必須與switch后面表后面表達式類型相匹配,達式類型相匹配,且各且各case語句標號的值各不相同,不能語句標號的值各不相同,不能重復重復;default也是關鍵字也是關鍵字,起語句標號的作用,代表除了,起語句標號的作用,代表除了以上所有以上所有case標號之外的那些標號;標號之外的那些標號;2)語句)語句1、語句、語句2可以是一條語句,也可以是若干條可以是一條語句,也可以是若干條,在必要,在必要時,時, case語句標號后的語句可以省略不寫語句標號后的語句可以省略不寫;3) switch的表達式通常是的表達式通常是一個整型或字符型變量一個整型或字符型變量,也允許,也允許枚枚舉型變量舉型

18、變量,其結果,其結果為相應的整數(shù)、字符或枚舉常量為相應的整數(shù)、字符或枚舉常量;4)break語句不是一定需要加上,語句不是一定需要加上,執(zhí)行完一個執(zhí)行完一個case后面的語后面的語句,若沒有遇到句,若沒有遇到break,就自動進入下一個,就自動進入下一個case繼續(xù)執(zhí)行繼續(xù)執(zhí)行,而不再判斷是否與之匹配而不再判斷是否與之匹配。42當程序在執(zhí)行時,如果輸入的是當程序在執(zhí)行時,如果輸入的是A #include stdio.hmain()char a; a=getchar(); switch(a) case 65: printf(%c,A); case 66: printf(%c,B); defaul

19、t :printf(%sn,other); 43當程序在執(zhí)行時,屏幕上輸出為:當程序在執(zhí)行時,屏幕上輸出為: #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語句語句例例:要求按照考試成績的等級輸出百分制分數(shù)段,用要求按照考試成績的等級輸出百分制分數(shù)段,用switch語句實現(xiàn)語句實

20、現(xiàn)45補充例:輸入成績補充例:輸入成績, 用用A、B、C、D、F、R分別表示優(yōu)、分別表示優(yōu)、良、中、及格、不及格、補考、缺考。良、中、及格、不及格、補考、缺考。 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(不及格不及格); /* * 此處沒有此處沒有b

21、reak語句語句 * */ case R: case r: printf(請補考請補考);break; default: printf(輸入錯輸入錯); 46switch語句語句例:某幼兒園只收例:某幼兒園只收2至至6歲的兒童。歲的兒童。23歲入小班,歲入小班,4歲入中班,歲入中班,56歲入大班。根據(jù)輸入的年齡,求歲入大班。根據(jù)輸入的年齡,求應入的班級。應入的班級。 分析:分析:設年齡為設年齡為age,當,當age為為2和和3時,應輸出時,應輸出同樣的內(nèi)容同樣的內(nèi)容“入小班入小班”,age為為5和和6時輸出同樣的時輸出同樣的內(nèi)容內(nèi)容“入大班入大班”。該題算法比較簡單。該題算法比較簡單。47sw

22、itch語句語句#include void main() int age; 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) ;

23、 switch (x ) case 1: switch (y ) case 0: a+; case 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) ;運行結果:運行結果:輸入:輸入:x=1,y=0 輸出:輸出:a=2 b=2switch語句的嵌套語句的嵌套49選擇結構程序舉例選擇結構程序舉例例例4.13 輸入一個字符,判別該字符是數(shù)字、英文大寫字母、輸入一個字符,判別該字符是數(shù)字、英文大寫字母、小寫字母還是其它字符。小寫字母還是其它字符

24、。#include void main() char c; printf(input a char: );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選擇結構程序舉例選擇結構程序舉例例例4.14 輸入三角形三邊長,求三角形面積。輸入三角形三邊長,求三角形面積。#include void main() float a,b,c,s,area; scanf(%f,%f,%f,&a,&b,

25、&c); if ( a+bc & a+cb & b+ca ) s=(a+b+c)/2; area=sqrt(s* *(s-a)* *(s-b)* *(s-c); printf(area=%7.2fn,area); else printf(Not a triangle.n);51選擇結構程序舉例選擇結構程序舉例例例4.15 輸入輸入a、b、c三個整數(shù),輸出最大數(shù)和最小數(shù)。三個整數(shù),輸出最大數(shù)和最小數(shù)。 void main() int a,b,c,max,min; printf(input three numbers: ); scanf(%d,%d,%d,&a,&a

26、mp;b,&c); max = ab?a:b; min = amax) max=c; else if (c=6) printf(%dn, n); else printf(%dn, +n); 2對于整型變量對于整型變量a,賦值語句,賦值語句 a=(a%3=0?1:0); 與(與( )語)語句不等價。句不等價。 (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課堂練習課堂練習3以下程序的運行結果是(以下程

27、序的運行結果是( )。)。main() int n=c; switch(n+) default: printf(error ); break; case a: case b: printf(good ); break; case c: printf(pass ); case d: printf(warn ); 54循環(huán)結構循環(huán)結構n在許多問題中需要用到循環(huán)控制。循環(huán)結構是結在許多問題中需要用到循環(huán)控制。循環(huán)結構是結構化程序設計的基本結構之一,它和順序結構、構化程序設計的基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元選擇結構共同作為各種復雜程序的基本構造單元。n特點特點:

28、當給定的條件成立時:當給定的條件成立時, , 反復執(zhí)行某個程序反復執(zhí)行某個程序段,直到條件不成立為止。段,直到條件不成立為止。給定的條件稱為循環(huán)給定的條件稱為循環(huán)條件條件,反復執(zhí)行的程序段稱為循環(huán)體,反復執(zhí)行的程序段稱為循環(huán)體, , 它由它由C C的語的語句構成。句構成。nC語言提供了語言提供了3種循環(huán)結構:種循環(huán)結構:while語句;語句;do-while語句;語句;for語句語句554.4.1用用while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)whilewhile語句用來實現(xiàn)語句用來實現(xiàn)“當型當型”循環(huán)結構。循環(huán)結構。一般形式:一般形式: while (while (表達式表達式) ) 語句語句 當表達

29、式為非當表達式為非0 0值時,值時,執(zhí)行執(zhí)行whilewhile語句中的內(nèi)嵌語句中的內(nèi)嵌語句。語句。其特點是其特點是: :先判斷表達式,先判斷表達式,后執(zhí)行語句。后執(zhí)行語句。(1) 與與 if 的區(qū)別的區(qū)別, if 只一只一次次, while反復判斷反復判斷, 反復反復執(zhí)行執(zhí)行;(2) while 語句中通常有語句中通常有改變表達式的值的語句改變表達式的值的語句。56用用while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)例例4.18 計算計算1+2+100。main() int i=1, s=0; while ( i=100) s+=i; i+; printf(%d, %d, i, s); getch();1

30、.1.如果缺少如果缺少i+i+這一行會出現(xiàn)這一行會出現(xiàn)什么情況?什么情況?2.2.若計算若計算:n!:n!該該程序應如何修程序應如何修改改? ?57例例4.19 根據(jù)公式根據(jù)公式 計算計算的值。的值。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語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)例例4.21 猴子

31、吃桃問題:猴子摘下了一堆桃子,第一天吃總數(shù)猴子吃桃問題:猴子摘下了一堆桃子,第一天吃總數(shù)的一半多一個,第二天吃剩下的一半多一個,以后每天都吃的一半多一個,第二天吃剩下的一半多一個,以后每天都吃前一天剩下的一半多一個,到第十天想再吃時剩一個,求猴前一天剩下的一半多一個,到第十天想再吃時剩一個,求猴子摘了多少個桃子?子摘了多少個桃子?算法分析算法分析: 設第設第 i 天未吃前有天未吃前有 x i 個桃子個桃子, 由題意得由題意得: x1/2-1=x2 x2/2-1=x3 x9/2-1=x10已知已知x10=1, 我們有我們有: x10=1 xn-1=(xn+1)* *2void main( ) i

32、nt k,x1,x2; k=1; x2=1; while(k=9) x1=(x2+1)*2; x2=x1; k+; printf(Total number=%dn,x1);59用用while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)補充補充1. 統(tǒng)計從鍵盤輸入的統(tǒng)計從鍵盤輸入的字符個數(shù)。字符個數(shù)。(以回車結束以回車結束)補充補充2. 從鍵盤輸入一個整數(shù)從鍵盤輸入一個整數(shù)(至少大于至少大于9), 求最高位的數(shù)求最高位的數(shù)字字. #include main( ) int count=0; while (getchar() !=n) count+; printf(count=%d,count); 這種結構的循環(huán)次這種

33、結構的循環(huán)次數(shù)是不確定的。數(shù)是不確定的。while (d9) d=d/10; /* 反復執(zhí)行反復執(zhí)行d=d/10 */ printf(最高位是最高位是%d,d);也可寫成:也可寫成:while (d/=10)9); /* 空循環(huán)體空循環(huán)體,反復執(zhí)行反復執(zhí)行d=d/10 */ printf(最高位是最高位是%d,d);604.4.2用用do-whiledo-while實現(xiàn)循環(huán)實現(xiàn)循環(huán) do-whiledo-while語句的特語句的特點點: :先執(zhí)行循環(huán)體,然先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否后判斷循環(huán)條件是否成立。成立。一般形式般形式: : do 循環(huán)體語句循環(huán)體語句 while (表達式表達式

34、); 執(zhí)行過程:執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句先執(zhí)行一次指定的循環(huán)體語句,然,然后判別表達式,當表達式的值為非零后判別表達式,當表達式的值為非零(“(“真真”) ) 時,返回重新執(zhí)行循環(huán)體語句,時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于如此反復,直到表達式的值等于0 0為止,此為止,此時循環(huán)結束。時循環(huán)結束。61用用do-whiledo-while實現(xiàn)循環(huán)實現(xiàn)循環(huán)n用用do-while計算計算 : 1+2+100。main() int i=1, s=0; do s=s+i; i+; while ( i=100); printf(%d, %d, i, s); getch();

35、計算:計算: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* *4; printf(pi=%10.6fn, pi);7151311463while和和dowhile循環(huán)的比較循環(huán)的比較644.4.3用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)nC C語言中的語言中的forfor語句使用最為靈活,不僅可以用于循環(huán)次數(shù)語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結束條件的情況,它完

36、全可以代替循環(huán)結束條件的情況,它完全可以代替whilewhile語句。語句。n一般形式一般形式: : for(for(表達式表達式1 1;表達式;表達式2 2;表達式;表達式3) 3) 循環(huán)體循環(huán)體也可寫作:也可寫作:for(for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) )循環(huán)體循環(huán)體65用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)forfor語句的執(zhí)行過程:語句的執(zhí)行過程: (1) (1) 先求解表達式先求解表達式1 1。 (2) (2) 求解表達式求解表達式2 2,若其值為,若其值為真真( (值為非值為非0)0),則執(zhí)行,則執(zhí)行forfor語語句中指定的內(nèi)嵌

37、語句,然后句中指定的內(nèi)嵌語句,然后執(zhí)行下面第執(zhí)行下面第(3)(3)步。若為假步。若為假( (值為值為0)0),則結束循環(huán),轉(zhuǎn)到,則結束循環(huán),轉(zhuǎn)到第第(5)(5)步。步。 (3) (3) 求解表達式求解表達式3 3。 (4) (4) 轉(zhuǎn)回上面第轉(zhuǎn)回上面第(2)(2)步驟繼續(xù)步驟繼續(xù)執(zhí)行。執(zhí)行。 (5) (5) 循環(huán)結束,執(zhí)行循環(huán)結束,執(zhí)行forfor語句語句下面的一個語句下面的一個語句 66n用用for循環(huán)計算循環(huán)計算 : 1+2+100。main( ) int i, s=0; for (i=1; i=100; i+) /* * 注意括號后沒有分號注意括號后沒有分號 * */ s=s+i; /*

38、 * 求和求和: 1+2+3+100 * */ printf(%d, s);變量變量i用于控制循環(huán)次數(shù)用于控制循環(huán)次數(shù), 我們稱其為循環(huán)控制變量我們稱其為循環(huán)控制變量。1. 最后最后i的值是多少的值是多少?2. 從從1加到加到10000或或更多呢更多呢?用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)67說明:說明:n表達式表達式1,表達式,表達式2和表達式和表達式3之間之間必須用分號隔開必須用分號隔開,但表,但表達式達式3后面不能加分號。后面不能加分號。n循環(huán)體如果循環(huán)體如果包含一個以上的語句,應該用花括弧括起來包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現(xiàn)。以復合語句形式出現(xiàn)。n循環(huán)體有可能

39、一次也不執(zhí)行循環(huán)體有可能一次也不執(zhí)行。 n循環(huán)體循環(huán)體可以為空可以為空。n表達式表達式1和表達式和表達式3都可以為逗號表達式。(例)都可以為逗號表達式。(例)n表達式表達式1,表達式,表達式2和表達式和表達式3都可省略,但不鼓勵省略表都可省略,但不鼓勵省略表達式達式2和表達式和表達式3。(例:省略表達式。(例:省略表達式1)nfor語句循環(huán)與語句循環(huán)與while循環(huán)可以互相轉(zhuǎn)換,但循環(huán)可以互相轉(zhuǎn)換,但for循環(huán)的結構循環(huán)的結構更簡潔。更簡潔。68for語句的省略形式語句的省略形式例例(1): i=1; for ( ; i=1000; i+) sum=sum+i ; 例例(2): for (i=

40、1; i1000) break ;sum=sum+i ;1)表達式)表達式1可省略,但分號不能省可省略,但分號不能省,在在for語句前為變量賦初語句前為變量賦初值值;2)表達式表達式3也可省略,但也可省略,但應把其放入循環(huán)體內(nèi)應把其放入循環(huán)體內(nèi),否則,否則for無法無法正常結束;正常結束;3)表達式)表達式2省略后,省略后,for語句將無限循環(huán)下去。語句將無限循環(huán)下去??稍谘h(huán)體內(nèi)可在循環(huán)體內(nèi)加退出循環(huán)的語句加退出循環(huán)的語句69for語句的省略形式語句的省略形式4)表達式)表達式1和表達式和表達式3可以是一個簡單的表達式,也可以是可以是一個簡單的表達式,也可以是一個逗號表達式,一個逗號表達式,

41、表達式表達式1和表達式和表達式3也可以是與循環(huán)無關也可以是與循環(huán)無關的任意表達式的任意表達式;5)三個表達式全省略,無終止執(zhí)行循環(huán)體,)三個表達式全省略,無終止執(zhí)行循環(huán)體,分號不能省分號不能省;6)把循環(huán)體內(nèi)容放到表達式)把循環(huán)體內(nèi)容放到表達式3,循環(huán)體為空語句。盡量避免,循環(huán)體為空語句。盡量避免此寫法此寫法例例(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語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)例例4.25 求求1!+

42、2!+10!的值。的值。void main() int i, n=10; long s, t; for(i=1, t=1, s=0; i=n; i+) t* *=i; /* *t為上一個數(shù)為上一個數(shù)i-1的階乘值,再乘以的階乘值,再乘以i,即,即i!=(i-1)!* *i* */ s+=t; /* *累加累加i!* */ printf (s=%ldn, s);71用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)例例4.27 編程輸出編程輸出“斐波那契數(shù)列斐波那契數(shù)列”的前的前20項。項。“斐波那契數(shù)列斐波那契數(shù)列”是意大利中世紀數(shù)學家列昂納多是意大利中世紀數(shù)學家列昂納多斐波那契斐波那契以兔子繁殖為例子而引入

43、的,故又稱為以兔子繁殖為例子而引入的,故又稱為“兔子數(shù)列兔子數(shù)列”。main() int i, x1=1, x2=1; for(i=1; i=10; i+) /* *每次生成并輸出兩項,所以循環(huán)每次生成并輸出兩項,所以循環(huán)10次次* */ printf(%10d %10d , x1, x2); if(i%2=0) printf(n); /* *當當i為偶數(shù)時換行,即每四個換行為偶數(shù)時換行,即每四個換行* */ x1=x1+x2; x2=x2+x1; 72用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)最簡單的寫法最簡單的寫法:main() int i, j, k=10000; for (i=1, j=0;

44、i=k; i=i+j, j=i-j) printf( %d,i );這里這里: i 表示表示fibonacci(n) i=i+j; 即即 第第n項項=第第n-1項項+第第n-2項項 j=i-j; 即即 第第n-1項項=第第n項項-第第n-2項項 使使i存放當前項存放當前項, j存放前一項存放前一項程序運行結果為:程序運行結果為: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765734.4.4 continue語句和語句和break語句語句1. break語句語句 (1)在在while、 for、 dowhile

45、語句的循環(huán)體或語句的循環(huán)體或switch語句的語句組中語句的語句組中, 使用使用break語句可使程語句可使程序立即退出該結構。故有中斷語句之稱。序立即退出該結構。故有中斷語句之稱。 其語法格式如下:其語法格式如下: break; (2)功能:功能:用用在循環(huán)語句或在循環(huán)語句或switch語句中語句中,使得跳出使得跳出循環(huán)體或分支,提前結束循環(huán)或分支。循環(huán)體或分支,提前結束循環(huán)或分支。74continue語句和語句和break語句語句#include void main() int i; for (i=1 ; ; i+) if (!(512-i* *15)%13)break; printf(%

46、d+%d=512n, i* *15, 512-i* *15);例例4.28 將數(shù)字將數(shù)字512表表示成兩個數(shù)的和,這示成兩個數(shù)的和,這兩個數(shù)分別為兩個數(shù)分別為15和和13的倍數(shù)。的倍數(shù)。運行結果:運行結果: 135+377=51275continue語句和語句和break語句語句 說明說明l break只能只能終止并終止并跳出最近一層的循環(huán)跳出最近一層的循環(huán)結構。結構。l break不能用于循不能用于循環(huán)語句和環(huán)語句和switch語句語句之外的任何其它語句之外的任何其它語句之中。之中。l 在循環(huán)語句中,在循環(huán)語句中,break總是與選擇語總是與選擇語句配合使用。句配合使用。main() int

47、 i, s; s=0; for (i=1;i5) break; printf(%dn, s); 76continue語句和語句和break語句語句2. continue語句語句n一般形式:一般形式: continue;功能:功能:用用在循環(huán)語句中在循環(huán)語句中,使得使得結束本次循環(huán),即跳過循環(huán)結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。環(huán)的判定。 補充例題:補充例題: for (i=1; i=10; i+) if ( i%2=0 ) continue; printf(“%d”, i); 該程序的功能是:只打印出

48、單數(shù)該程序的功能是:只打印出單數(shù)77continue語句和語句和break語句語句n 說明說明:ncontinue只能終止本只能終止本次循環(huán)次循環(huán),而不是終止整而不是終止整個循環(huán)的執(zhí)行個循環(huán)的執(zhí)行。n continue不能用于循不能用于循環(huán)語句之外的環(huán)語句之外的任何其它任何其它語句之中語句之中.ncontinue總是與選擇總是與選擇語句配合使用。語句配合使用。n例例4.29 輸出輸出100200之間所之間所有能被有能被7或或9整除的數(shù)。整除的數(shù)。78continue語句和語句和break語句語句補充例:計算輸入的補充例:計算輸入的10個整數(shù)中正數(shù)的個數(shù)及正數(shù)平均值。個整數(shù)中正數(shù)的個數(shù)及正數(shù)平均

49、值。 main() int i,n,a; float s=0.0; printf(請輸入請輸入10個整數(shù):個整數(shù):n); for (n=0,i=0;i10;i+) scanf(%d,&a); if (a0) 下兩句要加下兩句要加 */ s+=a; n+; printf(共有共有%d個正數(shù)個正數(shù).其平均值為其平均值為%f。n,n,s/n); 793. continue和和break的區(qū)別的區(qū)別:continue語句只是結束本次循環(huán),而不是終止整語句只是結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行,而個循環(huán)的執(zhí)行,而break語句則是結束整個循環(huán)語句則是結束整個循環(huán)過程,不再判斷條件是否成立。過

50、程,不再判斷條件是否成立。80continue語句和語句和break語句語句main() int i, a=0, b=0, c=0, d=0; for (i=1;i=4;i+) switch(i) case 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語句和語句和break語句語句main() int k=4

51、,n=0; clrscr(); for (;n=1; i-) /*總共要輸出總共要輸出8行星號行星號*/ for(j=1; j=8-i; j+) printf( ); /*控制每行星號前面顯示的空格控制每行星號前面顯示的空格*/ for(k=1; k=2*i-1; k+) printf(*); /*控制每行星號的個數(shù)控制每行星號的個數(shù)*/ printf(n); /*控制輸出每行星號后換行控制輸出每行星號后換行*/ 85循環(huán)的嵌套循環(huán)的嵌套例例4.31 改寫例改寫例4.25 求求1!+2!+10!的程序,用嵌的程序,用嵌套的循環(huán)結構套的循環(huán)結構來實現(xiàn)。來實現(xiàn)。main() int i, n=10

52、, j; long s=0, t; for(i=1; i=n; i+) for(t=1, j=1; j=i; j+) t*=j; / /* *每次循環(huán)都重新計算每次循環(huán)都重新計算i i!* */ / 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

53、;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+j*j*j+k*k*k; if (m1=m2) printf(%4d,m1); printf(n);87程序舉例程序舉例數(shù)的分離數(shù)的分離例例4.33 編寫一編寫一個程序,輸入個程序,輸入132767之間之間的整數(shù),把這的整數(shù),把這個整數(shù)顯示為個整數(shù)顯示為一系列數(shù)字,一系列數(shù)字,每組數(shù)字都是每組數(shù)字都是用兩個空格分用兩個空格分開。例如,整開。例如,整數(shù)數(shù)1234應該顯應該顯示為:示為:1 2 3 4。 main() int i,num,counter,temp;

54、counter=1; printf(Enter an integer: ); scanf(%d,&num); temp=num; while(temp/10) /*計算位數(shù)計算位數(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:

55、 %8.2fn, x);89程序舉例程序舉例多項式計算多項式計算例例4.35 編程計算多項式編程計算多項式 的值。的值。void main() float sum, term, 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(! 7

56、x5!x! 3x1x12n1n753!90程序舉例程序舉例數(shù)的判別數(shù)的判別例4.36 輸入一個數(shù),判斷這個數(shù)是否為素數(shù)。void main() int m, i, k; printf(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)相除法求兩法求兩個數(shù)的個數(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;

溫馨提示

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

最新文檔

評論

0/150

提交評論