CHAR06循環(huán)控制_第1頁
CHAR06循環(huán)控制_第2頁
CHAR06循環(huán)控制_第3頁
CHAR06循環(huán)控制_第4頁
CHAR06循環(huán)控制_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、靳潤昭 C語言教程講義 2001年2月17日6循環(huán)控制16.1概述16.2goto語句以及用goto語句構成循環(huán)16.3while語句26.4do-while語句46.5for語句66.6循環(huán)的嵌套96.7幾種循環(huán)的比較96.8break和continue語句96.8.1break語句96.8.2continue 語句106.9程序舉例116 循環(huán)控制6.1 概述循環(huán)結構是程序中一種很重要的結構。其特點是,在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結構。1) 用goto語句和if

2、語句構成循環(huán);2) 用while語句;3) 用do-while語句;4) 用for語句;6.2 goto語句以及用goto語句構成循環(huán)goto語句是一種無條件轉移語句, 與BASIC中的goto語句相似。goto 語句的使用格式為: goto 語句標號;其中標號是一個有效的標識符,這個標識符加上一個“:”一起出現在函數內某處, 執(zhí)行goto語句后,程序將跳轉到該標號處并執(zhí)行其后的語句。另外標號必須與goto語句同處于一個函數中,但可以不在一個循環(huán)層中。通常goto語句與if條件語句連用, 當滿足某一條件時, 程序跳到標號處運行。goto語句通常不用,主要因為它將使程序層次不清,且不易讀,但在多

3、層嵌套退出時, 用goto語句則比較合理?!纠?.1】用goto語句和if語句構成循環(huán),。main() int i,sum=0; i=1;loop: if(i<=100) sum=sum+i; i+; goto loop; printf("%dn",sum);6.3 while語句while語句的一般形式為: while(表達式)語句其中表達式是循環(huán)條件,語句為循環(huán)體。 while語句的語義是:計算表達式的值,當值為真(非0)時, 執(zhí)行循環(huán)體語句。其執(zhí)行過程可用下圖表示?!纠?.2】用while語句求。用傳統流程圖和N-S結構流程圖表示算法,見圖:main() int

4、 i,sum=0; i=1; while(i<=100) sum=sum+i; i+; printf("%dn",sum);【例6.3】統計從鍵盤輸入一行字符的個數。#include <stdio.h>main() int n=0; printf("input a string:n"); while(getchar()!='n') n+; printf("%d",n); 本例程序中的循環(huán)條件為getchar()!='n',其意義是, 只要從鍵盤輸入的字符不是回車就繼續(xù)循環(huán)。循環(huán)體n+完

5、成對輸入字符個數計數。從而程序實現了對輸入一行字符的字符個數計數。使用while語句應注意以下幾點:1) while語句中的表達式一般是關系表達或邏輯表達式,只要表達式的值為真(非0)即可繼續(xù)循環(huán)?!纠?.4】main() int a=0,n; printf("n input n: "); scanf("%d",&n); while (n-) printf("%d ",a+*2);本例程序將執(zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達式a+*2的值。該表達式等效于(a*2;a+)。2) 循環(huán)體如包括有一個以上的語句,則必

6、須用括起來,組成復合語句。6.4 do-while語句do-while語句的一般形式為: do 語句 while(表達式);這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,然后再判斷表達式是否為真, 如果為真則繼續(xù)循環(huán);如果為假, 則終止循環(huán)。因此, do-while循環(huán)至少要執(zhí)行一次循環(huán)語句。其執(zhí)行過程可用下圖表示。【例6.5】用do-while語句求。用傳統流程圖和N-S結構流程圖表示算法,見圖:main() int i,sum=0; i=1; do sum=sum+i; i+; while(i<=100) printf("%dn",sum);同樣當有許

7、多語句參加循環(huán)時, 要用""和""把它們括起來?!纠?.6】while和do-while循環(huán)比較。(1)main()int sum=0,i; scanf(“%d”,&i); while(i<=10) sum=sum+i; i+;printf(“sum=%d”,sum);(2)main()int sum=0,i; scanf(“%d”,&i); do sum=sum+i; i+;while(i<=10);printf(“sum=%d”,sum);6.5 for語句在C語言中,for語句使用最為靈活,它完全可以取代 while 語

8、句。它的一般形式為: for(表達式1;表達式2;表達式3) 語句它的執(zhí)行過程如下:1) 先求解表達式1。2) 求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第3)步;若其值為假(0),則結束循環(huán),轉到第5)步。3) 求解表達式3。4) 轉回上面第2)步繼續(xù)執(zhí)行。5) 循環(huán)結束,執(zhí)行for語句下面的一個語句。其執(zhí)行過程可用下圖表示。for語句最簡單的應用形式也是最容易理解的形式如下:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量) 語句循環(huán)變量賦初值總是一個賦值語句, 它用來給循環(huán)控制變量賦初值; 循環(huán)條件是一個關系表達式,它決定什么時候退出循環(huán);循環(huán)變量增量

9、,定義循環(huán)控制變量每循環(huán)一次后 按什么方式變化。這三個部分之間用“;”分開。 例如:for(i=1; i<=100; i+)sum=sum+i; 先給i賦初值1,判斷i是否小于等于100, 若是則執(zhí)行語句,之后值增加1。再重新判斷, 直到條件為假,即i>100時,結束循環(huán)。相當于:i=1;while(i<=100) sum=sum+i; i+;對于for循環(huán)中語句的一般形式,就是如下的while循環(huán)形式:表達式1;while(表達式2) 語句 表達式3;注意:1) for循環(huán)中的“表達式1(循環(huán)變量賦初值)”、“表達式2(循環(huán)條件)”和“表達式3(循環(huán)變量增量)”都是選擇項,

10、 即可以缺省,但“;”不能缺省。2) 省略了“表達式1(循環(huán)變量賦初值)”, 表示不對循環(huán)控制變量賦初值。3) 省略了“表達式2(循環(huán)條件)”, 則不做其它處理時便成為死循環(huán)。例如: for(i=1;i+)sum=sum+i;相當于:i=1;while(1)sum=sum+i; i+;4) 省略了“表達式3(循環(huán)變量增量)”, 則不對循環(huán)控制變量進行操作,這時可在語句體中加入修改循環(huán)控制變量的語句。例如:for(i=1;i<=100;)sum=sum+i; i+;5) 省略了“表達式1(循環(huán)變量賦初值)”和“表達式3(循環(huán)變量增量)”。例如:for(;i<=100;)sum=sum

11、+i; i+;相當于:while(i<=100)sum=sum+i; i+;6) 3個表達式都可以省略。例如:for(;)語句相當于:while(1)語句7) 表達式1可以是設置循環(huán)變量的初值的賦值表達式,也可以是其他表達式。例如: for(sum=0;i<=100;i+)sum=sum+i;8) 表達式1和表達式3可以是一個簡單表達式也可以是逗號表達式。for(sum=0,i=1;i<=100;i+)sum=sum+i;或:for(i=0,j=100;i<=100;i+,j-)k=i+j;9) 表達式2一般是關系表達式或邏輯表達式,但也可是數值表達式或字符表達式,只要

12、其值非零,就執(zhí)行循環(huán)體。例如:for(i=0;(c=getchar()!=n;i+=c);又如:for(;(c=getchar()!=n;)printf(“%c”,c);6.6 循環(huán)的嵌套【例6.7】main() int i, j, k; printf("i j kn"); for (i=0; i<2; i+) for(j=0; j<2; j+) for(k=0; k<2; k+) printf(“%d %d %dn", i, j, k); 6.7 幾種循環(huán)的比較1) 四種循環(huán)都可以用來處理同一個問題,一般可以互相代替。但一般不提倡用goto型循

13、環(huán)。2) while和do-while循環(huán),循環(huán)體中應包括使循環(huán)趨于結束的語句。for語句功能最強。3) 用while和do-while循環(huán)時,循環(huán)變量初始化的操作應在while和do-while語句之前完成,而for語句可以在表達式1中實現循環(huán)變量的初始化。6.8 break和continue語句6.8.1 break語句break語句通常用在循環(huán)語句和開關語句中。當break用于開關語句switch中時,可使程序跳出switch而執(zhí)行switch以后的語句;如果沒有break語句,則將成為一個死循環(huán)而無法退出。break在switch 中的用法已在前面介紹開關語句時的例子中碰到,這里不再舉

14、例。當break語句用于do-while、for、while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句, 通常break語句總是與if語句聯在一起。即滿足條件時便跳出循環(huán)?!纠?.8】main() int i=0; char c; while(1) /*設置循環(huán)*/ c='0' /*變量賦初值*/ while(c!=13&&c!=27) /*鍵盤接收字符直到按回車或Esc鍵*/ c=getch(); printf("%cn", c); if(c=27) break; /*判斷若按Esc鍵則退出循環(huán)*/ i+; printf("

15、;The No. is %dn", i); printf("The end"); 注意:1) break語句對if-else的條件語句不起作用。2) 在多層循環(huán)中, 一個break語句只向外跳一層。 6.8.2 continue 語句continue語句的作用是跳過循環(huán)本中剩余的語句而強行執(zhí)行下一次循環(huán)。continue語句只用在for、while、do-while等循環(huán)體中,常與if條件語句一起使用,用來加速循環(huán)。其執(zhí)行過程可用下圖表示。1) while(表達式1) if(表達式2)break; 2) while(表達式1) if(表達式2)continue;

16、【例6.9】main() char c; while(c!=13) /*不是回車符則循環(huán)*/ c=getch(); if(c=0X1B) continue; /*若按Esc鍵不輸出便進行下次循環(huán)*/ printf("%cn", c); 6.9 程序舉例【例6.10】用公式求。N-S流程圖:#include<math.h>main() int s; float n,t,pi; t=1,pi=0;n=1.0;s=1; while(fabs(t)>1e-6) pi=pi+t; n=n+2; s=-s;t=s/n; pi=pi*4; printf("pi=%10.6fn",pi); 【例6.11】判斷m是否素數。N-S流程圖:#include<math.h>main()int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i<=k;i+)if(m%i=0)break;if(i>=k+1)printf(“%d is a prime

溫馨提示

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

最新文檔

評論

0/150

提交評論