




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、4-1 選擇(xunz)結(jié)構(gòu)語句4.1.1 if語句 程序設(shè)計(jì)過程中,常常需要根據(jù)某一條件是否滿足來判斷(pndun)做或者不做某件事。這種結(jié)構(gòu)在c中是通過if語句實(shí)現(xiàn)的。第1頁/共65頁第一頁,共66頁。if語句的三種(sn zhn)形式(1)形式一: If (表達(dá)式) 語句說明:表達(dá)式通常為關(guān)系表達(dá)式或邏輯表達(dá)式,兩邊的括號必不可少,當(dāng)語句不止一句的時候,可以使用一組括號把他們組成(z chn)復(fù)合語句。 例如(lr):If (xy) printf( “%d”, x);第2頁/共65頁第二頁,共66頁。否表達(dá)式語句真否流程圖執(zhí)行過程(guchng):先計(jì)算表達(dá)式的值,如果表達(dá)式的值為非零,
2、則執(zhí)行語句;如果值為零,則跳過if語句執(zhí)行其后續(xù)語句。第3頁/共65頁第三頁,共66頁。例4.1 一個猜字游戲程序。程序運(yùn)行時,要求游戲者從鍵盤輸入一個數(shù),如果猜對了,屏幕顯示“*Right*”;否則屏幕不顯示任何(rnh)信息。舉例(j l) 第4頁/共65頁第四頁,共66頁。#include main() int magic=123; int guess; printf(“Enter your guess:); scanf(“%d,&guess); if (guess=magic) printf(“*Right*n); 第5頁/共65頁第五頁,共66頁。if語句的三種(sn zhn)形式(
3、2) 形式(xngsh)二: If (表達(dá)式) 語句1 else 語句2 例如(lr):If (xy) printf “%d”, x);Else printf(“%d”,y);第6頁/共65頁第六頁,共66頁。真(非0)假(0)表達(dá)式成立嗎?語句序列1語句序列2執(zhí)行過程:先計(jì)算表達(dá)式的值,如果(rgu)表達(dá)式的值為非零,則執(zhí)行語句1后跳過語句2而執(zhí)行后續(xù)語句;如果(rgu)值為零,則跳過語句1執(zhí)行語句2。第7頁/共65頁第七頁,共66頁。注意:1.c語言(yyn)每條語句必須以分號結(jié)束,因此else之前有一分號,整個語句結(jié)束處有一分號。例:if(ab) printf(“%d”,a); else
4、 printf (“%d”,b); 正確if(ab) printf(“%d”,a) else printf (“%d”,b); 錯誤2.語句1與語句2不能同時執(zhí)行。第8頁/共65頁第八頁,共66頁。 例4.2 4.2 將例4.14.1程序中的ifif語句改成(i chn)if-else(i chn)if-else語句,如果游戲者猜對了,就顯示”* * *RightRight* * *”,若猜錯了,就顯示“* * *WrongWrong* * *”。舉例舉例(j l) 第9頁/共65頁第九頁,共66頁。#include main() int magic=123; int guess; print
5、f(Enter your guess:); scanf(%d,&guess); if (guess=magic) printf(*Right*n); else printf(*Wrong*n); 第10頁/共65頁第十頁,共66頁。if 語句(yj)的三種形式(3)形式(xngsh)三: if (表達(dá)式1) 語句1;else if (表達(dá)式2) 語句(yj)2; else if (表達(dá)式3) 語句3;.else if (表達(dá)式n) 語句序列n;else 語句序列n+1;第11頁/共65頁第十一頁,共66頁。 這種形式可以實(shí)現(xiàn)多分支選擇的功能(gngnng),既在多種條件下的不同分支中選擇一個分
6、支來執(zhí)行。 它的執(zhí)行過程為:若表達(dá)式1的值為真(非零),則執(zhí)行語句1;否則,若表達(dá)式2的值為真,則執(zhí)行語句2;.若上述表達(dá)式的值都為0時,執(zhí)行語句n+1.以下為流程圖:第12頁/共65頁第十二頁,共66頁。例如(lr):表達(dá)式1成立嗎?真(非0)語句序列1語句序列2真(非0)語句序列3真(非0)語句序列n真(非0)表達(dá)式2成立嗎?假(0)表達(dá)式3成立嗎?假(0)表達(dá)式n成立嗎?假(0)語句序列n+1假(0)if (x0) y=1;else if (x=0) y=0; else y=-1;第13頁/共65頁第十三頁,共66頁。例4.3 例4.2再擴(kuò)充(kuchng),即當(dāng)游戲者猜錯時,屏幕除顯示
7、“*Wrong*”外,還告訴游戲者是猜大了還是猜小了。舉例(j l) 第14頁/共65頁第十四頁,共66頁。#include main() int magic=123; int guess; printf(Enter your guess:); scanf(%d,&guess); if (guess=magic) printf(*Right*n); else if(guessmagic) printf(*Wrong*nToo high*n) else printf(*Wrong*nToo low*n);第15頁/共65頁第十五頁,共66頁。說明說明(shumng):以上三種格式中的表達(dá)式一般為
8、關(guān)系表達(dá)式或邏輯表達(dá)式只要表以上三種格式中的表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式只要表達(dá)式的結(jié)果不為達(dá)式的結(jié)果不為0,系統(tǒng)就認(rèn)為該表達(dá)式成立;相反表達(dá)式的結(jié)果,系統(tǒng)就認(rèn)為該表達(dá)式成立;相反表達(dá)式的結(jié)果為為0,系統(tǒng)認(rèn)為該表達(dá)式不成立。,系統(tǒng)認(rèn)為該表達(dá)式不成立。例如:例如:if(a=b&x=y) printf(“a=b,x=y”);系統(tǒng)對表達(dá)式的值進(jìn)行判斷,若為系統(tǒng)對表達(dá)式的值進(jìn)行判斷,若為(ru wi)真,按非零處理,真,按非零處理,執(zhí)行指定的語句;若為執(zhí)行指定的語句;若為(ru wi)假,按零處理。假,按零處理。 如:如:if (3) printf(“ok.”)表達(dá)式的值為表達(dá)式的值為3,按真處
9、理,是合法的,執(zhí)行結(jié)果輸出,按真處理,是合法的,執(zhí)行結(jié)果輸出“ok.”由此可見由此可見.在在C語言中它也可以是任意的數(shù)值表達(dá)式。(包括整型,語言中它也可以是任意的數(shù)值表達(dá)式。(包括整型,字符型,實(shí)型,指針型)。字符型,實(shí)型,指針型)。第16頁/共65頁第十六頁,共66頁。在每個表達(dá)式之后不應(yīng)有任何標(biāo)點(diǎn)符號,而在每個語句之后都要有“;” 不要誤認(rèn)為else 語句和if語句是兩個語句,else 是if語句的一部分。只能與 if 配對使用。僅 else 本身不能單獨(dú)作為一個語句使用 每個語句又都可以由若干C語言的語句組成,如果由兩個以上語句構(gòu)成語句序列,則應(yīng)用(yngyng)大括號括起來構(gòu)成一個復(fù)合
10、語句。括號之外不再加 “;”.如:if(a+bc&b+ca&c+ab) s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%6.2f”,area); else printf(“it is wrong”);內(nèi)是一個完整的復(fù)合語句,不需另附分號。第17頁/共65頁第十七頁,共66頁。例:輸入兩個(lin )實(shí)數(shù),按代數(shù)值有小到大次序輸出這兩個數(shù)。main()float a,b,t;scanf(“%f,%f”,&a,&b);if(ab)t=a;a=b;b=t;printf(“%5.2f, %5.2f”,a,b);運(yùn)行情況如下(rxi)
11、:3.6,-3.2-3.20,3.60第18頁/共65頁第十八頁,共66頁。4.1.2 if 語句(yj)的嵌套 if語句的三種形式的語句體中可以是任意(rny)的c語言語句,包括if語句。如果if的語句體又是if語句,稱為嵌套的if語句。內(nèi)嵌的if語句既可以嵌套在if子句,也可以在else子句中。例如:求a,b,c三個數(shù)中最大值if (a=b) if (a=c) max=a; else max=c;else if (b=c) max=b; else max=c;內(nèi)嵌if內(nèi)嵌if第19頁/共65頁第十九頁,共66頁。二義性:if (表達(dá)式1) if (表達(dá)式2) 語句(yj)序列2;else
12、語句(yj)序列3;應(yīng)如何(rh)理解?有兩種理解(lji)方式:if (表達(dá)式1) if (表達(dá)式2) 語句序列2; else 語句序列3;if (表達(dá)式1) if (表達(dá)式2) 語句序列2;else 語句序列3;語言規(guī)定:else總是與它前面最近的且未曾配對的if配對。if (表達(dá)式1) if (表達(dá)式2) 語句序列2; else 語句序列3; if (表達(dá)式1) if (表達(dá)式2) 語句序列2;else 語句序列3;第20頁/共65頁第二十頁,共66頁。舉例(j l) 用嵌套if結(jié)構(gòu)(jigu)代替例4.3中的 if-else-if結(jié)構(gòu)(jigu)。第21頁/共65頁第二十一頁,共66頁
13、。#include main() int magic=123; int guess; printf(“Enter your guess:”); scanf(“%d”,&guess); if (guess=magic) printf(“*Right*n”); else printf(“*Wrong*”); if (guessmagic) printf(“Too high*n”); else printf(“Too low*n”); 第22頁/共65頁第二十二頁,共66頁。4.1.3. 4.1.3. 條件運(yùn)算符條件運(yùn)算符若若ifif語句中,在表達(dá)式為真和假時,且都只執(zhí)行語句中,在表達(dá)式為真和假時,
14、且都只執(zhí)行一個賦值語句給同一個變量賦值時,可以用條一個賦值語句給同一個變量賦值時,可以用條件運(yùn)算符來處理。件運(yùn)算符來處理。條件運(yùn)算符條件運(yùn)算符 ? : ? :條件表達(dá)式條件表達(dá)式 exp1?exp2:exp3 exp1?exp2:exp3 exp1 exp1、exp2exp2和和exp3exp3都是表達(dá)式,其功能是:先都是表達(dá)式,其功能是:先計(jì)算計(jì)算exp1exp1,若,若exp10exp10,則計(jì)算,則計(jì)算exp2exp2,將,將exp2exp2的值作為整個的值作為整個(zhngg)(zhngg)條件表達(dá)式的值;若條件表達(dá)式的值;若exp1=0exp1=0,則計(jì)算,則計(jì)算exp3exp3,將
15、,將exp3exp3的值作為整個的值作為整個(zhngg)(zhngg)條件表達(dá)式的值。條件表達(dá)式的值。 如:如:if(ab) c=a;else c=b;if(ab) c=a;else c=b; 可以改寫為:可以改寫為:c=(ab)?a:bc=(ab)?a:b表示:若表示:若abab,取,取a a的值,否則取的值,否則取b b的值作為該條的值作為該條件表達(dá)式的值。件表達(dá)式的值。第23頁/共65頁第二十三頁,共66頁。說明:1.條件運(yùn)算符要求(yoqi)有三個操作對象。2.條件運(yùn)算符優(yōu)先于賦值運(yùn)算符,因此上面賦值表達(dá)式的求解過程是先求解條件表達(dá)式,再將它的值賦給c.條件運(yùn)算符的優(yōu)先級別比關(guān)系運(yùn)算
16、符和算術(shù)運(yùn)算符都低 max=(ab)?a:b 括號可以不要: max=ab?a:b如果有:ab?a:b+1相當(dāng)于:ab?a:(b+1)第24頁/共65頁第二十四頁,共66頁。3.條件運(yùn)算符的結(jié)合方向?yàn)椤白杂蚁蜃蟆?,若有?ab?a:cd?c:d相當(dāng) 于: ab?a:(cd?c:d)若:a=1,b=2,c=3,d=4 則條件表達(dá)式值為4。4.條件表達(dá)式不能取代一般的if語句,只有if語句中內(nèi)嵌的的語句為賦值語句(且兩個分支都給同一個變量賦值)時才能代替if語句。如: if(ab) printf(“%d”,a); else printf(“%d”,a);無法(wf)用條件表達(dá)式代替但可以用下面語句
17、代替: printf(“%d”,ab?a:b); /將條件表達(dá)式的值輸出/第25頁/共65頁第二十五頁,共66頁。5.條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3不同。如: x? a : bx是整形變量,若x=0,則條件表達(dá)式的值為b表達(dá)式2和表達(dá)式3的類型也可以不同。此時條件表達(dá)式的值的類型為二者中較高的類型。如: xy?1:1.5如果xy,則表達(dá)式的值為1.5。若xy,值應(yīng)為1,由于(yuy)1.5是實(shí)型比整型高,因此應(yīng)轉(zhuǎn)換為1.0第26頁/共65頁第二十六頁,共66頁。用條件(tiojin)表達(dá)式代替例4.3中的if-else。舉例(j l) 第27頁/共65頁第二十七頁,共66
18、頁。#include main() int magic=123; int guess; printf(“ Enter your guess: ”); scanf(“ %d ”,&guess); if (guess=magic) printf(“ *Right*n ”); else printf(“ *Wrong* ”); guessmagic?printf(“ Too highn ”) :printf(“Too lown”); 第28頁/共65頁第二十八頁,共66頁。4.1.4 switch /break4.1.4 switch /break語句(yj)(yj)多分支(fnzh)switch
19、結(jié)構(gòu)switch (表達(dá)式) case 常量表達(dá)式1:語句1 case 常量表達(dá)式2:語句2 case 常量表達(dá)式n:語句n default : 語句n+1語句(yj)n+1表達(dá)式語句1語句2語句n常量表達(dá)式2常量表達(dá)式1常量表達(dá)式n其它 if-else-if結(jié)構(gòu)或嵌套的if語句可以解決多分支的選擇問題,但若判斷條件太多,關(guān)系就不夠清晰,switch可解決。第29頁/共65頁第二十九頁,共66頁。說明:1.switch后面括弧內(nèi)的“表達(dá)式”和case常量表達(dá)式,可以是任何(rnh)類型。2.當(dāng)表達(dá)式的值與某一個case后面的常量表達(dá)式的值相等時,就執(zhí)行此case后面的語句,若所有的case中的
20、常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。3.每一個case的常量表達(dá)式的值必須不相等,否則就會出現(xiàn)矛盾的現(xiàn)象(對表達(dá)式的同一個值,有多種執(zhí)行方案)第30頁/共65頁第三十頁,共66頁?!纠?從鍵盤輸入不同(b tn)的字母,顯示不同(b tn)的國家名稱。 #include main() char ch; ch=getchar(); switch(ch) case a: printf(“American”); case b: printf(“Britainn”); case c: printf(“Chinan”); case d: printf(“Denmar
21、kn”); default: printf(“Japann”); 4.執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行。 “case常量(chngling)表達(dá)式”只是起語句標(biāo)號的作用,并不在該處進(jìn)行條件判斷。第31頁/共65頁第三十一頁,共66頁。注意,case及default的位置直接影響到程序的運(yùn)行(ynxng)結(jié)果。#include main() char ch; ch=getchar(); switch(ch) default: printf(“Japann”); case a: printf(“American”); case b: printf(“Britai
22、nn”); case c: printf(“Chinan”); case d: printf(“Denmarkn”); 第32頁/共65頁第三十二頁,共66頁。程序運(yùn)行時,從鍵盤輸入字母(zm)“a”,顯示: America Britai China Denmark Japan如果輸入字母(zm)“b”,顯示:“Japan”。 Britain China Denmark Japan如果(rgu)輸入a、b、c、d以外的字母,顯示: Japan第33頁/共65頁第三十三頁,共66頁。5.case后面雖然包括(boku)一個以上語句,但可以不必用花括弧括起來,會自動順序執(zhí)行本case后所有的語句。
23、7.多個case可以共用一組執(zhí)行語句。如: . . . case A: case B: case C: printf(“60n”);break; . . .值為A,B,或C時都執(zhí)行同一組語句。第34頁/共65頁第三十四頁,共66頁。2. break語句break與switch聯(lián)用,強(qiáng)迫控制立即退出switch防止從一個case下落(xilu)到另一個case中防止因case和default位置的改變而影響程序的運(yùn)行結(jié)果第35頁/共65頁第三十五頁,共66頁。【例】 在例4.6程序(chngx)中加入break。#include main() char ch; ch=getchar(); swi
24、tch(ch) case a: printf(“American”);break; case b: printf(“Britainn”);break; case c: printf(“Chinan”);break; case d: printf(“Denmarkn”);break; default: printf(“Japann”);break;第36頁/共65頁第三十六頁,共66頁。switch和break語句(yj)的使用 如果每個case和default中都有break語句(yj),那么,case和default出現(xiàn)的次序 不會影響程序的運(yùn)行結(jié)果。第37頁/共65頁第三十七頁,共66頁。
25、4.2 循環(huán)(xnhun)結(jié)構(gòu)語句循環(huán)(xnhun)是對同一程序重復(fù)執(zhí)行若干次,被重復(fù)執(zhí)行的部分稱為循環(huán)(xnhun)體.每循環(huán)(xnhun)一次需要進(jìn)行判斷一決定是繼續(xù)循環(huán)還是中止循環(huán)(xnhun).決定循環(huán)(xnhun)繼續(xù)還是中止的判斷條件是循環(huán)(xnhun)中止條件,循環(huán)(xnhun)體和循環(huán)(xnhun)中止條件組成循環(huán)(xnhun)語句.在語言中,可用以下語句實(shí)現(xiàn)循環(huán)(xnhun):(1)用for語句。(2)用do-while語句。(3)用while語句。(4)用goto語句和if語句構(gòu)成循環(huán)(xnhun)。第38頁/共65頁第三十八頁,共66頁。4.2.1 使用if/goto構(gòu)成
26、循環(huán)goto為無條件轉(zhuǎn)向條件,他的一般形式: goto 語句標(biāo)號語句功能:執(zhí)行完本句后,無條件跳轉(zhuǎn)到語句標(biāo)號所標(biāo)示的語句去執(zhí)行。語句標(biāo)號也是標(biāo)識符。語句標(biāo)號和語句之間以“:”分隔。goto語句主要用途:1.與if語句一起(yq)構(gòu)成循環(huán)語句。2.從循環(huán)體內(nèi)跳轉(zhuǎn)到循環(huán)體外。第39頁/共65頁第三十九頁,共66頁。求1100的累計(jì)和。根據(jù)已有的知識,可以(ky)用“1+2+100”來求解,但顯然很繁瑣?,F(xiàn)在換個思路來考慮:首先設(shè)置一個累計(jì)器sum,其初值為0,利用sum += n來計(jì)算(n依次取1、2、100),只要解決以下3個問題即可: (1)將n的初值置為1; (2)每執(zhí)行1次“sum +=
27、n”后,n增1; (3)當(dāng)n增到101時,停止計(jì)算。此時,sum的值就是1100的累計(jì)和。main() int n=1, sum=0; loop: sum += n; n+; if (n=100) goto loop; printf(“sum=%dn”, sum);其中(qzhng)“l(fā)oop:”為語句標(biāo)號(格式:標(biāo)號: 語句行),其命名遵循標(biāo)識符命名規(guī)則。goto語句格式:goto 標(biāo)號,功能為:使系統(tǒng)轉(zhuǎn)向標(biāo)號所在的語句行執(zhí)行。第40頁/共65頁第四十頁,共66頁。4.2.2 while循環(huán)也稱為“當(dāng)型”循環(huán),一般形式為: while(循環(huán)繼續(xù)條件) 循環(huán)體語句(yj)組;執(zhí)行過程: 1)求
28、解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值為非0,轉(zhuǎn)2);否則轉(zhuǎn)3)。2)執(zhí)行循環(huán)體語句(yj)組,然后轉(zhuǎn)1)。3)推出while循環(huán)。特點(diǎn): 先判斷表達(dá)式,后執(zhí)行語句(yj)。表達(dá)式語句非00第41頁/共65頁第四十一頁,共66頁。案例5.3 用while語句求1100的累計(jì)(li j)和。main() int i=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)(li j)器sum*/ while( i=100 ) sum += i;/*實(shí)現(xiàn)累加*/ i+;/*循環(huán)控制變量i增1*/ printf(“sum=%dn”,sum); 程序運(yùn)行情況如下: sum=5050若循環(huán)體改為:while( i=
29、100 ) i+; sum += i; 則結(jié)果為:sum=5150少加了第一項(xiàng)的值1,多加了最后一項(xiàng)101表達(dá)式i=1sum=sum+ii=i+1真假循環(huán)體若包含一個以上語句(yj),應(yīng)用花括號括起來第42頁/共65頁第四十二頁,共66頁。4.2.3 do-while循環(huán)1一般格式(g shi) do 循環(huán)體語句組; while(循環(huán)繼續(xù)條件);/*本行的分號不能缺省*/當(dāng)循環(huán)體語句組僅由一條語句構(gòu)成時,可以不使用復(fù)合語句形式。2執(zhí)行過程執(zhí)行過程如圖5-3所示。(1)執(zhí)行循環(huán)體語句組。(2)計(jì)算“循環(huán)繼續(xù)條件”表達(dá)式。如果“循環(huán)繼續(xù)條件”表達(dá)式的值為非 0(真),則轉(zhuǎn)向(1)繼續(xù)執(zhí)行;否則,轉(zhuǎn)
30、向(3)。(3)退出循環(huán)。do-while循環(huán)語句的特點(diǎn)是:先執(zhí)行循環(huán)體語句組,然后再判斷循環(huán)條件。第43頁/共65頁第四十三頁,共66頁。do-while循環(huán)和while循環(huán)十分相似,他們的重要區(qū)別是:While循環(huán)的控制出現(xiàn)在循環(huán)體之前,只有while后面的表達(dá)式的值為非零時,才可能(knng)執(zhí)行循環(huán)體;在do-while循環(huán)中,總是先執(zhí)行一次循環(huán)體后再求表達(dá)式的值,因此,無論表達(dá)式的值為0或非0,循環(huán)體都至少要執(zhí)行一次。案例 用do-while語句求解1100的累計(jì)和。main() int i=1, sum=0; /*定義(dngy)并初始化循環(huán)控制變量,以及累計(jì)器*/ do sum
31、+= i; /*累加*/ i+; while(i=100);/*循環(huán)繼續(xù)條件:i=100*/ printf(“sum=%dn”,sum); 說明: while (表達(dá)式)后的分號不能丟,他表示do-while 語句的結(jié)束。第44頁/共65頁第四十四頁,共66頁。4.2.4 for循環(huán)1for語句的一般格式 for(變量賦初值;循環(huán)繼續(xù)條件;循環(huán)變量增值) 循環(huán)體語句組;2for語句的執(zhí)行過程執(zhí)行過程如圖5-1所示。(1)求解“變量賦初值”表達(dá)式。(2)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)行(3);否則,轉(zhuǎn)至(4)。(3)執(zhí)行循環(huán)體語句組,并求解“循環(huán)變量增值”表達(dá)式,然后(rnhu)轉(zhuǎn)
32、向(2)。(4)退出循環(huán)。第45頁/共65頁第四十五頁,共66頁。3說明(1)“變量賦初值”、“循環(huán)繼續(xù)條件”和“循環(huán)變量增值”部分均可缺省,1) “變量賦初值”可省略,此時應(yīng)在for語句前給循環(huán)控制變量賦初值。例: k=1; for(;k=100;k+) sum+=k;2) “循環(huán)繼續(xù)條件”可省略,此時系統(tǒng)認(rèn)為(rnwi)其始終為真,循環(huán)將無限循環(huán)下去,除非循環(huán)體內(nèi)有break語句。3) “循環(huán)變量增值”可以省略,此時應(yīng)在循環(huán)體內(nèi)修改循環(huán)變量,使循環(huán)能正常結(jié)束。例: for(k=1;k=100;) sum+=k; k+甚至全部缺省,但其間的分號不能省略。三個都省略時,因?yàn)槿鄙贄l件判斷,循環(huán)將
33、會無限執(zhí)行。第46頁/共65頁第四十六頁,共66頁。2)當(dāng)循環(huán)體語句組僅由一條語句構(gòu)成時,可以不使用復(fù)合語句形式。(3)“循環(huán)變量賦初值”表達(dá)式,既可以是給循環(huán)變量賦初值的賦值表達(dá)式,也可以是與此無關(guān)的其它表達(dá)式(如逗號表達(dá)式)。例如(lr),for(sum=0;i=100;i+) sum += i; for(sum=0,i=1;i=100;i+) sum += i;(4)“循環(huán)繼續(xù)條件”部分是一個邏輯量,除一般的關(guān)系(或邏輯)表達(dá)式外,也允許是數(shù)值(或字符)表達(dá)式。案例 求1100的累計(jì)和。main() int i,sum=0; /*將累加器sum初始化為0*/ for(i=1; i=100
34、; i+) sum += i;/*實(shí)現(xiàn)累加*/ printf(sum=%dn,sum); 第47頁/共65頁第四十七頁,共66頁。案例 求n的階乘n!(n!=1*2*n)。main() int i, n; long fact=1; /*將累乘器fact初始化為1*/ printf(“Input n: ”); scanf(“%d”, &n); for(i=1; i=n; i+) fact *= i;/*實(shí)現(xiàn)(shxin)累乘*/ printf(%d ! = %ldn, n, fact); 程序運(yùn)行情況如下:Input n: 5 5 ! = 120第48頁/共65頁第四十八頁,共66頁。4.2.5
35、 幾種(j zhn)循環(huán)的比較1.四種循環(huán)一般(ybn)情況下可相互替代,但不提倡用goto構(gòu)成的循環(huán)。2.while和do-while循環(huán)只有在條件第一次就不滿足時才有區(qū)別,for循環(huán)功能強(qiáng),能用while循環(huán)完成得也能用for完成。3.用while和do-while循環(huán)時,循環(huán)變量初始化應(yīng)該在while和do-while語句之前完成,而for語句循環(huán)變量的初始化可以放在(語句1)中4. While,do-while循環(huán)和for循環(huán)都可以用break跳出循環(huán),用continue結(jié)束本次循環(huán),但對goto和if構(gòu)成的循環(huán)則失效。第49頁/共65頁第四十九頁,共66頁。一個循環(huán)體內(nèi)又包含另一個完
36、整的循環(huán)結(jié)構(gòu)(jigu),稱為循環(huán)嵌套。內(nèi)層的循環(huán)中還可以嵌套循環(huán),構(gòu)成多重循環(huán)。三種循環(huán)可以相互嵌套。while ( ) while ( ) while ( ) for ( ; ; ) for ( ; ; ) for ( ; ; ) for ( ; ; ) do while( ); do do while ( ); while ( );while ( ) do while( ); 第50頁/共65頁第五十頁,共66頁。1. 一個二重循環(huán)的例子(l zi)【例4.12】 打印六以內(nèi)的乘法表。 main() int i,j; for (i=1;i=6;i+) for (j=1;j=6;j+) p
37、rintf(“%d*%d=%2d”,i,j,i*j); printf(“n”); 第51頁/共65頁第五十一頁,共66頁。程序運(yùn)行結(jié)果是:1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 . . .6*1= 6 6*2=12 6*3=18 6*4=246 6*5=30 6*6=36 如果將程序中的內(nèi)外層循環(huán)終止條件(tiojin)改成9,就可以打印九九乘法表。第52頁/共65頁第五十二頁,共66頁。2. 嵌套循環(huán)的使用1) 內(nèi)層循環(huán)必須完全包含在外層循環(huán)中,二者不能使用相同的循
38、環(huán)變量,不能出現(xiàn)交叉。2) 循環(huán)嵌套的層數(shù)沒有限制,但層數(shù)太多,可讀性變差。3) 為了使嵌套的層次關(guān)系清晰明了,建議采用縮排格式(g shi)書寫程序。第53頁/共65頁第五十三頁,共66頁。4.2.7 break語句(yj)和continue語句(yj)第54頁/共65頁第五十四頁,共66頁。break用在循環(huán)中,只能退出它所在的那一層循環(huán),即 for (.) . while (.) . if (.) break; do . if () break; while (.); . . 不能期望(qwng)用break從最內(nèi)層循環(huán)一下子退出最外層循環(huán)第55頁/共65頁第五十五頁,共66頁。2. contiune 語句(yj)第56頁/共65頁第五十六頁,共66頁。for (.) . if (.) . continue; . 第57頁/共65頁第五十七頁,共66頁?!纠縞ontinue語句的應(yīng)用(yngyng)示例。 main() int i=1; while (i=100) if (i%3!=0) i+; continue; printf(“%d”,i); i+; printf(“n”);
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《總結(jié)我們的科學(xué)學(xué)習(xí)》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年六年級下冊科學(xué)湘科版
- 2周末巧安排 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治二年級上冊統(tǒng)編版
- 量子通信網(wǎng)絡(luò)容錯設(shè)計(jì)-深度研究
- 8 《上課了》(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治一年級上冊
- 四川外國語大學(xué)《高級語言程序設(shè)計(jì)綜合實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆山杜克大學(xué)《經(jīng)典廣告案例分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 賀州市2025年小升初數(shù)學(xué)檢測卷含解析
- 溫州醫(yī)科大學(xué)《微積分(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢科技大學(xué)《心理測量與人員甄選》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西2025年六年級下學(xué)期5月模擬預(yù)測數(shù)學(xué)試題含解析
- 綠野仙蹤(導(dǎo)讀課)課件
- 小學(xué)生防溺水安全教育主題班會ppt市公開課一等獎省名師優(yōu)質(zhì)課賽課一等獎?wù)n件
- 中國近代海關(guān)史課件
- 《人衛(wèi)版第九版內(nèi)科學(xué)心力衰竭》課件PPT
- 中藥熱鹽包熱熨講稿
- 目視檢測VT報告
- 四川省中小流域暴雨洪水計(jì)算
- 水泥熟料巖相分析
- 雜詩十二首其二陶淵明
- 第五屆大廣賽獲獎作品
- 《廣告攝影》課件第五講 食品廣告拍攝與后期制作
評論
0/150
提交評論