第六章 循環(huán)控制
《第六章 循環(huán)控制》由會員分享,可在線閱讀,更多相關(guān)《第六章 循環(huán)控制(5頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第六章 循環(huán)控制 教學(xué)目的及要求: 1) 熟練掌握三種循環(huán)語句的運(yùn)用; 2) 掌握break和continue語句的運(yùn)用。 3) 教學(xué)重難點(diǎn): 1) 循環(huán)語句; 2)循環(huán)的嵌套; 3)break和continue語句。 主要教學(xué)環(huán)節(jié)的組織: 結(jié)合習(xí)題、上機(jī)掌握循環(huán)語句的用法 教學(xué)內(nèi)容: §6.1 概述 循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。 給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。 C語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。 §6.2 goto語句以及用goto
2、語句構(gòu)成循環(huán) 程序中的語句通常總是按順序方向,或按語句功能所定義的方向執(zhí)行的。如果需要改變程序的正常流向,可以使用轉(zhuǎn)移語句。在C語言中提供了4種轉(zhuǎn)移語句:goto,break, continue和return。其中的return語句只能出現(xiàn)在被調(diào)函數(shù)中, 用于返回主調(diào)函數(shù),我們將在函數(shù)一章中具體學(xué)習(xí)。 goto語句也稱為無條件轉(zhuǎn)移語句,其一般格式如下: goto 語句標(biāo)號; 其中語句標(biāo)號是按標(biāo)識符規(guī)定書寫的符號, 放在某一語句行的前面,標(biāo)號后加冒號(:)。語句標(biāo)號起標(biāo)識語句的作用,與goto 語句配合使用。如:label: i++; loop: while(x<
3、7); C語言不限制程序中使用標(biāo)號的次數(shù),但各標(biāo)號不得重名。goto語句的語義是改變程序流向, 轉(zhuǎn)去執(zhí)行語句標(biāo)號所標(biāo)識的語句。goto語句通常與條件語句配合使用??捎脕韺?shí)現(xiàn)條件轉(zhuǎn)移,構(gòu)成循環(huán),跳出循環(huán)體等功能。但是,在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主張使用goto語句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。 例:#include"stdio.h" /*統(tǒng)計(jì)從鍵盤輸入一行字符的個數(shù) */ void main(){ int n=0; printf("input a string\n"); loop: if(g
4、etchar()!='\n')
{ n++;goto loop; }
printf("%d",n);}
本例用if語句和goto語句構(gòu)成循環(huán)結(jié)構(gòu)。當(dāng)輸入字符不為'\n'時(shí)即執(zhí)行n++進(jìn)行計(jì)數(shù),然后轉(zhuǎn)移至if語句循環(huán)執(zhí)行。直至輸入字符為'\n'才停止循環(huán)。
§6.3 while語句
while語句的一般形式為: while(表達(dá)式)語句; 其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。 while語句的語義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體語句。
例:#include
5、入一行字符的個數(shù) */ void 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++完成對輸入字符個數(shù)計(jì)數(shù)。從而程序?qū)崿F(xiàn)了對輸入一行字符的字符個數(shù)計(jì)數(shù)。 使用while語句應(yīng)注意以下幾點(diǎn): 1.while語句中的表達(dá)式一般是關(guān)系或邏輯表達(dá)式,只要表達(dá)式的值為
6、真(非0)即可繼續(xù)循環(huán)。 void main(){ int a=0,n; printf("\n input n: "); scanf("%d",&n); while (n--) printf("%d ",a++*2); } 本例程序?qū)?zhí)行n次循環(huán),每執(zhí)行一次,n值減1。循環(huán)體輸出表達(dá)式a++*2的值。該表達(dá)式等效于(a*2;a++) 2.循環(huán)體如包括有一個以上的語句,則必須用{}括起來, 組成復(fù)合語句。 3.應(yīng)注意循環(huán)條件的選擇以避免死循環(huán)。 void main(){ int a,n=0; while(a=5)
7、 printf("%d ",n++); } 本例中while語句的循環(huán)條件為賦值表達(dá)式a=5, 因此該表達(dá)式的值永遠(yuǎn)為真,而循環(huán)體中又沒有其它中止循環(huán)的手段, 因此該循環(huán)將無休止地進(jìn)行下去,形成死循環(huán)。4.允許while語句的循環(huán)體又是while語句,從而形成雙重循環(huán)。 §6.4 do-while語句 do-while語句的一般形式為: do語句; while(表達(dá)式); 其中語句是循環(huán)體,表達(dá)式是循環(huán)條件。do-while語句的語義是:先執(zhí)行循環(huán)體語句一次, 再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。其執(zhí)行過程如課本中圖所示。 do-whil
8、e語句和while語句的區(qū)別在于do-while是先執(zhí)行后判斷,因此do-while至少要執(zhí)行一次循環(huán)體。而while是先判斷后執(zhí)行,如果條件不滿足,則一次循環(huán)體語句也不執(zhí)行。while語句和do-while語句一般都可以相互改寫。 void main(){ int a=0,n; printf("\n input n: "); scanf("%d",&n); do printf("%d ",a++*2); while (--n); } 在本例中,循環(huán)條件改為--n,否則將多執(zhí)行一次循環(huán)。這是由于先執(zhí)行后判斷而造成的。對于do-while語句還應(yīng)
9、注意以下幾點(diǎn): 1.if和while語句中, 表達(dá)式后面都不能加分號,而 do -while語句的表達(dá)式后面則必須加分號。 2.do-while語句也可以組成多重循環(huán),而且也可以和while語句相互嵌套。 3.在do和while之間的循環(huán)體由多個語句組成時(shí),也必須用{}括起來組成一個復(fù)合語句。 4.do-while和while語句相互替換時(shí),要注意修改循環(huán)控制條件。 §6.5 for語句 for語句是C語言所提供的功能更強(qiáng),使用更廣泛的一種循環(huán)語句。其一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)3) 語句; 表達(dá)式1通常用來給循環(huán)變量賦初值,一般是賦值表達(dá)
10、式。也允許在for語句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式。表達(dá)式2通常是循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。表達(dá)式3通??捎脕硇薷难h(huán)變量的值,一般是賦值語句。這三個表達(dá)式都可以是逗號表達(dá)式, 即每個表達(dá)式都可由多個表達(dá)式組成。三個表達(dá)式都是任選項(xiàng),都可以省略。 一般形式中的“語句”即為循環(huán)體語句。 for語句的語義是:1.首先計(jì)算表達(dá)式1的值; 2.再計(jì)算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次, 否則跳出循環(huán); 3.然后再計(jì)算表達(dá)式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。 在整個for循環(huán)過程中,表達(dá)式1只計(jì)算一次,表達(dá)式2和表達(dá)式3則可能計(jì)算多次。循環(huán)體可能多次執(zhí)行,也可能一次
11、都不執(zhí)行。 void main(){ /*用for語句計(jì)算s=1+2+3+...+99+100 */ int n,s=0; for(n=1;n<=100;n++) s=s+n; printf("s=%d\n",s); } 本例for語句中的表達(dá)式3為n++,實(shí)際上也是一種賦值語句,相當(dāng)于n=n+1,以改變循環(huán)變量的值。 void main(){ /*用for語句修改例題。從0開始,輸出n個連續(xù)的偶數(shù) */ int a=0,n; printf("\
12、n input n: "); scanf("%d",&n); for(;n>0;a++,n--) printf("%d ",a*2); } 本例的for語句中,表達(dá)式1已省去,循環(huán)變量的初值在for語句之前由scanf語句取得,表達(dá)式3是一個逗號表達(dá)式,由a++,n- - 兩個表達(dá)式組成。每循環(huán)一次a自增1,n自減1。a的變化使輸出的偶數(shù)遞增,n的變化控制循次數(shù)。 在使用for語句中要注意以下幾點(diǎn): 1.for語句中的各表達(dá)式都可省略,但分號間隔符不能少。 如:for(;表達(dá)式;表達(dá)式)省去了表達(dá)式1。 for(表達(dá)式;;表達(dá)式)省去了表達(dá)
13、式2。 for(表達(dá)式;表達(dá)式;)省去了表達(dá)式3。 for(;;)省去了全部表達(dá)式。 2.在循環(huán)變量已賦初值時(shí),可省去表達(dá)式1。如省去表達(dá)式2或表達(dá)式3則將造成無限循環(huán), 這時(shí)應(yīng)在循環(huán)體內(nèi)設(shè)法結(jié)束循環(huán)。 void main(){ int a=0,n; printf("\n input n: "); scanf("%d",&n); for(;n>0;) { a++;n--; printf("%d ",a*2); } } 本例中省略了表達(dá)式1和表達(dá)式3,由循環(huán)體內(nèi)的n--語句進(jìn)行循環(huán)變量n的遞減,以控制循環(huán)次數(shù)。 void main(){
14、 int a=0,n; printf("\n input n: "); scanf("%d",&n); for(;;){ a++;n--; printf("%d ",a*2); if(n==0)break; } } 本例中for語句的表達(dá)式全部省去。由循環(huán)體中的語句實(shí)現(xiàn)循環(huán)變量的遞減和循環(huán)條件的判斷。當(dāng)n值為0時(shí),由break語句中止循環(huán),轉(zhuǎn)去執(zhí)行for以后的程序。在此情況下,for語句已等效于while( 1)語句。如在循環(huán)體中沒有相應(yīng)的控制手段,則造成死循環(huán)。 3.循環(huán)體可以是空語句。 #include"stdio.h" void ma
15、in(){ int n=0; printf("input a string:\n"); for(;getchar()!='\n';n++); printf("%d",n); } 本例中,省去了for語句的表達(dá)式1,表達(dá)式3也不是用來修改循環(huán)變量,而是用作輸入字符的計(jì)數(shù)。這樣,就把本應(yīng)在循環(huán)體中完成的計(jì)數(shù)放在表達(dá)式中完成了。因此循環(huán)體是空語句。應(yīng)注意的是,空語句后的分號不可少,如缺少此分號,則把后面的printf 語句當(dāng)成循環(huán)體來執(zhí)行。反過來說,如循環(huán)體不為空語句時(shí), 決不能在表達(dá)式的括號后加分號, 這樣又會認(rèn)為循環(huán)體是空語句而不能反復(fù)執(zhí)行。這些都是編程
16、中常見的錯誤,要十分注意。 5. for語句也可與while,do-while語句相互嵌套,構(gòu)成多重循環(huán)。以下形成都合法的嵌套。 (1)for(){… while() {…} … } (2)do{… for() {…} … } while(); (3)while(){… for() {…} … } (4)for(){… for(){ … } } 例:void main(){ int i,j,k; for(i=1;i<=3;i++) { for(j=1;j<=3-i+5;j++) printf
17、(" "); for(k=1;k<=2*i-1+5;k++) { if(k<=5) printf(" "); else printf("*"); } printf("\n"); } } §6.8 break語句和continue 語句 1. break語句 break語句只能用在switch 語句或循環(huán)語句中, 其作用是跳出switch語句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。由于break語句的轉(zhuǎn)移方向是明確的,所以不需要語句標(biāo)號與之配合。break語句的一般形式為: break;本章前面的例題中分別在swit
18、ch語句和for語句中使用了break 語句作為跳轉(zhuǎn)。使用break語句可以使循環(huán)語句有多個出口,在一些場合下使編程更加靈活、方便。 2. continue語句 continue語句只能用在循環(huán)體中,其一般格式是: continue; 其語義是:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是,本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。 void main(){ /* 輸出100以內(nèi)能被7整除的數(shù) */ int n; for(n=7;n<=100;n++) { if (n%7
19、!=0) continue; printf("%d ",n); } } 本例中,對7~100的每一個數(shù)進(jìn)行測試,如該數(shù)不能被7整除,即模運(yùn)算不為0,則由continus語句轉(zhuǎn)去下一次循環(huán)。只有模運(yùn)算為0時(shí),才能執(zhí)行后面的printf語句,輸出能被7整除的數(shù)。 #include"stdio.h" void main(){ /* 檢查輸入的一行中有無相鄰兩字符相同 */ char a,b; printf("input a string:\n"); b=getchar(); while((a=getchar())!='\n
20、'){ if(a==b){ printf("same character\n");break;}
b=a; } }
本例程序中,把第一個讀入的字符送入b。然后進(jìn)入循環(huán),把下一字符讀入a,比較a,b是否相等,若相等則輸出提示串并中止循環(huán),若不相等則把a(bǔ)中的字符賦予b,輸入下一次循環(huán)。
void main(){ /*輸出100以內(nèi)的素?cái)?shù)。素?cái)?shù)是只能被1 和本身整除的數(shù)*/
int n,i; /*可用窮舉法來判斷一個數(shù)是否是素?cái)?shù) */
for(n=2;n<=100;n++){ for(i=2;i 21、) if(n%i==0) break;
if(i>=n) printf("\t%d",n); } }
本例程序中,第一層循環(huán)表示對1~100這100個數(shù)逐個判斷是否是素?cái)?shù),共循環(huán)100次,在第二層循環(huán)中則對數(shù)n用2~n-1逐個去除,若某次除盡則跳出該層循環(huán),說明不是素?cái)?shù)。 如果在所有的數(shù)都是未除盡的情況下結(jié)束循環(huán),則為素?cái)?shù),此時(shí)有i>=n, 故可經(jīng)此判斷后輸出素?cái)?shù)。然后轉(zhuǎn)入下一次大循環(huán)。 實(shí)際上,2以上的所有偶數(shù)均不是素?cái)?shù),因此可以使循環(huán)變量的步長值改為2,即每次增加2,此外只需對數(shù)n用2~n去除就可判斷該數(shù)是否素?cái)?shù)。這樣將大大 22、減少循環(huán)次數(shù),減少程序運(yùn)行時(shí)間。
#include"math.h"
void main(){
int n,i,k;
for(n=2;n<=100;n+=2){ k=sqrt(n); for(i=2;i 23、式末尾加上分號即可構(gòu)成表達(dá)式語句,常用的表達(dá)式語句為賦值語句。
(2)函數(shù)調(diào)用語句:由函數(shù)調(diào)用加上分號即組成函數(shù)調(diào)用語句。
(3)控制語句: 用于控制程序流程,由專門的語句定義符及所需的表達(dá)式組成。主要有條件判斷執(zhí)行語句,循環(huán)執(zhí)行語句,轉(zhuǎn)向語句等。
(4)復(fù)合語句: 由{}把多個語句括起來組成一個語句。 復(fù)合語句被認(rèn)為是單條語句,它可出現(xiàn)在所有允許出現(xiàn)語句的地方,如循環(huán)體等。
(5)空語句: 僅由分號組成,無實(shí)際功能。
3.C語言中沒有提供專門的輸入輸出語句,所有的輸入輸出都是由調(diào)用標(biāo)準(zhǔn)庫函數(shù)中的輸入輸出函數(shù)來實(shí)現(xiàn)的。scanf和getchar函數(shù)是輸入函數(shù),接收來自鍵盤的輸入數(shù)據(jù) 24、。scanf是格式輸入函數(shù), 可按指定的格式輸入任意類型數(shù)據(jù),getchar函數(shù)是字符輸入函數(shù),只能接收單個字符。 printf和putchar函數(shù)是輸出函數(shù),向顯示器屏幕輸出數(shù)據(jù)。printf是格式輸出函數(shù),可按指定的格式顯示任意類型的數(shù)據(jù)。putchar是字符顯示函數(shù),只能顯示單個字符。
4.關(guān)系表達(dá)式和邏輯表達(dá)式是兩種重要的表達(dá)式,主要用于條件執(zhí)行的判斷和循環(huán)執(zhí)行的判斷。
5.C語言提供了多種形式的條件語句以構(gòu)成分支結(jié)構(gòu)。
(1)if語句主要用于單向選擇;(2)if-else語句主要用于雙向選擇; (3)if-else-if語和switch語句用于多向選擇。這幾種形式的條件語句一般 25、來說是可以互相替代的。
6.C語言提供了三種循環(huán)語句。
(1)for語句主要用于給定循環(huán)變量初值, 步長增量以及循環(huán)次數(shù)的循環(huán)結(jié)構(gòu)。
(2)循環(huán)次數(shù)及控制條件要在循環(huán)過程中才能確定的循環(huán)可用 while或do-while語句。
(3)三種循環(huán)語句可以相互嵌套組成多重循環(huán)。循環(huán)之間可以并列但不能交叉。
(4)可用轉(zhuǎn)移語句把流程轉(zhuǎn)出循環(huán)體外,但不能從外面轉(zhuǎn)向循環(huán)體內(nèi)。
(5)在循環(huán)程序中應(yīng)避免出現(xiàn)死循環(huán),即應(yīng)保證循環(huán)變量的值在運(yùn)行過程中可以得到修改,并使循環(huán)條件逐步變?yōu)榧?,從而結(jié)束循環(huán)。
7.C語言語句小結(jié):
名 稱
一 般 形 式
簡單語句
表達(dá) 26、式語句表達(dá)式;
空語句;
復(fù)合語句
{ 語句 }
條件語句
if(表達(dá)式)語句;
if(表達(dá)式)語句1; else語句2;
if(表達(dá)式1)語句1; else if(表達(dá)式2) 語句2…else語句 n;
開關(guān)語句
switch(表達(dá)式){ case常量表達(dá)式: 語句…default: 語句; }
循環(huán)語句
while語句
while(表達(dá)式)語句;
for語句
for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)語句;
break語句
break;
goto語句
goto;
continue語句
continue;
return 語句
return(表達(dá)式);
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全評價(jià)師基礎(chǔ)知識教程
- 19、雪孩子(教育精品)
- “綠色建筑”研討會
- 2022年浙教初中數(shù)學(xué)七上《絕對值》課件6
- 2022年北師大版小學(xué)數(shù)學(xué)《快樂的動物》課件
- 中考語文課件中考語文議論文構(gòu)思課件
- 《己亥雜詩》教學(xué)課件
- 職場禮儀培訓(xùn)教材(PPT 33頁)
- 百分?jǐn)?shù)的認(rèn)識課件 (2)(教育精品)
- 2623求二次函數(shù)的表達(dá)式
- 三年級語文上冊 第三單元期末總復(fù)習(xí)課件 新人教版 (1038)
- 招聘選拔與培養(yǎng)
- 《鄒忌諷齊王納諫》課件
- 中職 CAXA電子圖板繪圖教程(2007版)(第2版)第9章電子課件(電子教案)
- 必修2近代工業(yè)的艱難起步課件