第05章_循環loop._第1頁
第05章_循環loop._第2頁
第05章_循環loop._第3頁
第05章_循環loop._第4頁
第05章_循環loop._第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、C語言程序設計語言程序設計1 1 C語言程序設計語言程序設計2C語言程序設計語言程序設計3C語言程序設計語言程序設計4if (age 18) if (age 55) price = 2.50; /* Price for senior citizens */elseprice = 5.00; /* Price for adults */else if (age 1)price = 0.0; /* Price for infants */elseprice = 1.50; /* for children & teenagers*/C語言程序設計語言程序設計5switch (month) case

2、1:printf(“Januaryn”);break;case 2:printf(“Februaryn”);break;case 3:printf(“Marchn”);break;default:printf(“Othersn”);break; printf(“End”);C語言程序設計語言程序設計6Exercise例例1 考慮下面程序輸出結果考慮下面程序輸出結果: main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); 結果

3、:-1C語言程序設計語言程序設計7Exercise:例例2 考慮下面程序輸出結果考慮下面程序輸出結果: int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); 結果:a=2,b=1C語言程序設計語言程序設計8if else 配對原則:缺省 時,else總是和它上面離它最近的未配對的if配對if()if()if()else.else.else.本章要點5.

4、1 5.1 概述概述5.2 5.2 用用whilewhile語句實現循環語句實現循環5.3 5.3 用用do-whiledo-while語句實現循環語句實現循環5.4 5.4 用用for for 語句實現循環語句實現循環 5.5 5.5 循環的嵌套循環的嵌套5.6 5.6 幾種循環的比較幾種循環的比較5.7 break5.7 break語句和語句和continuecontinue語句語句5.8 5.8 程程 序序 舉舉 例例C語言程序設計語言程序設計12什么是循環?什么是循環?為什么要使用循環?為什么要使用循環?1001nyn問題問題1 1:問題問題2:2:C語言程序設計語言程序設計13 if

5、 goto while do while forC語言程序設計語言程序設計14 Condition is tested firstCondition is tested laterC語言程序設計語言程序設計15 falsetrue Testing Condition FirstconditionStep xStep yStep aStep nC語言程序設計語言程序設計16 Step aconditionStep nStep xfalsetrueStep yTesting condition later C語言程序設計語言程序設計17Condition is tested firstCondit

6、ion is tested firstwhile語句用來實現“當型”循環結構。一般形式:一般形式: while (while (表達式表達式) ) 語句語句 當表達式為非0值時,執行while語句中的內嵌語句。其特點是:先判斷表達式,后執行語句。C語言程序設計語言程序設計18While LoopCount ControlledEvent Controlled Exact number of loops Exit loop after “n” times Boolean Flag Sentinel ValueExit loop when condition = “False” condition

7、 = Sentinel ValueC語言程序設計語言程序設計19例例5.2 求求1到到100的和的和#include void main() int i,sum=0; i=1; while (i=100) sum=sum+i; i+; printf(%dn,sum); 運行結果:運行結果:50505050循環控制表達式循環控制變量初值(1)循環體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現.(2)在循環體中應有使循環趨向于結循環趨向于結束的語句束的語句循環體C語言程序設計語言程序設計20scanf(“d%”,&iscanf(“d%”,&i););While(iWhile(i)

8、 ) ; C語言程序設計語言程序設計21 Read one or more data in each loop When should we stop reading ? Instruct user to enter a unique number called “Sentinel Value”While(c=getcharWhile(c=getchar()!=a)()!=a) ; C語言程序設計語言程序設計22do-while語句的特點:先執行循環體,然后判斷循環條件是否成立。 Statements in the loop are executed first at least once,

9、and condition is tested last 一般形式一般形式: : do do 循環體語句 whilewhile (表達式);執行過程:執行過程:先執行一次指定的循環體語句,然后先執行一次指定的循環體語句,然后判別表達式,當表達式的值為判別表達式,當表達式的值為非零非零(“(“真真”) ) 時時,返回重新執行循環體語句,如此反復,直到,返回重新執行循環體語句,如此反復,直到表達式的值等于表達式的值等于0 0為止,此時循環結束為止,此時循環結束。C語言程序設計語言程序設計23例例5.3 求求1到到100的和的和#include void main() int i,sum=0; i=

10、1; do sum=sum+i; i+; while(i=100); ; printf(%dn,sum); 運行結果:運行結果:505050501001nn注意:這里有注意:這里有個分號個分號C語言程序設計語言程序設計24whilewhile語句和用語句和用do-whiledo-while語句的比較語句的比較: :在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環的結果是不同的。C語言程序設計語言程序設計25例例5.4 while和和do-while循環的比較循環的比

11、較(1) #include (2) #include void main ( ) void main( ) int sum=0,i; int sum=0,i; scanf(“%d,&i); scanf(”%d,&i); while (i=10) do sum=sum+I; sum=sum+i;i+; i+; while (i=10);printf(“sum=%dn ,sum); printf(“sum=%dn”,sum); 1001nn運行結果:運行結果:11 sum=55 sum=55 再運行一次:再運行一次: 1111sum=0sum=0運行結果:運行結果:11 sum=55 sum=55

12、 再運行一次:再運行一次: 1111sum=11sum=11(1)當while后面的表達式的第一次的值為“真”時,兩種循環得到的結果相同。否則,二者結果不相同。C語言程序設計語言程序設計26Exercise: 思考題1:猜數游戲:先由計算機“想”一個數請人猜,如果人猜對了,則計算機給出提示:“Right!”, 否則提示:“Wrong!”,并告訴人所猜的數是大還是小。 思考題2:先由計算機“想”一個1到100之間的數請人猜,如果人猜對了,則結束游戲,否則計算機給出提示,告訴人所猜的數是太大還是太小,直到人猜對為止。計算機記錄人猜的次數,以此來反映猜數者“猜”的水平。 C語言程序設計語言程序設計2

13、7 隨機函數rand() #include RAND_MAX在stdlib.h中定義,不大于雙字節整數的最大值32767 產生0,RAND_MAX 之間的隨機數magic = rand(); 產生0,b-1 之間的隨機數magic = rand()%b; 產生a,a+b-1 之間的隨機數magic = rand()%b + a; 現場編程完成例思考題2,發現問題C語言程序設計語言程序設計28 隨機函數srand為函數rand()設置隨機數種子來實現對函數rand所產生的偽隨機數的 “隨機化” 通過鍵入隨機數種子,產生0,100之間的隨機數scanf(%u, &seed); srand(seed

14、); magic = rand() % 100 + 1; C語言程序設計語言程序設計29 C C語言中的語言中的forfor語句使用最為靈活,不僅可以用于語句使用最為靈活,不僅可以用于循環次數已經確定循環次數已經確定的情況,而且可以用于的情況,而且可以用于循環次循環次數不確定而只給出循環結束條件數不確定而只給出循環結束條件的情況,它完全的情況,它完全可以代替可以代替whilewhile語句語句。 一般形式一般形式: : Condition is tested first ,Loop is controlled by a counterC語言程序設計語言程序設計30SyntaxesSyntaxe

15、s forfor(表達式1;表達式2;表達式3) 語句for (initial value ; condition; update counter) statement;statement; C語言程序設計語言程序設計31The C statements:int x, sum, i;sum = 0;for (i = 0; i 5; i+) scanf(“%d”,&x);sum = sum + x;printf(“%d”,sum);C語言程序設計語言程序設計32 forfor(循環變量賦初值;循環條件;循環變量增值) 例如例如: : for(i=1;i=100;i+) sum=sum+i; 它相

16、當于以下語句: i=1; while(i=100) sum=sum+i;i+; 顯然,用for語句簡單、方便。 C語言程序設計語言程序設計33(1) “表達式1”可以省略,但應在for語句前給循環變量賦初值。如 for(;i=100;i+) sum=sum+i; (2) 如果表達式2省略,循環無終止地進行下去。例如:例如:for(i=1; ;i+) sum=sum+i; 相當于: i=1; while(1) sum=sum+1;i+;C語言程序設計語言程序設計34(4) 可以省略表達式1和表達式3,只有表達式2,即只給循環條件。如:如: for(;i=100;) while(i=100) su

17、m=sum+i; 相當于 sum=sum+i; i+; i+; 在這種情況下,完全等同于while語句。可見for語句比while語句功能強,除了可以給出循環條件外,還可以賦初值,使循環變量自動增值等。C語言程序設計語言程序設計35(5) 3個表達式都可省略,如:如: for(; ;) for(; ;) 語句語句 相當于 while(1) while(1) 語句語句 即不設初值,不判斷條件(認為表達式2為真值),循環變量不增值。無終止地執行循環體。 (6) 表達式1也可以是與循環變量無關的其他表達式。如如: : for (sum=0;i=100;i+) sum=sum+i; 表達式3也可以是與

18、循環控制無關的任意表達式。C語言程序設計語言程序設計36(7)表達式1和表達式3也可以是逗號表達式。如:如: for(sum=0,i=1;i=100;i+) sum=sum+i;或 for(i=0,j=100;i=j;i+,j-) k=i+j; 即同時設兩個初值,使兩個變量增值. 在逗號表達式內按自左至右順序求解,整個逗號表達式在逗號表達式內按自左至右順序求解,整個逗號表達式的值為其中最右邊的表達式的值。的值為其中最右邊的表達式的值。如如: : for(i=1;i=100;i+,i+) sum=sum+i;相當于 for(i=1;i=100;i=i+2) sum=sum+i;C語言程序設計語言

19、程序設計37(8) 表達式2一般是關系表達式(如i=100)或邏輯表達式 (如ab & xy),但也可以是數值表達式或字符表達式,只要其值為非零,就執行循環體。C語言程序設計語言程序設計38 for(i=0;(c=getchar()!=n;i+=c); 此for語句的循環體為空語句,把本來要在循環體內處理的內容放在表達式3中,作用是一樣的。可見for語句功能強,可以在表達式中完成本來應在循環體內完成的操作。C語言程序設計語言程序設計39 for( ;(c=getchar()!=n;) printf(%c,c);注意:從終端鍵盤向計算機輸入時,是在按Enter鍵以后才將一批數據一起送到內存緩沖區

20、中去的。運行情況:運行情況:ComputerComputer ( (輸入輸入) )Computer (Computer (輸出輸出) )C語言程序設計語言程序設計40 永遠不會退出的循環為死循環for (;) for (;) while (1) while (1) do do while (1) while (1) 一般情況下,要極力避免死循環絕大多數程序不需要死循環。如果出現,往往都是bug時間過長的循環會造成“假死”效果,也要考慮解決C語言程序設計語言程序設計41#includevoid main()int sum = 0;for (i = 1; i = 10; i+)if (?)/如果i

21、能被3整除sum = sum + i;printf(“sum = %dn”,sum);C語言程序設計語言程序設計42 一個循環體內又包含另一個完整的循環結構 稱為循環的嵌套。內嵌的循環中還可以嵌套 循環,這就是多層循環。 三種循環(while循環、do-while循環和for循 環)可以互相嵌套。C語言程序設計語言程序設計43 下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); C語言程序設計語言程序設計44(4) while( ) (5) for(;) (6) do do whil

22、e( ) for(;) while( ) while( ) 嵌套循環控制變量不能相同嵌套循環控制變量不能相同 內循環變化快,外循環變化慢內循環變化快,外循環變化慢 正確確定循環體正確確定循環體 C語言程序設計語言程序設計45 外層循環 內層循環 內層循環 內層循環 合法的嵌套循環 C語言程序設計語言程序設計46 求1-100之間奇數之和 求1-100之間奇數的個數 求1-100之間奇數的平均值 分別求1-100之間奇數之和 與 偶數之和C語言程序設計語言程序設計471+1/2+1/3+?關鍵:數據類型?見例子浮點型存儲帶來的問題:Float和double都不能保證精確的存儲一個小數C語言程序設

23、計語言程序設計48(1)(1)四種循環都可以用來處理同一問題,一般情況下它四種循環都可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡用們可以互相代替。但一般不提倡用gotogoto型循環。型循環。(2)(2)在在whilewhile循環和循環和do-whiledo-while循環中,為了使循環能正循環中,為了使循環能正常結束,應在常結束,應在循環體中包含使循環趨于結束的語句循環體中包含使循環趨于結束的語句( (如如i+i+,或,或i=i+1i=i+1等等) )。forfor語句的功能更強,凡用語句的功能更強,凡用whilewhile循環能完成的,用循環能完成的,用forfor循環

24、都能實現。循環都能實現。C語言程序設計語言程序設計49C語言程序設計語言程序設計50 (3)(3)用用whilewhile和和do-whiledo-while循環時,循環變量循環時,循環變量初始化初始化的操的操作應在作應在whilewhile和和do-whiledo-while語句語句之前之前完成。而完成。而forfor語句語句可以在表達式可以在表達式1 1中實現循環變量的初始化。中實現循環變量的初始化。(4)while(4)while循環、循環、do-whiledo-while循環和循環和forfor循環,可以循環,可以用用breakbreak語句跳出循環,用語句跳出循環,用continue

25、continue語句結束本語句結束本次循環,對用次循環,對用gotogoto語句和語句和if if語句構成的循環,不能用語句構成的循環,不能用breakbreak語句和語句和continuecontinue語句進行控制語句進行控制. .C語言程序設計語言程序設計515.8.1 break5.8.1 break語句語句 breakbreak語句可以用來從語句可以用來從循環體內跳出循環體循環體內跳出循環體,即提前,即提前結束循環,接著執行循環下面的語句結束循環,接著執行循環下面的語句 一般形式:一般形式: break;break;注意注意: :breakbreak語句不能用于循環語句和語句不能用于

26、循環語句和switchswitch語句之外語句之外的任何其他語句中。的任何其他語句中。 C語言程序設計語言程序設計52例例: : float pi=3.14159;float pi=3.14159;for(rfor(r=1;r=10;r+)=1;r100) 100) break;break; printf(r printf(r=%f,area=%f,area=%fn=%fn,r,arear,area);); C語言程序設計語言程序設計535.8.2 continue5.8.2 continue語句語句 作用為結束作用為結束本次循環本次循環,即跳過循環體中下面尚,即跳過循環體中下面尚未執行的語句

27、,接著進行下一次是否執行循未執行的語句,接著進行下一次是否執行循環的判定環的判定. .一般形式:一般形式: continue;continue;C語言程序設計語言程序設計54continue和break語句的區別 continue語句只結束本次循環,而不是終止整個循環的執行 break語句則是結束整個循環過程,不再判斷執行循環的條件是否成立 while(表達式1) for if(表達式2) break; 或者是或者是continue;C語言程序設計語言程序設計55例例5.5 把把100200之間的不能被之間的不能被3整除的數輸出。整除的數輸出。#include #include void ma

28、in()void main() int n; int n; for (n=100;n=200;n+) for (n=100;n=200;n+) if (n%3=0) if (n%3=0) continue;continue; printf(%d printf(%d ,n);n); 1001nnC語言程序設計語言程序設計56例例5.65.6 用/41-1/3+1/5-1/7+公式求的近似值,直到某一項的絕對值小于為止。N-SN-S結構化流程圖表示算法結構化流程圖表示算法 t=1,pi=0,n=1,s=1當|t|1e-6pi=pi+t;n=n+2;s=-s;t=s/npi=pi*4;輸出piC語言

29、程序設計語言程序設計57例例5.6 求求pi的近似值的近似值#include #include #include#includevoid main()void main() int s;float int s;float n n,t t,pi;pi; t=1 t=1;pi=0;n=1.0;s=1;pi=0;n=1.0;s=1; while(fabs(t)1e-6) while(fabs(t)1e-6) pi=pi+t;n=n+2;s=-s;t=s/n; pi=pi+t;n=n+2;s=-s;t=s/n; pi=pi pi=pi* *4;4; printf(pi printf(pi=%10.6f

30、=%10.6fnn,pi);pi); 1001nn運行結果:運行結果: pi= 3.141594C語言程序設計語言程序設計58例例5.75.7 求Fibonacci數列前40個數。這個數列有如下特點:第1,2兩個數為1,1。從第3個數開始,該數是其前面兩個數之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3) 1FC語言程序設計語言程序設計59例例5.7求求Fibonacci數列前數列前40個數。個數。#include void main() long int f1,f2; int i; f1=1;f2=1; for(i=1; i=20

31、; i+) printf(%12ld %12ld ,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f2+f1; 1001nn運行結果:運行結果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986

32、 102334155 C語言程序設計語言程序設計60例例5.85.8 判斷m是否素數。1FC語言程序設計語言程序設計61例例5.8判斷判斷m是否素數。是否素數。#include #include #include #include void main() void main() int int m m,i i,k;k; scanf(%d scanf(%d,&m);k=sqrt(m);&m);k=sqrt(m); for (i=2;i=k;i+) for (i=2;ik) printf(%d if(ik) printf(%d is a prime number is a prime number

33、nn,m);m);else printf(%delse printf(%d is not a prime number is not a prime numbernn,m);m); 運行結果:運行結果: 17 17 is a prime number C語言程序設計語言程序設計62例例5.9 求求100200間的全部素數。間的全部素數。#include #include # include # include void main() void main() int int m m,k k,i i,n=0;n=0; for(m=101;m=200;m=m+2) for(m=101;m=200;m

34、=m+2) k=sqrt(m); k=sqrt(m); for (i=2;i=k;i+) for (i=2;i=k+1)printf(%d if (i=k+1)printf(%d ,m);n=n+1;m);n=n+1;if(n%10=0) printfif(n%10=0) printf(n);n); printfprintf ( (n);n);1001nn運行結果:運行結果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 C語言程序設計語言程序設計63例例5.105.10 譯密碼。為使電文保密,往往按一定規律將其轉換成密碼,收

溫馨提示

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

評論

0/150

提交評論