C語言程序設計編程_C語言學習課件6循環控制_第1頁
C語言程序設計編程_C語言學習課件6循環控制_第2頁
C語言程序設計編程_C語言學習課件6循環控制_第3頁
C語言程序設計編程_C語言學習課件6循環控制_第4頁
C語言程序設計編程_C語言學習課件6循環控制_第5頁
已閱讀5頁,還剩43頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第六章l 本章要點本章要點l 主要內容主要內容6.1 6.1 概述概述6.2 goto6.2 goto語句以及用語句以及用gotogoto語句構成循環語句構成循環6.3 6.3 用用whilewhile語句實現循環語句實現循環6.4 6.4 用用do-whiledo-while語句實現循環語句實現循環6.5 6.5 用用for for 語句實現循環語句實現循環 6.6 6.6 循環的嵌套循環的嵌套6.7 6.7 幾種循環的比較幾種循環的比較6.8 break6.8 break語句語句continuecontinue和語句和語句6.9 6.9 程程 序序 舉舉 例例 6.1 概述什么是循環?什么

2、是循環?為什么要使用循環?為什么要使用循環?1001nyn問題問題1 1:問題問題2:2: 在許多問題中需要用到循環控制。循環結構是結構化程序設計的基本結構之一,它和順序結構、選擇結構共同作為各種復雜程序的基本構造單元。 6.2 goto語句以及用goto語句構成循環 goto語句無條件轉向語句 goto goto 語句標號;語句標號;語句標號用標識符表示,它的定名規則與變量名相同,即由字母、數字和下劃線組成,其第一個字符必須為字母或下劃線。 例如:例如:goto label_1; goto label_1; 合法合法; ; goto 123 goto 123; 不合法不合法. . 6.3 用

3、while語句實現循環注意:注意:(1)循環體如果包含一個以上的語句,應該用花括弧括起來,以復合語句形式出現。 (2)在循環體中應有使循環趨向于結束的語句。如果無此語句,則i的值始終不改變,循環永不結束。 6.4 用do-while語句實現循環 do-while語句的特點:先執行循環體,然后判斷循環條件是否成立。 一般形式一般形式: : do do 循環體語句 whilewhile (表達式);執行過程:執行過程:先執行一次指定的循環體語句,然后判別表達式,當表達式的值為非零(“真”) 時,返回重新執行循環體語句,如此反復,直到表達式的值等于0為止,此時循環結束。例6.3 求1到100的和#i

4、nclude #include void main()void main() int i int i,sum=0;sum=0; i=2; i=2; do do sum=sum+i; sum=sum+i; i=i+2; i=i+2; while(i=100); while(i=100); printf(%dn printf(%dn,sum)sum); 運行結果:運行結果:505050501001nn 6.4 用do-while語句實現循環whilewhile語句和用語句和用do-whiledo-while語句的比較語句的比較: :在一般情況下,用while語句和用do-while語句處理同一問題

5、時,若二者的循環體部分是一樣的,它們的結果也一樣。但是如果while后面的表達式一開始就為假(0值)時,兩種循環的結果是不同的。例6.4 while和do-while循環的比較 (1) #include (2) #include (1) #include (2) #include void main ( ) void main( )void main ( ) void main( ) int sum=0 int sum=0,i; int sum=0i; int sum=0,i;i; scanf(“%d scanf(“%d,&i); scanf(”%d&i); scanf(”%d

6、,&i);&i); while (i=10) do while (i=10) do sum=sum+I; sum=sum+i; sum=sum+I; sum=sum+i; i+; i+; i+; i+; while (i=10); while (i=10);printf(“sum=%dn ,sum); printf(“sum=%dn”,sum); printf(“sum=%dn ,sum); printf(“sum=%dn”,sum); 1001nn運行結果:運行結果:11 sum=55 sum=55 再運行一次:再運行一次: 1111sum=0sum=0運行結果:運行結果:1

7、1 sum=55 sum=55 再運行一次:再運行一次: 1111sum=11sum=11(1)當while后面的表達式的第一次的值為“真”時,兩種循環得到的結果相同。否則,二者結果不相同。 6.5 用for 語句實現循環 C語言中的for語句使用最為靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況,它完全可以代替while語句。 一般形式一般形式: : forfor(表達式1;表達式2;表達式3) 語句 6.5 用for 語句實現循環forfor語句的執行過程:語句的執行過程: (1) (1) 先求解表達式先求解表達式1 1。 (2) (2) 求

8、解表達式求解表達式2 2,若其值為真,若其值為真( (值為非值為非0)0),則執,則執 行行forfor語句中指定的內嵌語句,然后執行下語句中指定的內嵌語句,然后執行下 面第面第(3)(3)步。若為假步。若為假( (值為值為0)0),則結束循環,則結束循環, 轉到第轉到第(5)(5)步。步。 (3) (3) 求解表達式求解表達式3 3。 (4) (4) 轉回上面第轉回上面第(2)(2)步驟繼續執行。步驟繼續執行。 (5) (5) 循環結束,執行循環結束,執行forfor語句下面的一個語句語句下面的一個語句 6.5 用for 語句實現循環表達式表達式2?執行語句語句成立成立不成立不成立執行for

9、循環之后的語句執行表達式3執行表達式執行表達式1循環初始條件循環初始條件循環控制條件循環控制條件循環體循環體 for語句等價于下列語句:語句等價于下列語句:表達式表達式1;while (表達式(表達式2) 語句;語句; 表達式表達式3; 6.5 用for 語句實現循環 for語句最簡單的形式:for(for(循環變量賦初值;循環條件;循環變量增值循環變量賦初值;循環條件;循環變量增值) ) 例如例如: : for(i=1;i=100;i+) sum=for(i=1;i=100;i+) sum=sum+isum+i; ;相當于:相當于: i=1;i=1; while(i=100) while(i

10、=100) sum=sum+i; sum=sum+i; i+; i+; 用用forfor語句簡單、方便。語句簡單、方便。 6.5 用for 語句實現循環(1) for(1) for語句的一般形式中的語句的一般形式中的“表達式表達式1”1”可以省略,此時應在可以省略,此時應在forfor語句之前給循環變量賦初值。注意省略表達式語句之前給循環變量賦初值。注意省略表達式1 1時,其后時,其后的分號不能省略。如的分號不能省略。如 for(;i=100;i+) sum=sum+i; 執行時,跳過執行時,跳過“求解表達式求解表達式1”1”這一步,其他不變。這一步,其他不變。 6.5 用for 語句實現循環

11、(2) (2) 如果表達式如果表達式2 2省略,即不判斷循環條件,循環無終省略,即不判斷循環條件,循環無終止地進行下去。也就是認為表達式止地進行下去。也就是認為表達式2 2始終為真。始終為真。例如:例如:for(i=1; ;i+) sum=sum+i; 表達式表達式1 1是一個賦值表達式,表達式是一個賦值表達式,表達式2 2空缺。它相當于:空缺。它相當于: i=1; while(1) sum=sum+1;i+; 6.5 用for 語句實現循環(3) (3) 表達式表達式3 3也可以省略,但此時程序設計者應另外設法保證循也可以省略,但此時程序設計者應另外設法保證循環能正常結束。如:環能正常結束。

12、如: for(i=1;i=100;) sum=sum+i;i+; 在上面的在上面的forfor語句中只有表達式語句中只有表達式1 1和表達式和表達式2 2,而沒有表達式,而沒有表達式3 3。i+i+的操作不放在的操作不放在forfor語句的表達式語句的表達式3 3的位置處,而作為循環體的位置處,而作為循環體的一部分,效果是一樣的,都能使循環正常結束。的一部分,效果是一樣的,都能使循環正常結束。 6.5 用for 語句實現循環(4) (4) 可以省略表達式可以省略表達式1 1和表達式和表達式3 3,只有表達式,只有表達式2 2,即只,即只給循環條件。如:給循環條件。如: for(;i=100;)

13、相當于相當于 while(i=100) sum=sum+i; sum=sum+i; i+; i+; 在這種情況下,完全等同于在這種情況下,完全等同于whilewhile語句。語句。 6.5 用for 語句實現循環(5) 3(5) 3個表達式都可省略,如:個表達式都可省略,如: for(; ;) for(; ;) 語句語句 相當于相當于 while(1) while(1) 語句語句 即不設初值,不判斷條件即不設初值,不判斷條件( (認為表達式認為表達式2 2為真值為真值) ),循環變量,循環變量不增值。無終止地執行循環體。不增值。無終止地執行循環體。 6.5 用for 語句實現循環(6) (6)

14、 表達式表達式1 1可以是設置循環變量初值的賦值表達式,也可以是可以是設置循環變量初值的賦值表達式,也可以是與循環變量無關的其他表達式。如與循環變量無關的其他表達式。如: : for (sum=0;i=100;i+) sum=sum+i; 表達式表達式3 3也可以是與循環控制無關的任意表達式。也可以是與循環控制無關的任意表達式。 6.5 用for 語句實現循環 表達式表達式1 1和表達式和表達式3 3可以是一個簡單的表達式,也可以可以是一個簡單的表達式,也可以是逗號表達式,即包含一個以上的簡單表達式,中間用是逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。如:逗號間隔。如: for(s

15、um=0,i=1;i=100;i+) sum=sum+i;或或 for(i=0,j=100;i=j;i+,j-) k=i+j; 表達式表達式1 1和表達式和表達式3 3都是逗號表達式,各包含兩個賦值都是逗號表達式,各包含兩個賦值表達式,即同時設兩個初值,使兩個變量增值表達式,即同時設兩個初值,使兩個變量增值. . 6.5 用for 語句實現循環(7) (7) 表達式一般是關系表達式表達式一般是關系表達式( (如如i=100)i=100)或邏輯表達式或邏輯表達式( (如如ab ab & xy)& xy),但也可以是數值表達式或字符表達式,只要其值為,但也可以是數值表達式或字符表達

16、式,只要其值為非零,就執行循環體非零,就執行循環體。 6.5 用for 語句實現循環 for(i=0;(c=getchar()!=n;i+=c); 在表達式2中先從終端接收一個字符賦給c,然后判斷此賦值表達式的值是否不等于n(換行符),如果不等于n,就執行循環體。此for語句的循環體為空語句,把本來要在循環體內處理的內容放在表達式3中,作用是一樣的。 6.5 用for 語句實現循環 for( ;(c=for( ;(c=getchargetchar()!=()!=n;)n;) printfprintf(%c(%c,c);c); for for語句中只有表達式語句中只有表達式2 2,而無表達式,而

17、無表達式1 1和表達式和表達式3 3。其作用是每讀入一個字符后立即輸出該字符,直到輸入其作用是每讀入一個字符后立即輸出該字符,直到輸入一個一個“換行換行”為止。請注意,從終端鍵盤向計算機輸入為止。請注意,從終端鍵盤向計算機輸入時,是在按時,是在按EnterEnter鍵以后才將一批數據一起送到內存緩鍵以后才將一批數據一起送到內存緩沖區中去的。沖區中去的。運行情況:運行情況:ComputerComputer ( (輸入輸入) )Computer (Computer (輸出輸出) )而不是而不是CcoommppuutteerrCcoommppuutteerr 6.5 用for 語句實現循環注意注意:

18、 : C C語言中的語言中的forfor語句比其他語言語句比其他語言( (如如BASICBASIC,PASCAL)PASCAL)中的中的FORFOR語句功能強得多。可以把循環體和一些與循環控制無語句功能強得多。可以把循環體和一些與循環控制無關的操作也作為表達式關的操作也作為表達式1 1或表達式或表達式3 3出現,這樣程序可以短出現,這樣程序可以短小簡潔。但過分地利用這一特點會使小簡潔。但過分地利用這一特點會使forfor語句顯得雜亂,語句顯得雜亂,可讀性降低,最好不要把與循環控制無關的內容放到可讀性降低,最好不要把與循環控制無關的內容放到forfor語句中。語句中。 6.6 循環的嵌套 一個循

19、環體內又包含另一個完整的循環結構稱為循環的嵌套。內嵌的循環中還可以嵌套循環,這就是多層循環。 三種循環(while循環、do-while循環和for循環)可以互相嵌套。 6.6 循環的嵌套 下面幾種都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); 6.6 循環的嵌套(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) ; while( ); 6.7 幾種循環的比較(1)四種循環都可以用來處理同一問題,一般情況下它們可以互相代替

20、。但一般不提倡用goto型循環。(2)在while循環和do-while循環中,只在while后面的括號內指定循環條件,因此為了使循環能正常結束,應在循環體中包含使循環趨于結束的語句(如i+,或i=i+1等)。 6.7 幾種循環的比較 for循環可以在表達式3中包含使循環趨于結束的操作,甚至可以將循環體中的操作全部放到表達式3中。因此for語句的功能更強,凡用while循環能完成的,用for循環都能實現。 (3)用while和do-while循環時,循環變量初始化的操作應在while和do-while語句之前完成。而for語句可以在表達式1中實現循環變量的初始化。 6.7 幾種循環的比較(4)

21、while循環、do-while循環和for循環,可以用break語句跳出循環,用continue語句結束本次循環(break語句和continue語句見下節)。而對用goto語句和if語句構成的循環,不能用break語句和continue語句進行控制。 6.8 break語句和continue語句 6.8.1 break6.8.1 break語句語句 break語句可以用來從循環體內跳出循環體,即提前結束循環,接著執行循環下面的語句 一般形式:一般形式: break;break;注意注意: :break語句不能用于循環語句和switch語句之外的任何其他語句中。 6.8 break語句和co

22、ntinue語句 例例: float pi=3.14159;for(r=1;r100) break; printf(r=%f,area=%fn,r,area); 程序的作用是計算程序的作用是計算r=1r=1到到r=10r=10時的圓面積,直到面積時的圓面積,直到面積areaarea大于大于100100為止。從上為止。從上面的面的forfor循環可以看到:當循環可以看到:當area100area100時,執行時,執行breakbreak語句,提前結束循環,語句,提前結束循環,即不再繼續執行其余的幾次循環即不再繼續執行其余的幾次循環。 6.8 break語句和continue語句 6.8.2 co

23、ntinue6.8.2 continue語句語句 作用為結束本次循環,即跳過循環體中下面尚未執行的語句,接著進行下一次是否執行循環的判定.一般形式:一般形式: continue;continue; 6.8 break語句和continue語句 continue語句和break語句的區別 continue語句只結束本次循環,而不是終止整個循環的執行。 while(表達式1) for if(表達式2) continue; 0 6.8 break語句和continue語句 continue和break的區別 break語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。 while(表達式1)

24、 for if(表達式2) break; 例6.5 把100200之間的不能被3整除的數輸出。 #include #include void main()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); 1001nn當n能被3整除時,執行continue語句,結束本次循環(即跳過printf函數語句),只有n不能被3整除時才執行printf函數。 6.9 程序舉例 例例6

25、.66.6用/41-1/3+1/5-1/7+公式求的近似值,直到某一項的絕對值小于為止。N-SN-S圖表示算法圖表示算法 例6.6 求pi的近似值 #include #include #include#includevoid main()void main() int s;float n int s;float 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; p

26、i=pi pi=pi* *4;4; printf(pi=%10.6f printf(pi=%10.6fnn,pi);pi); 1001nn運行結果:運行結果: pi= 3.141594 6.9 程序舉例 例例6.76.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) 算法如圖所示:1F例6.7求Fibonacci數列前40個數。 #include #include void main()void main() long i

27、nt f1 long int f1,f2;f2; int i; int i; f1=1;f2=1; f1=1;f2=1; for(i=1; i=20; i+) for(i=1; i=20; i+) printf(%12ld %12ld printf(%12ld %12ld ,f1f1,f2);f2); if(i%2=0) printf( if(i%2=0) printf(n);n); f1=f1+f2; f1=f1+f2; f2=f2+f1; f2=f2+f1; 1001nn運行結果:運行結果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 15

28、97 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155 6.9 程序舉例 例例6.86.8 判斷判斷m m是否素數。是否素數。算法思想算法思想: :讓m被2到除,如果m能被2之中任何一個整數整除,則提前結束循環,此時i必然小于或等于k(即);如果m不能被2k(即)之間的任一整數整除,則在完成最后一次循環后,i還要加

29、1,因此i=k+1,然后才終止循環。在循環之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數整除過,因此輸出“是素數”。 1F1F例6.8 判斷m是否素數。 #include #include #include #include void main() void main() int m int 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 is a prime number if(ik) printf(%d is a prime numbernn,m);m);else printf(%d is not a prime numberelse printf

溫馨提示

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

評論

0/150

提交評論