程序流程控制實(shí)用培訓(xùn)教程課件_第1頁(yè)
程序流程控制實(shí)用培訓(xùn)教程課件_第2頁(yè)
程序流程控制實(shí)用培訓(xùn)教程課件_第3頁(yè)
程序流程控制實(shí)用培訓(xùn)教程課件_第4頁(yè)
程序流程控制實(shí)用培訓(xùn)教程課件_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章程序的流程控制第二章程序的流程控制12.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符C的關(guān)系運(yùn)算符如下:

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

!= 不等于關(guān)系運(yùn)算符關(guān)鍵是真(true)和假(false)的概念。C中true可以是不為0的任何值,而false則為0。使用關(guān)系運(yùn)算符時(shí),若表達(dá)式為真(即true)則返回1,否則,表達(dá)式為假(即false),則返回0。例如:100>99返回110>(2+10)返回0

2.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符22.0算法的表示2.1算法的概念算法是對(duì)特定問(wèn)題求解步驟的一種描述,也是解決問(wèn)題的辦法,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。2.0算法的表示2.1算法的概念算法是對(duì)特3自然語(yǔ)言流程圖N-S圖偽代碼PAD圖2.2算法的表示2.0算法的表示自然語(yǔ)言2.2算法的表示2.0算法的表示4起止框處理框判斷框輸入輸出框流程線連接點(diǎn)注釋框2.2算法的表示---流程圖2.0算法的表示起止框處理框判斷框輸入輸出框流程線連接點(diǎn)注釋框2.2算法5程序的三種基本結(jié)構(gòu)1.順序結(jié)構(gòu)2.2算法的表示---流程圖AB流程圖2.0算法的表示程序的三種基本結(jié)構(gòu)1.順序結(jié)構(gòu)2.2算法的表示---流程圖6程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖2.選擇序結(jié)構(gòu)PAB真假2.0算法的表示程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖2.選擇序結(jié)7程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖3.循環(huán)序結(jié)構(gòu)1.當(dāng)型(while型)循環(huán)結(jié)構(gòu)2.直到型(until型)循環(huán)結(jié)構(gòu)PA假真AP真假2.0算法的表示程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖3.循環(huán)序結(jié)82.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符C的邏輯運(yùn)算符如下:

! 邏輯非

&& 邏輯與

|| 邏輯或例如:

!1&&0

先求!1和先求1&&0將會(huì)等于出不同的結(jié)果,那么何者優(yōu)先呢?這在C中是有規(guī)定的2.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符9C的部分運(yùn)算符的優(yōu)先級(jí)如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━表達(dá)式 ┃優(yōu)先級(jí)───────────────────────────╂────()(小括號(hào))[](數(shù)組下標(biāo)).(結(jié)構(gòu)成員)->(指針型結(jié)構(gòu)成員) ┃最高

!(邏輯非)~(位取反)-(負(fù)號(hào))++(加1)--(減1)&(變量地址) ┃

*(指針?biāo)竷?nèi)容)sizeof(長(zhǎng)度計(jì)算) ┃

*(乘)/(除)%(取模) ┃

+(加)-(減) ┃

<<(位左移)>>(位右移) ┃

<(小于)<=(小于等于)>(大于)>=(大于等于) ┃

==(等于)!=(不等于) ┃

&(位與) ┃

^(位異或) ┃

|(位或) ┃

&&(邏輯與) ┃

||(邏輯或) ┃

?:(?表達(dá)式) ┃

=+=-=(聯(lián)合操作) ┃

,(逗號(hào)運(yùn)算符) ┃最低━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.1選擇(分支)結(jié)構(gòu)C的部分運(yùn)算符的優(yōu)先級(jí)如下:━━━━━━━━━━━━━━━102.1.2if()…else結(jié)構(gòu)C中條件語(yǔ)句的一般形式為: if(表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;上述結(jié)構(gòu)表示:如果表達(dá)式的值為非0(true)即真,則執(zhí)行語(yǔ)句1,執(zhí)行完語(yǔ)句1從語(yǔ)句2后開(kāi)始繼續(xù)向下執(zhí)行;如果表達(dá)式的值為0(false)即假,則跳過(guò)語(yǔ)句1而執(zhí)行語(yǔ)句2。所謂表達(dá)式是指關(guān)系表達(dá)式和邏輯表達(dá)式的結(jié)合式。注意:1.條件執(zhí)行語(yǔ)句中“else語(yǔ)句2;”部分是選擇項(xiàng),可以缺省,此時(shí)條件語(yǔ)句變成:if(表達(dá)式)語(yǔ)句1;表示若表達(dá)式的值為非0則執(zhí)行語(yǔ)句1,否則跳過(guò)語(yǔ)句1繼續(xù)執(zhí)行。2.如果語(yǔ)句1或語(yǔ)句2有多于一條語(yǔ)句要執(zhí)行時(shí),必須使用"{"和"}"把這些語(yǔ)句包括在其中,此時(shí)條件語(yǔ)句形式為:if(表達(dá)式){語(yǔ)句體1;}else{語(yǔ)句體2;}

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)112.1.2if()…else結(jié)構(gòu)注意: if(表達(dá)式) {語(yǔ)句體1;} else {語(yǔ)句體2;}3.條件語(yǔ)句可以嵌套,這種情況經(jīng)常碰到,但條件嵌套語(yǔ)句容易出錯(cuò),其原因主要是不知道哪個(gè)if對(duì)應(yīng)哪個(gè)else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");對(duì)于上述情況,C規(guī)定:else語(yǔ)句與最近的一個(gè)if語(yǔ)句匹配,上例中的else與if(y<=100&&y>x)相匹配。為了使else與if(x>20||x<-10)相匹配,必須用花括號(hào)。如下所示: if(x>20||x<-10) { if(y<=100&&y>x) printf("Good"); } else printf("Bad");

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)122.1.2if()…else結(jié)構(gòu)例2.1符號(hào)函數(shù)intmain(void){ floatx; inty=-1; printf(“inputx:”); scanf(“%f”,&x); if(x!=0) { if(x>0)y=1; } else printf(“\nx=%6.2f,y=%d\n”,x,y);}f(x)=1(x>0)0(x=0)-1(x<0)2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)f(x)=1(x>0132.1.3條件運(yùn)算符與條件表達(dá)式條件表達(dá)式:e1?e2:e3例如: a=((x>0)?(x++):(x--))相當(dāng)于 if(x>0) a=x++; else a=x--;2.1選擇(分支)結(jié)構(gòu)2.1.3條件運(yùn)算符與條件表達(dá)式2.1選擇(分支)結(jié)構(gòu)142.1.2if()…else結(jié)構(gòu)例2.2數(shù)據(jù)分段處理,0-49為A段,50-119為B段,120-169為C段intmain(void){ inty; charresult; printf(“inputy:”); scanf(“%d”,&y); if(y>=0&&y<50) result=‘A’; elseif(y>=50&&y<120) result=‘B’; elseif(y>=120&&y<170) result=‘C’; else result=‘D’; printf(“\nresult=%c”,y);}

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)152.1.3switch結(jié)構(gòu)在編寫(xiě)程序時(shí),經(jīng)常會(huì)碰到按不同情況分轉(zhuǎn)的多路問(wèn)題,這時(shí)可用嵌套if-else-fi語(yǔ)句來(lái)實(shí)現(xiàn),但if-else-if語(yǔ)句使用不方便,并且容易出錯(cuò)。對(duì)這種情況,C提供了一個(gè)開(kāi)關(guān)語(yǔ)句。開(kāi)關(guān)語(yǔ)句格式為:switch(變量){

case常量1: 語(yǔ)句1或空;

case常量2: 語(yǔ)句2或空; ...

case常量n; 語(yǔ)句n或空;

default: 語(yǔ)句n+1或空;}

2.1選擇(分支)結(jié)構(gòu)

執(zhí)行switch開(kāi)關(guān)語(yǔ)句時(shí),將變量逐個(gè)與case后的常量進(jìn)行比較,若與其中一個(gè)相等,則執(zhí)行該常量下的語(yǔ)句,若不與任何一個(gè)常量相等,則執(zhí)行default后面的語(yǔ)句。注意: 1.

switch中變量可以是數(shù)值,也可以是字符。2.可以省略一些case和default。3.每個(gè)case或default后的語(yǔ)句可以是語(yǔ)句體,但不需要使用"{"和"}"括起來(lái)。

2.1.3switch結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)162.1.3switch結(jié)構(gòu)下例的switch中變量為整數(shù)型。例2.3intmain(void){ inttest; for(test=0;test<=10;test++) { switch(test) /*變量為整型數(shù)的開(kāi)關(guān)語(yǔ)句*/ { case1: printf("%d\n",test); break;/*退出開(kāi)關(guān)語(yǔ)句*/ case2: printf("%d\n",test); break; case3: printf("%d\n",test); break; default: puts("Error");break; } }}

switch中變量也可為字符2.1選擇(分支)結(jié)構(gòu)2.1.3switch結(jié)構(gòu)switch中變量也可為字符2.172.2循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式為:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{循環(huán)體}它的執(zhí)行過(guò)程如下:(1)先求解表達(dá)式1;(2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第(3)步,若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達(dá)式為真,在執(zhí)行指定的語(yǔ)句后,求解表達(dá)式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。

2.2.1for結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式為:2.2.1for18求解表達(dá)式1語(yǔ)句for語(yǔ)句的下一語(yǔ)句求解表達(dá)式3求解表達(dá)式2FT2.2.1for結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)求解表達(dá)式1語(yǔ)句for語(yǔ)句的求解表達(dá)式3求解表達(dá)式2FT2.192.2.1for結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?for(i=1;i<=100;i++)sum=sum+i;相當(dāng)于以下的while語(yǔ)句:i=1;while(i<=100){ sum=sum+i; i++;}for語(yǔ)句的一般形式用while語(yǔ)句來(lái)表示為:表達(dá)式1while(表達(dá)式2){ 語(yǔ)句 表達(dá)式3;}

2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?202.2.1for結(jié)構(gòu)for語(yǔ)句中表達(dá)式1可以省略,其后的分號(hào)不能省略介,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。如:for(;i<=100;i++)sum=sum+i;執(zhí)行時(shí),跳過(guò)“求解表達(dá)式1”這一步,其它不變。2.如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。如:for(i=1;;i++)sum=sum+i;2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)for語(yǔ)句中表達(dá)式1可以省略,其后的212.2.1for結(jié)構(gòu)3.表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。如:for(sum=0,i=1;i<=100;){sum=sum十i;i++;}本例把i++的操作不放在for語(yǔ)句的表達(dá)式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。4.可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。如:for(;i<=100;){sum=sum+i;i++;}相當(dāng)于:5.三個(gè)表達(dá)式都可省略,如for(;;)語(yǔ)句

2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)3.表達(dá)式3也可以省略,但此時(shí)程序設(shè)222.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式如下:

whi1e(表達(dá)式E)

{循環(huán)體}

;執(zhí)行過(guò)程:①計(jì)算表達(dá)式E的值②若E為非0,則執(zhí)行語(yǔ)句s,然后轉(zhuǎn)①若E為0,則退出循環(huán),執(zhí)行該循環(huán)后的語(yǔ)句ES0非0特點(diǎn):先判斷表達(dá)式,后執(zhí)行語(yǔ)句,因此,若進(jìn)入while循環(huán)時(shí)E的值就是0,則語(yǔ)句S一次也不執(zhí)行2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while232.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?intmain(void){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf(“sum=%d”,sum);}2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)例如:計(jì)算242.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)do-while語(yǔ)句用來(lái)實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu)。其一般形式為:do{循環(huán)體}while(表達(dá)式E);執(zhí)行過(guò)程:①執(zhí)行循環(huán)體S②計(jì)算E值若E的值為真(非0),則轉(zhuǎn)①若E的值為假(0),則結(jié)束循環(huán)ES0非0特點(diǎn):先執(zhí)行循環(huán)體,再判斷表達(dá)式,因此循環(huán)體至少執(zhí)行一次。2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)do-wh25例如:計(jì)算1+2+3+…+100=?main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf(“sum=%d”,sum);}2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while循環(huán)和do~while循環(huán)的區(qū)別在于:a.它們執(zhí)行循環(huán)體與計(jì)算表達(dá)式的先后順序不同,do~while先執(zhí)行循環(huán)體,再計(jì)算表達(dá)式;while循環(huán)為先計(jì)算表達(dá)式,表達(dá)式的結(jié)果為非零值,則執(zhí)行循環(huán)體語(yǔ)句。b.do~while至少要執(zhí)行一次循環(huán)體。while執(zhí)行循環(huán)體的次數(shù)可能為零次或若干次。2.2循環(huán)結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?2.2.2while26猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)桃子。

main()

{

intday,x1,x2;/*x1是今天,x2是昨天*/

day=9;

x2=1;

while(day>0)

{ x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/

x2=x1;

day--;

}

printf("thetotalis%d\n",x1);

}

2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了27本節(jié)課新內(nèi)容到此結(jié)束后面的內(nèi)容為下一節(jié)本節(jié)課新內(nèi)容到此結(jié)束后面的內(nèi)容為下一節(jié)282.2.3循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套.三種循環(huán)(whi1e循環(huán)、do-whi1e循環(huán)和for循環(huán))可以互相嵌套。例如,下面幾種都是合法的形式:(1)while()(3)for(;;){{…for(;;)while(){...}{...}}}(2)do(4)while(){...{...dodo{…}while();{...}}while();while();}2.2循環(huán)結(jié)構(gòu)2.2.3循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完292.2.4break語(yǔ)句和continue語(yǔ)句1break語(yǔ)句break語(yǔ)句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語(yǔ)句下面的一個(gè)語(yǔ)句。break語(yǔ)句還可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句。如for(r=1;r<=10;r++){ area=pi*r*r; if(area>100)break; printf(”area=%f”,area); }

break語(yǔ)句的一般形式:break;注意:break語(yǔ)句只能用于循環(huán)語(yǔ)句和switch語(yǔ)句。2.2循環(huán)結(jié)構(gòu)2.2.4break語(yǔ)句和continue語(yǔ)句1brea302.2.4break語(yǔ)句和continue語(yǔ)句2continue語(yǔ)句一般形式為continue;其作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。

continue語(yǔ)句和break語(yǔ)句的區(qū)別是:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,而break語(yǔ)句則是結(jié)束本層循環(huán),不再進(jìn)行條件判斷。如果有以下兩個(gè)循環(huán)結(jié)構(gòu):(1)while(表達(dá)式1)(2)while(表達(dá)式1){…{…if(表達(dá)式2)break;if(表達(dá)式2)continue;……}}2.2循環(huán)結(jié)構(gòu)2.2.4break語(yǔ)句和continue語(yǔ)句2cont31例6.6把100-200之間的不能被3整除的數(shù)輸出。main(){ intn; for(n=100;n<=200;n++) { if(n%3==0) continue; printf("%d",n); }}2.2.4break語(yǔ)句和continue語(yǔ)句2.2循環(huán)結(jié)構(gòu)例6.6把100-200之間的不能被3整除的數(shù)輸出。322.2.5程序舉例例1用π/4=1-1/3+1/5-1/7+…求π的近似值,直到某一項(xiàng)的絕對(duì)值小于10-6為止。#include<math.h>intmain(void){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;while(fabs(t)>1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f",pi);}2.2循環(huán)結(jié)構(gòu)2.2.5程序舉例例1用π/4=1-1/3+1/5-1/332.2.5程序舉例例2求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1,2兩個(gè)數(shù)為1,1。從第三個(gè)數(shù)開(kāi)始,該數(shù)是前兩個(gè)數(shù)之和。即:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)intmain(void){longf1,f2;inti;f1=1;f2=1;for(i=1;i<=20;i++){printf("%12ld%12ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}}2.2循環(huán)結(jié)構(gòu)2.2.5程序舉例例2求Fibonacci數(shù)列前40個(gè)數(shù)342.2.5程序舉例例3求100~200之間的全部素?cái)?shù)。#include<math.h>intmain(void){intm,k,i,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k){printf("%4d",m);n=n+1;}if(n%10==0)printf("\n");}printf("\n");}2.2循環(huán)結(jié)構(gòu)2.2.5程序舉例例3求100~200之間的全部素?cái)?shù)。35演講完畢,謝謝觀看!演講完畢,謝謝觀看!36第二章程序的流程控制第二章程序的流程控制372.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符C的關(guān)系運(yùn)算符如下:

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

!= 不等于關(guān)系運(yùn)算符關(guān)鍵是真(true)和假(false)的概念。C中true可以是不為0的任何值,而false則為0。使用關(guān)系運(yùn)算符時(shí),若表達(dá)式為真(即true)則返回1,否則,表達(dá)式為假(即false),則返回0。例如:100>99返回110>(2+10)返回0

2.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符382.0算法的表示2.1算法的概念算法是對(duì)特定問(wèn)題求解步驟的一種描述,也是解決問(wèn)題的辦法,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。2.0算法的表示2.1算法的概念算法是對(duì)特39自然語(yǔ)言流程圖N-S圖偽代碼PAD圖2.2算法的表示2.0算法的表示自然語(yǔ)言2.2算法的表示2.0算法的表示40起止框處理框判斷框輸入輸出框流程線連接點(diǎn)注釋框2.2算法的表示---流程圖2.0算法的表示起止框處理框判斷框輸入輸出框流程線連接點(diǎn)注釋框2.2算法41程序的三種基本結(jié)構(gòu)1.順序結(jié)構(gòu)2.2算法的表示---流程圖AB流程圖2.0算法的表示程序的三種基本結(jié)構(gòu)1.順序結(jié)構(gòu)2.2算法的表示---流程圖42程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖2.選擇序結(jié)構(gòu)PAB真假2.0算法的表示程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖2.選擇序結(jié)43程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖3.循環(huán)序結(jié)構(gòu)1.當(dāng)型(while型)循環(huán)結(jié)構(gòu)2.直到型(until型)循環(huán)結(jié)構(gòu)PA假真AP真假2.0算法的表示程序的三種基本結(jié)構(gòu)2.2算法的表示---流程圖3.循環(huán)序結(jié)442.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符C的邏輯運(yùn)算符如下:

! 邏輯非

&& 邏輯與

|| 邏輯或例如:

!1&&0

先求!1和先求1&&0將會(huì)等于出不同的結(jié)果,那么何者優(yōu)先呢?這在C中是有規(guī)定的2.1選擇(分支)結(jié)構(gòu)2.1.1關(guān)系運(yùn)算符與邏輯運(yùn)算符45C的部分運(yùn)算符的優(yōu)先級(jí)如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━表達(dá)式 ┃優(yōu)先級(jí)───────────────────────────╂────()(小括號(hào))[](數(shù)組下標(biāo)).(結(jié)構(gòu)成員)->(指針型結(jié)構(gòu)成員) ┃最高

!(邏輯非)~(位取反)-(負(fù)號(hào))++(加1)--(減1)&(變量地址) ┃

*(指針?biāo)竷?nèi)容)sizeof(長(zhǎng)度計(jì)算) ┃

*(乘)/(除)%(取模) ┃

+(加)-(減) ┃

<<(位左移)>>(位右移) ┃

<(小于)<=(小于等于)>(大于)>=(大于等于) ┃

==(等于)!=(不等于) ┃

&(位與) ┃

^(位異或) ┃

|(位或) ┃

&&(邏輯與) ┃

||(邏輯或) ┃

?:(?表達(dá)式) ┃

=+=-=(聯(lián)合操作) ┃

,(逗號(hào)運(yùn)算符) ┃最低━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.1選擇(分支)結(jié)構(gòu)C的部分運(yùn)算符的優(yōu)先級(jí)如下:━━━━━━━━━━━━━━━462.1.2if()…else結(jié)構(gòu)C中條件語(yǔ)句的一般形式為: if(表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;上述結(jié)構(gòu)表示:如果表達(dá)式的值為非0(true)即真,則執(zhí)行語(yǔ)句1,執(zhí)行完語(yǔ)句1從語(yǔ)句2后開(kāi)始繼續(xù)向下執(zhí)行;如果表達(dá)式的值為0(false)即假,則跳過(guò)語(yǔ)句1而執(zhí)行語(yǔ)句2。所謂表達(dá)式是指關(guān)系表達(dá)式和邏輯表達(dá)式的結(jié)合式。注意:1.條件執(zhí)行語(yǔ)句中“else語(yǔ)句2;”部分是選擇項(xiàng),可以缺省,此時(shí)條件語(yǔ)句變成:if(表達(dá)式)語(yǔ)句1;表示若表達(dá)式的值為非0則執(zhí)行語(yǔ)句1,否則跳過(guò)語(yǔ)句1繼續(xù)執(zhí)行。2.如果語(yǔ)句1或語(yǔ)句2有多于一條語(yǔ)句要執(zhí)行時(shí),必須使用"{"和"}"把這些語(yǔ)句包括在其中,此時(shí)條件語(yǔ)句形式為:if(表達(dá)式){語(yǔ)句體1;}else{語(yǔ)句體2;}

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)472.1.2if()…else結(jié)構(gòu)注意: if(表達(dá)式) {語(yǔ)句體1;} else {語(yǔ)句體2;}3.條件語(yǔ)句可以嵌套,這種情況經(jīng)常碰到,但條件嵌套語(yǔ)句容易出錯(cuò),其原因主要是不知道哪個(gè)if對(duì)應(yīng)哪個(gè)else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("Bad");對(duì)于上述情況,C規(guī)定:else語(yǔ)句與最近的一個(gè)if語(yǔ)句匹配,上例中的else與if(y<=100&&y>x)相匹配。為了使else與if(x>20||x<-10)相匹配,必須用花括號(hào)。如下所示: if(x>20||x<-10) { if(y<=100&&y>x) printf("Good"); } else printf("Bad");

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)482.1.2if()…else結(jié)構(gòu)例2.1符號(hào)函數(shù)intmain(void){ floatx; inty=-1; printf(“inputx:”); scanf(“%f”,&x); if(x!=0) { if(x>0)y=1; } else printf(“\nx=%6.2f,y=%d\n”,x,y);}f(x)=1(x>0)0(x=0)-1(x<0)2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)f(x)=1(x>0492.1.3條件運(yùn)算符與條件表達(dá)式條件表達(dá)式:e1?e2:e3例如: a=((x>0)?(x++):(x--))相當(dāng)于 if(x>0) a=x++; else a=x--;2.1選擇(分支)結(jié)構(gòu)2.1.3條件運(yùn)算符與條件表達(dá)式2.1選擇(分支)結(jié)構(gòu)502.1.2if()…else結(jié)構(gòu)例2.2數(shù)據(jù)分段處理,0-49為A段,50-119為B段,120-169為C段intmain(void){ inty; charresult; printf(“inputy:”); scanf(“%d”,&y); if(y>=0&&y<50) result=‘A’; elseif(y>=50&&y<120) result=‘B’; elseif(y>=120&&y<170) result=‘C’; else result=‘D’; printf(“\nresult=%c”,y);}

2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)512.1.3switch結(jié)構(gòu)在編寫(xiě)程序時(shí),經(jīng)常會(huì)碰到按不同情況分轉(zhuǎn)的多路問(wèn)題,這時(shí)可用嵌套if-else-fi語(yǔ)句來(lái)實(shí)現(xiàn),但if-else-if語(yǔ)句使用不方便,并且容易出錯(cuò)。對(duì)這種情況,C提供了一個(gè)開(kāi)關(guān)語(yǔ)句。開(kāi)關(guān)語(yǔ)句格式為:switch(變量){

case常量1: 語(yǔ)句1或空;

case常量2: 語(yǔ)句2或空; ...

case常量n; 語(yǔ)句n或空;

default: 語(yǔ)句n+1或空;}

2.1選擇(分支)結(jié)構(gòu)

執(zhí)行switch開(kāi)關(guān)語(yǔ)句時(shí),將變量逐個(gè)與case后的常量進(jìn)行比較,若與其中一個(gè)相等,則執(zhí)行該常量下的語(yǔ)句,若不與任何一個(gè)常量相等,則執(zhí)行default后面的語(yǔ)句。注意: 1.

switch中變量可以是數(shù)值,也可以是字符。2.可以省略一些case和default。3.每個(gè)case或default后的語(yǔ)句可以是語(yǔ)句體,但不需要使用"{"和"}"括起來(lái)。

2.1.3switch結(jié)構(gòu)2.1選擇(分支)結(jié)構(gòu)522.1.3switch結(jié)構(gòu)下例的switch中變量為整數(shù)型。例2.3intmain(void){ inttest; for(test=0;test<=10;test++) { switch(test) /*變量為整型數(shù)的開(kāi)關(guān)語(yǔ)句*/ { case1: printf("%d\n",test); break;/*退出開(kāi)關(guān)語(yǔ)句*/ case2: printf("%d\n",test); break; case3: printf("%d\n",test); break; default: puts("Error");break; } }}

switch中變量也可為字符2.1選擇(分支)結(jié)構(gòu)2.1.3switch結(jié)構(gòu)switch中變量也可為字符2.532.2循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式為:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{循環(huán)體}它的執(zhí)行過(guò)程如下:(1)先求解表達(dá)式1;(2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第(3)步,若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達(dá)式為真,在執(zhí)行指定的語(yǔ)句后,求解表達(dá)式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。

2.2.1for結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式為:2.2.1for54求解表達(dá)式1語(yǔ)句for語(yǔ)句的下一語(yǔ)句求解表達(dá)式3求解表達(dá)式2FT2.2.1for結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)求解表達(dá)式1語(yǔ)句for語(yǔ)句的求解表達(dá)式3求解表達(dá)式2FT2.552.2.1for結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?for(i=1;i<=100;i++)sum=sum+i;相當(dāng)于以下的while語(yǔ)句:i=1;while(i<=100){ sum=sum+i; i++;}for語(yǔ)句的一般形式用while語(yǔ)句來(lái)表示為:表達(dá)式1while(表達(dá)式2){ 語(yǔ)句 表達(dá)式3;}

2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?562.2.1for結(jié)構(gòu)for語(yǔ)句中表達(dá)式1可以省略,其后的分號(hào)不能省略介,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。如:for(;i<=100;i++)sum=sum+i;執(zhí)行時(shí),跳過(guò)“求解表達(dá)式1”這一步,其它不變。2.如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。如:for(i=1;;i++)sum=sum+i;2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)for語(yǔ)句中表達(dá)式1可以省略,其后的572.2.1for結(jié)構(gòu)3.表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。如:for(sum=0,i=1;i<=100;){sum=sum十i;i++;}本例把i++的操作不放在for語(yǔ)句的表達(dá)式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。4.可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。如:for(;i<=100;){sum=sum+i;i++;}相當(dāng)于:5.三個(gè)表達(dá)式都可省略,如for(;;)語(yǔ)句

2.2循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)3.表達(dá)式3也可以省略,但此時(shí)程序設(shè)582.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式如下:

whi1e(表達(dá)式E)

{循環(huán)體}

;執(zhí)行過(guò)程:①計(jì)算表達(dá)式E的值②若E為非0,則執(zhí)行語(yǔ)句s,然后轉(zhuǎn)①若E為0,則退出循環(huán),執(zhí)行該循環(huán)后的語(yǔ)句ES0非0特點(diǎn):先判斷表達(dá)式,后執(zhí)行語(yǔ)句,因此,若進(jìn)入while循環(huán)時(shí)E的值就是0,則語(yǔ)句S一次也不執(zhí)行2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while592.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?intmain(void){inti,sum=0;i=1;while(i<=100){sum+=i;i++;}printf(“sum=%d”,sum);}2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)例如:計(jì)算602.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)do-while語(yǔ)句用來(lái)實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu)。其一般形式為:do{循環(huán)體}while(表達(dá)式E);執(zhí)行過(guò)程:①執(zhí)行循環(huán)體S②計(jì)算E值若E的值為真(非0),則轉(zhuǎn)①若E的值為假(0),則結(jié)束循環(huán)ES0非0特點(diǎn):先執(zhí)行循環(huán)體,再判斷表達(dá)式,因此循環(huán)體至少執(zhí)行一次。2.2循環(huán)結(jié)構(gòu)2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)do-wh61例如:計(jì)算1+2+3+…+100=?main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf(“sum=%d”,sum);}2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)while循環(huán)和do~while循環(huán)的區(qū)別在于:a.它們執(zhí)行循環(huán)體與計(jì)算表達(dá)式的先后順序不同,do~while先執(zhí)行循環(huán)體,再計(jì)算表達(dá)式;while循環(huán)為先計(jì)算表達(dá)式,表達(dá)式的結(jié)果為非零值,則執(zhí)行循環(huán)體語(yǔ)句。b.do~while至少要執(zhí)行一次循環(huán)體。while執(zhí)行循環(huán)體的次數(shù)可能為零次或若干次。2.2循環(huán)結(jié)構(gòu)例如:計(jì)算1+2+3+…+100=?2.2.2while62猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)桃子。

main()

{

intday,x1,x2;/*x1是今天,x2是昨天*/

day=9;

x2=1;

while(day>0)

{ x1=(x2+1)*2;/*第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍*/

x2=x1;

day--;

}

printf("thetotalis%d\n",x1);

}

2.2.2while結(jié)構(gòu)和do…while結(jié)構(gòu)2.2循環(huán)結(jié)構(gòu)猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了63本節(jié)課新內(nèi)容到此結(jié)束后面的內(nèi)容為下一節(jié)本節(jié)課新內(nèi)容到此結(jié)束后面的內(nèi)容為下一節(jié)642.2.3循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套.三種循環(huán)(whi1e循環(huán)、do-whi1e循環(huán)和for循環(huán))可以互相嵌套。例如,下面幾種都是合法的形式:(1)while()(3)for(;;){{…for(;;)while(){...}{...}}}(2)do(4)while(){...{...dodo{…}while();{...}}while();while();}2.2循環(huán)結(jié)構(gòu)2.2.3循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完652.2.4break語(yǔ)句和continue語(yǔ)句1break語(yǔ)句break語(yǔ)句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語(yǔ)句下面的一個(gè)語(yǔ)句。break語(yǔ)句還可以用來(lái)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論