C語言-循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁
C語言-循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁
C語言-循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁
C語言-循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁
C語言-循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、5.15.1 程序中需要用循環(huán)結(jié)構(gòu)程序中需要用循環(huán)結(jié)構(gòu)5.25.2 用用whilewhile語句和語句和do-whiledo-while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán)5.35.3 用用for for 語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán) 5.45.4 循環(huán)的嵌套循環(huán)的嵌套5.55.5 用用breakbreak語句和語句和continuecontinue語句改變循環(huán)狀態(tài)語句改變循環(huán)狀態(tài)5.65.6 幾種循環(huán)的比較幾種循環(huán)的比較5.75.7 程序舉例程序舉例5.85.8 提高部分提高部分什么是循環(huán)?為什么要使用循環(huán)?1001nyn問題1:問題2:分數(shù)相加后除以課數(shù) 在許多問題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)就是用來處理

2、需要重復處理的問題的,所以又稱重復結(jié)構(gòu)。它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復雜程序的基本構(gòu)造單元。 循環(huán)分為兩種:無休止循環(huán)和有終止循環(huán) 構(gòu)成有效循環(huán)的條件:循環(huán)體和循環(huán)結(jié)束條件while語句用來實現(xiàn)“當型”循環(huán)結(jié)構(gòu)一般形式:一般形式: while (表達式) 語句 當表達式為非0值時,執(zhí)行while語句中的內(nèi)嵌語句。其特點是:先判斷表達式,后執(zhí)行循環(huán)體,即內(nèi)嵌語句。1001nn例題例題 5.1求1+2+3+100的和解題思路解題思路(1)開始時使sum的值為0,被加數(shù)i第一次取值為1。開始進入循環(huán)結(jié)構(gòu)。(2)判別“i100”條件是否滿足,由于i小于100,因此“i100”的值為真。所以應當執(zhí)

3、行其下面矩形框中的操作。(3)執(zhí)行sum=sum+i,此時sum的值變?yōu)?了,然后使i的值加1,i的值變?yōu)?了,這是為下一次加2作準備。流程返回菱形框。(4)再次檢查“i100”條件是否滿足,由于i的值為2,小于100,因此“i100”的值仍為真,所以應執(zhí)行其下面矩形框中的操作。(5)執(zhí)行sum=sum+i,由于sum的值已變?yōu)?,i的值已變?yōu)?,因此執(zhí)行sum=sum+i后sum的值變?yōu)?。再使i的值加1,i的值變?yōu)?。流程再返回菱形框。(6)再次檢查“i100”條件是否滿足,如此反復執(zhí)行矩形框中的操作,直到i的值變成了100,把i加到sum中,然后i又加1變成101了。當再次返回菱形框檢查

4、“i100”條件時,由于I已是101,大于100,“i100” 的值為假,不再執(zhí)行矩形框中的操作,循環(huán)結(jié)構(gòu)結(jié)束。1001nn(1)循環(huán)體如果包含一個以上的語句,應該用花括號括起來,以復合語句形式出現(xiàn).(2)在循環(huán)體中應有使循環(huán)趨向于結(jié)束的語句。運行結(jié)果:運行結(jié)果: 5050編寫程序編寫程序 do-while語句的特點:先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別“表達式”,當表達式的值為非0(“真”) 時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于0 (“假”)為止,此時循環(huán)結(jié)束。while語句和do-while語句的關(guān)系:同一個問題既可以用

5、while循環(huán)處理,也可以用do-while循環(huán)來處理。二者是可以互相轉(zhuǎn)換的。一般形式: do 循環(huán)體語句 while(表達式);運行結(jié)果:運行結(jié)果: 50501001nn可以看到,結(jié)果和例5.1完全相同。編寫程序編寫程序1001nn例題例題 5.3 募集慈善基金10000元,有若干人捐款,每輸入一個人的捐款數(shù)后,計算機就輸出當時的捐款總和。當某一次輸入捐款數(shù)后,總和達到或超過10000元時,即宣告結(jié)束,輸出最后的累加值。解題思路解題思路解此題的思路是設(shè)計一個循環(huán)結(jié)構(gòu),在其中輸入捐款數(shù),求出累加值,然后檢查此時的累加值是否達到或超過預定值,如果達到了,就結(jié)束循環(huán)操作。運行結(jié)果:運行結(jié)果:100

6、0 (輸入捐款額輸入捐款額)1850 1500 2600 2500 1200 sun= 10650.001001nn設(shè)計循環(huán)結(jié)構(gòu),要考慮兩個問題:一是循環(huán)體,二是循環(huán)結(jié)束條件。注意while循環(huán)中判斷的條件是循環(huán)繼續(xù)的條件,而不是結(jié)束條件。編寫程序編寫程序 C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。 一般形式: for(表達式1;表達式2;表達式3) 語句 forfor語句的執(zhí)行過程:語句的執(zhí)行過程: (1) 先求解表達式1。 (2) 求解表達式2,若其值為真(值為非0),則執(zhí) 行f

7、or語句中指定的內(nèi)嵌語句,然后執(zhí)行下 面第(3)步。若為假(值為0),則結(jié)束循環(huán), 轉(zhuǎn)到第(5)步。 (3) 求解表達式3。 (4) 轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句。 for語句最簡單的形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 例如: for(i=1;i=100;i+) sum=sum+i;相當于: i=1; while(i=100) sum=sum+i;i+; 國王的小麥。相傳古代印度國王舍罕要褒賞他的聰明能干的宰相達依爾(國際象棋的發(fā)明者),國王問他要什么?達依爾回答說:“國王只要在國際象棋的棋盤第1個格子中放1粒麥子,第2個格

8、子中放2粒麥子,第3個格子中放4粒麥子,以后按此比例每一格加一倍,一直放到第64格(國際象棋的棋盤8*8=64格),我感恩不盡,其他什么都不要了?!眹跸?,這有多少!還不容易!讓人扛來一袋小麥,但不到一會兒全用沒了,再來一袋很快又用完了。結(jié)果全印度的糧食全部用完還不夠。國王納悶,怎樣也算不清這筆賬?,F(xiàn)在我們用計算機來算一下。1F例題例題 5.41001nn解題思路解題思路麥子的總粒數(shù)是:分別計算出每一格的麥子粒數(shù),把它們加起來,就得到總粒數(shù)。據(jù)估算,1 小麥約有1.42 粒,可以計算出小麥的體積。可以用for語句實現(xiàn)循環(huán)。6332222211001nn運行結(jié)果:運行結(jié)果:total=1.844

9、674e+019volnme=1.299066e+011編寫程序編寫程序 變量i用來控制循環(huán)的次數(shù),開始時i=1,在完成第1次循環(huán)后,i的值加1變?yōu)?,由于264,所以執(zhí)行第2次循環(huán),依此類推,當i變到63時,執(zhí)行最后一次循環(huán),i再變?yōu)?4,由于i不再小于64了,不再執(zhí)行循環(huán)。接著計算體積,輸出結(jié)果。 人口增長預測。據(jù)2005年末統(tǒng)計,我國人口為130756萬人,如果人口的年增長率為1%,請計算到哪一年中國總?cè)丝诔^15億。1F例題例題 5.5解題思路解題思路計算人口增長和計算存款利息的公式是相同的。假設(shè)原來人口為 ,則一年后的人口:其中r是年增長率。用此公式依次計算出每年的人口,每算出一年的

10、人口后就檢查一下是否達到或超過15億?如果未達到或超過15億,就再計算下一年的人口,直到某一年的人口達到或超過15億為止。)1(0rpp1001nn編寫程序編寫程序運行結(jié)果:運行結(jié)果:year=2019,p=1.503007e+009注意區(qū)分變量注意區(qū)分變量p p在不同階段中的不同含義。在不同階段中的不同含義。 y代表年份。循環(huán)體中只有一個語句,用來計算從2006年開始的各年的人口數(shù)。在for語句中設(shè)定的循環(huán)條件是p15億,當某一年的p達到或超過15億,就停止循環(huán),輸出年份和當年的人口數(shù)。由于在最后結(jié)束循環(huán)前y又加了1,因此在輸出年份時應輸出y-1的值而不是y的值。 一個變量開始時有一初值,通

11、過一定的運算,可以推算出一個新的值,再從這個新值又推出下一個新值,即不斷用計算出的新值去取代原有的值,這種方法稱為迭代。上面的計算公式p*(1+r)稱為迭代公式。迭代算法一般是用循環(huán)來實現(xiàn)的。迭代是一種常用的算法,用人工實現(xiàn)很麻煩,而用計算機實現(xiàn)卻十分方便。1F 一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。 三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。 下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( )

12、;(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ) break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。 一般形式: break;break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。 統(tǒng)計各班級的學生的平均成績。已知各班人數(shù)不等,但都不超過30人。編一個程序能處理人數(shù)不等的各班學生的平均成績。1F例題例題 5.6解題思路解題思路 如果各班人數(shù)相同,問題比較簡單,只需用一個for語句控制即可: for(i=1;iZ| cz) /* 請和程序笫7行比較 */ c=

13、c-26;因為如果所有小寫字毋都滿足“cZ”的條件,從而也都執(zhí)行“c=c-26;”語句,這就會出錯。因此必須限制其范圍為“cZ & c=Z+4”,即原字母為W到Z。只有符合此條件才減26,否則,不應按此規(guī)律轉(zhuǎn)換。 凡是能用while循環(huán)處理,都能用dowhile循環(huán)處理。dowhile循環(huán)結(jié)構(gòu)可以轉(zhuǎn)換成while循環(huán)結(jié)構(gòu)。 在一般情況下,用while語句和用do-while語句處理同一問題時,若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環(huán)的結(jié)果是不同的。1001nn運行結(jié)果:運行結(jié)果:1 sum=55 再運行一次:再運行一次

14、: 11 sum=0運行結(jié)果:運行結(jié)果:1 sum=55 再運行一次:再運行一次: 11 sum=11當while后面的表達式的第一次的值為“真”時,兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。 for語句相當靈活,形式變化多樣: (1) for語句的一般形式中的“表達式1”可以省略,此時應在for語句之前給循環(huán)變量賦初值。注意省略表達式1時,其后的分號不能省略。如: for(;i=100;i+) sum=sum+i; 執(zhí)行時,跳過“求解表達式1”這一步,其他不變。(2) 如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式2始終為真。如: for(i=1; ;i+)

15、sum=sum+i; 表達式1是一個賦值表達式,表達式2空缺。它相當于: i=1; while(1) sum=sum+1;i+;(3) 表達式3也可以省略,但此時程序設(shè)計者應另外設(shè)法保證循環(huán)能正常結(jié)束。如: for(i=1;i=100;) sum=sum+i;i+; 在上面的for語句中只有表達式1和表達式2,而沒有表達式3。i+的操作不放在for語句的表達式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。(4) 可以省略表達式1和表達式3,只有表達式2,即只給循環(huán)條件。如: for(;i=100;) while(i=100) sum=sum+i; 相當于 sum=sum+

16、i; i+; i+; 在這種情況下,完全等同于while語句??梢奻or語句比while語句功能強,除了可以給出循環(huán)條件外,還可以賦初值,使循環(huán)變量自動增值等。(5) 3個表達式都可省略,如: for(; ;) 語句語句相當于 while(1) 語句語句 即不設(shè)初值,不判斷條件(認為表達式2為真值),循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。(6) 表達式1可以是設(shè)置循環(huán)變量初值的賦值表達式,也可以是與循環(huán)變量無關(guān)的其他表達式。如: for (sum=0;i=100;i+) sum=sum+i;表達式3也可以是與循環(huán)控制無關(guān)的任意表達式。表達式1和表達式3可以是一個簡單的表達式,也可以是逗號表達式,

17、即包含一個以上的簡單表達式,中間用逗號間隔。如: for(sum=0,i=1;i=100;i+) sum=sum+i;或 for(i=0,j=100;i=j;i+,j-) k=i+j;表達式1和表達式3都是逗號表達式,各包含兩個賦值表達式,即同時設(shè)兩個初值,使兩個變量增值。 在逗號表達式內(nèi)按自左至右順序求解,整個逗號表達式的值為其中最右邊的表達式的值。如: for(i=1;i=100;i+,i+) sum=sum+i;相當于 for(i=1;i=100;i=i+2) sum=sum+i;(7) 表達式一般是關(guān)系表達式(如i=100)或邏輯表達式(如ab & xy),但也可以是數(shù)值表達式

18、或字符表達式,只要其值為非零,就執(zhí)行循環(huán)體。 for(i=0;(c=getchar()!=n;i+=c); 在表達式2中先從終端接收一個字符賦給c,然后判斷此賦值表達式的值是否不等于n(換行符),如果不等于n,就執(zhí)行循環(huán)體。此for語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達式3中,作用是一樣的??梢奻or語句功能強,可以在表達式中完成本來應在循環(huán)體內(nèi)完成的操作。 for( ;(c=getchar()!=n;) printf(%c,c); for語句中只有表達式2,而無表達式1和表達式3。其作用是每讀入一個字符后立即輸出該字符,直到輸入一個“換行”為止。請注意,從終端鍵盤向計算機

19、輸入時,是在按Enter鍵以后才將一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去的。運行情況:運行情況:Computer (輸入)Computer (輸出)而不是Ccoommppuutteerr注意注意: : C語言中的for語句比其他語言(如BASIC,PASCAL)中的FOR語句功能強得多。可以把循環(huán)體和一些與循環(huán)控制無關(guān)的操作也作為表達式1或表達式3出現(xiàn),這樣程序可以短小簡潔。但過分地利用這一特點會使for語句顯得雜亂,可讀性降低,最好不要把與循環(huán)控制無關(guān)的內(nèi)容放到for語句中。main()() int count=0,n=1; do if(n%3=0|n%5=0) count+; n+; while

20、(n=100); printf(The total number is : %d,count); 計算機械學院某班計算機械學院某班3030名學生的名學生的c c語言課程的平均成績語言課程的平均成績 #include main()() float aver,sum; int count,score; sum=0; for (count=1;count=30;count+) scanf(“%d”,&score);); sum=sum+score; aver=sum/count; printf(“Average is %5.2fn”,aver);); .(不確定人數(shù))(不確定人數(shù)).main

21、()() float aver,sum=0; int count=0,score; printf( “Enter score -1 to end:” );); scanf(“%d”,&score);); while (score!=-1) sum=sum+ score ;count+; scanf(“%d”,&score);); if(count!=0) aver=sum/count; printf(“ Average is %5.2f”,aver);); else printf(“No grade were enteredn”);); 編程計算:編程計算:1 1,1+21+2

22、,1+2+31+2+3, , 1+2+501+2+50各項值得和各項值得和 #include void main()int i,j,x=0; long y=0;for (i=1;i=50;i+)for(j=1;j=i;j+)x=x+j;y=y+x;x=0;printf(nvalue is %d,y);#include stdio.hvoid main()int i,a=1;float sum=0;for (i=1;i=100;i+)sum+=1.0*a/i;a=-a;printf(nSum is %f,sum);計算并輸出計算并輸出S=1-1/2+1/3-1/4+1/99-1/100的結(jié)果的結(jié)

23、果求求 S=1!+2!+3!+20!S=1!+2!+3!+20!main()() float n,sum=0.0,t=1.0, for (n=1;n=20;n+) t=t*n; sum=sum+t; printf(“sum=%.2f” ,sum);); 現(xiàn)有一個等差數(shù)列,已知第一項現(xiàn)有一個等差數(shù)列,已知第一項a=1a=1,公差,公差b=4b=4,輸出滿足前,輸出滿足前n n項之項之和小于和小于100100的的n n的最大值。的最大值。 #include main()() int a=1,b=4,sum=1,n=1; while(sum100) a=a+b; sum=sum+a; n+; pri

24、ntf(“%d” ,n-1);); 如果令初始值如果令初始值sum=0sum=0,n=0n=0,程序如何修改?程序如何修改? 計算算式計算算式xyz+yzz=532 xyz+yzz=532 中的中的x,y,zx,y,z值(其中值(其中xyzxyz和和yzzyzz分別代表一個三位分別代表一個三位數(shù))。數(shù))。 #include“stdio.h”void main()() int x,y,z,i,result=532; for( x=1;x10;x+ ) for(y=1;y10;y+) for(z=0;z10;z+) i=100*x+10*y+z+100*y+10*z+z; if (i=result) printf(“x=%d,y=%d,z=%dn” ,x,y,z);); 求出用數(shù)字求出用數(shù)字0 09 9可以組成多少個沒有重復的三位奇數(shù)可以組成多少個沒有重復的三位奇數(shù) #include“stdio.h”void main()() int n,i,j,k; n=0; for (i=1;i=9;i+)/*百位數(shù)的處理百位數(shù)的處理*/ for (k=1;k=9;k=k+2)/*個位數(shù)的處理,個位數(shù)的處理, k=

溫馨提示

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

評論

0/150

提交評論