c語言 第二章 程序的流程控制_第1頁
c語言 第二章 程序的流程控制_第2頁
c語言 第二章 程序的流程控制_第3頁
c語言 第二章 程序的流程控制_第4頁
c語言 第二章 程序的流程控制_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

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

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

! 邏輯非

&& 邏輯與

|| 邏輯或例如:

!1&&0

先求!1和先求1&&0將會等于出不同的結(jié)果,那么何者優(yōu)先呢?這在C中是有規(guī)定的C的部分運算符的優(yōu)先級如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━表達式 ┃優(yōu)先級───────────────────────────╂────()(小括號)[](數(shù)組下標).(結(jié)構(gòu)成員)->(指針型結(jié)構(gòu)成員) ┃最高

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

*(指針所指內(nèi)容)sizeof(長度計算) ┃

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

+(加)-(減) ┃

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

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

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

&(位與) ┃

^(位異或) ┃

|(位或) ┃

&&(邏輯與) ┃

||(邏輯或) ┃

?:(?表達式) ┃

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

,(逗號運算符) ┃最低━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.1選擇(分支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)構(gòu)C中條件語語句的一般般形式為為:if(表達達式)語句1;else語句2;上述結(jié)構(gòu)表表示:如如果表達式式的值為非非0(true)即真,則則執(zhí)行語語句1,執(zhí)執(zhí)行完語語句1從語語句2后開開始繼續(xù)向向下執(zhí)行;如果表表達式的值值為0(false)即假,則則跳過語語句1而而執(zhí)行語句句2。所謂表達式式是指關(guān)系系表達式和和邏輯表達達式的結(jié)合合式。注意:1.條件執(zhí)行語語句中“else語語句2;”部分是是選擇項,可以缺缺省,此此時條件語語句變成成:if(表達式式)語句句1;表表示若表達達式的值為為非0則執(zhí)執(zhí)行語句1,否否則跳過語語句1繼續(xù)續(xù)執(zhí)行。2.如果語句1或語句2有多于一一條語句要要執(zhí)行時,必須使使用"{"和"}"把這些些語句包包括在其中中,此時時條件語句句形式為:if(表達達式){語句體體1;}else{語語句體2;}2.1選選擇(分支支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)構(gòu)注意:if(表達達式){語句體體1;}else{語句體體2;}3.條件語句可可以嵌套,這種情情況經(jīng)常碰碰到,但但條件嵌套套語句容易易出錯,其其原因主主要是不知知道哪個if對應哪哪個else。例如:if(x>20||x<-10)if(y<=100&&y>x)printf("Good");elseprintf("Bad");對于上述情情況,C規(guī)定:else語句與最最近的一個個if語句句匹配,上上例中中的else與if(y<=100&&y>x)相匹配。。為了使else與與if(x>20||x<-10)相匹匹配,必必須用花花括號。如如下所示:if(x>20||x<-10){if(y<=100&&y>x)printf("Good");}elseprintf("Bad");2.1選選擇(分支支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)構(gòu)例2.1符符號函數(shù)數(shù)intmain(void){floatx;inty=-1;printf(“inputx:””);scanf(“%f”,&x);if(x!=0){if(x>0)y=1;}elseprintf(“\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.3條件運運算符與條條件表達式式條件表達式式:e1?e2:e3例如:a=((x>0)?(x++):(x--))相當于if(x>0)a=x++;elsea=x--;2.1選選擇(分支支)結(jié)構(gòu)2.1.2if()…else結(jié)構(gòu)構(gòu)例2.2數(shù)數(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’;elseresult=‘‘D’;printf(“\nresult=%c”,y);}2.1選選擇(分支支)結(jié)構(gòu)2.1.3switch結(jié)結(jié)構(gòu)在編寫程序序時,經(jīng)經(jīng)常會碰到到按不同情情況分轉(zhuǎn)的的多路問題題,這時時可用嵌套套if-else-fi語語句來實現(xiàn)現(xiàn),但if-else-if語句使使用不方便便,并且且容易出錯錯。對這種種情況,C提供供了一個開開關(guān)語句。。開關(guān)語句格格式為:switch(變量){case常量1:語句1或空空;case常量2:語句2或空空;...case常量n;語句n或空空;default:語句n+1或空;}2.1選選擇(分支支)結(jié)構(gòu)執(zhí)行switch開開關(guān)語句時時,將變變量逐個與與case后的常量量進行比較較,若與與其中一個個相等,則執(zhí)行行該常量下下的語句,若不與與任何一個個常量相等等,則執(zhí)執(zhí)行default后面面的語句。。注意:1.switch中變量可以以是數(shù)值,也可以以是字符。。2.可以省略一一些case和default。3.每個case或default后的語句可可以是語句句體,但但不需要使使用"{"和"}"括起來來。2.1.3switch結(jié)結(jié)構(gòu)下例的switch中變量為整整數(shù)型。例2.3intmain(void){inttest;for(test=0;test<=10;test++){switch(test)/*變變量為整型型數(shù)的開關(guān)關(guān)語句*/{case1:printf("%d\n",test);break;/*退出開關(guān)關(guān)語句*/case2:printf("%d\n",test);break;case3:printf("%d\n",test);break;default:puts("Error");break;}}}switch中變量量也可為字字符2.1選選擇(分支支)結(jié)構(gòu)2.2循循環(huán)結(jié)構(gòu)for語句句的一般形形式為:for(表表達式1;;表達式2;表達式式3){循環(huán)體}它的執(zhí)行過過程如下::(1)先先求解表達達式1;(2)求求解表達式式2,若其其值為真((非0),,則執(zhí)行for語句句中指定的的內(nèi)嵌語句句,然后執(zhí)執(zhí)行下面第第(3)步步,若為假假(0),,則結(jié)束循循環(huán),轉(zhuǎn)到到第(5))步。(3)若表表達式為真真,在執(zhí)行行指定的語語句后,求求解表達式式3。((4))轉(zhuǎn)回上面面第(2))步驟繼續(xù)續(xù)執(zhí)行。(5)執(zhí)行行for語語句下面的的一個語句句。2.2.1for結(jié)構(gòu)求解表達式1語句for語句的下一語句求解表達式3求解表達式2FT2.2.1for結(jié)構(gòu)2.2循循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)例如:計算算1+2++3+…++100==?for(i=1;i<=100;i++)sum=sum+i;相當于以下下的while語句句:i=1;while(i<=100){sum=sum+i;i++;}for語句句的一般形形式用while語語句來表示示為:表達式1while(表達式式2){語句表達式3;}2.2循循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)for語句句中表達式式1可以省省略,其后后的分號不不能省略介介,此時應應在for語句之前前給循環(huán)變變量賦初值值。如:for(;i<=100;i++)sum=sum+i;執(zhí)行時,跳跳過“求解解表達式1”這一步步,其它不不變。2.如果表表達式2省省略,即不不判斷循環(huán)環(huán)條件,循循環(huán)無終止止地進行下下去。也就就是認為表表達式2始始終為真。。如:for(i=1;;i++)sum=sum+i;2.2循循環(huán)結(jié)構(gòu)2.2.1for結(jié)構(gòu)3.表達式式3也可以以省略,但但此時程序序設(shè)計者應應另外設(shè)法法保證循環(huán)環(huán)能正常結(jié)結(jié)束。如:for(sum=0,,i=1;;i<==100;;){sum==sum十十i;i++;}本例把i++的操作作不放在for語句句的表達式式3的位置置處,而作作為循環(huán)體體的一部分分,效果是是一樣的,,都能使循循環(huán)正常結(jié)結(jié)束。4.可以省省略表達式式1和表達達式3,只只有表達式式2,即只只給循環(huán)條條件。如:for(;i<=100;){sum==sum+i;i++;}相當于:5.三個表表達式都可可省略,如如for((;;))語句2.2循循環(huán)結(jié)構(gòu)2.2.2while結(jié)結(jié)構(gòu)和do…while結(jié)構(gòu)構(gòu)while語句用來來實現(xiàn)“當當型”循環(huán)環(huán)結(jié)構(gòu)。其其一般形式式如下:whi1e(表表達式E){循環(huán)體};執(zhí)行過程:①計算算表達式E的值②若E為非0,則執(zhí)行行語句s,然后轉(zhuǎn)轉(zhuǎn)①若E為0,則退出出循環(huán),執(zhí)執(zhí)行該循循環(huán)后的語語句ES0非0特點:先判斷表達達式,后執(zhí)執(zhí)行語句,因此,若進入入while循環(huán)時時E的值就就是0,則則語句S一一次也不執(zhí)執(zhí)行2.2循循環(huán)結(jié)構(gòu)2.2.2while結(jié)結(jié)構(gòu)和do…while結(jié)構(gòu)構(gòu)例如:計算算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é)結(jié)構(gòu)和do…while結(jié)構(gòu)構(gòu)do-while語語句用來實實現(xiàn)“直到到型”循環(huán)環(huán)結(jié)構(gòu)。其其一般形式式為:do{循環(huán)體}while(表達達式E);執(zhí)行過程:①執(zhí)行行循環(huán)體S②計算算E值若E的值為為真(非0),則則轉(zhuǎn)①若E的值為為假(0),則結(jié)結(jié)束循環(huán)ES0非0特點:先先執(zhí)行循環(huán)環(huán)體,再判判斷表達式式,因此循循環(huán)體至少少執(zhí)行一次次。2.2循循環(huán)結(jié)構(gòu)例如:計算算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é)結(jié)構(gòu)和do…while結(jié)構(gòu)構(gòu)while循循環(huán)環(huán)和和do~while循循環(huán)環(huán)的的區(qū)區(qū)別別在在于于::a.它它們們執(zhí)執(zhí)行行循循環(huán)環(huán)體體與與計計算算表表達達式式的的先先后后順順序序不不同同,,do~while先先執(zhí)執(zhí)行行循循環(huán)環(huán)體體,,再再計計算算表表達達式式;;while循循環(huán)環(huán)為為先先計計算算表表達達式式,,表表達達式式的的結(jié)結(jié)果果為為非非零零值值,,則則執(zhí)執(zhí)行行循循環(huán)環(huán)體體語語句句。。b.do~while至至少少要要執(zhí)執(zhí)行行一一次次循循環(huán)環(huán)體體。。while執(zhí)執(zhí)行行循循環(huán)環(huán)體體的的次次數(shù)數(shù)可可能能為為零零次次或或若若干干次次。。2.2循循環(huán)環(huán)結(jié)結(jié)構(gòu)構(gòu)猴子子吃吃桃桃問問題題::猴子子第第一一天天摘摘下下若若干干個個桃桃子子,,當當即即吃吃了了一一半半,,還還不不癮癮,,又又多多吃吃了了一一個個。。第第二二天天早早上上又又將將剩剩下下的的桃桃子子吃吃掉掉一一半半,,又又多多吃吃了了一一個個。。以以后后每每天天早早上上都都吃吃了了前前一一天天剩剩下下的的一一半半零零一一個個。。到到第第10天天早早上上想想再再吃吃時時,,見見只只剩剩下下一一個個桃桃子子了了。。求求第第一一天天共共摘摘了了多多少少個個桃桃子子。。main(){intday,x1,x2;/*x1是是今今天天,,x2是是昨昨天天*/day=9;x2=1;while(day>0){x1=(x2+1)*2;/*第第一天天的桃桃子數(shù)數(shù)是第第2天天桃子子數(shù)加加1后后的2倍*/x2=x1;day--;}printf("thetotalis%d\n",x1);}2.2.2while結(jié)結(jié)構(gòu)和和do…while結(jié)構(gòu)構(gòu)2.2循循環(huán)結(jié)結(jié)構(gòu)本節(jié)課課新內(nèi)內(nèi)容到到此結(jié)結(jié)束后面的的內(nèi)容容為下下一節(jié)節(jié)2.2.3循循環(huán)環(huán)嵌套套一個循循環(huán)體體內(nèi)又又包含含另一一個完完整的的循環(huán)環(huán)結(jié)構(gòu)構(gòu),稱稱為循環(huán)的的嵌套套。內(nèi)嵌嵌的循循環(huán)中中還可可以嵌嵌套.三三種種循環(huán)環(huán)(whi1e循環(huán)環(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é)結(jié)構(gòu)2.2.4break語句句和continue語語句1break語句break語句句可以以使流流程跳跳出switch結(jié)結(jié)構(gòu),,繼續(xù)續(xù)執(zhí)行行switch語句句下面面的一一個語語句。。break語語句還還可以以用來來從循循環(huán)體體內(nèi)跳跳出循循環(huán)體體,即即提前前結(jié)束束循環(huán)環(huán),接接著執(zhí)執(zhí)行循循環(huán)下下面的的語句句。如如for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break;printf((”area=%f””,area));}break語句句的一一般形形式::break;注意::break語句句只能能用于于循環(huán)環(huán)語句句和switch語語句。。2.2循循環(huán)結(jié)結(jié)構(gòu)2.2.4break語句句和continue語語句2continue語句一般形形式為為continue;其作用用為結(jié)結(jié)束本本次循循環(huán),,即跳跳過循循環(huán)體體中下下面尚尚未執(zhí)執(zhí)行的的語句句,接接著進進行下下一次次是否否執(zhí)行行循環(huán)環(huán)的判判定。。continue語語句和和break語語句的的區(qū)別別是::continue語句句只結(jié)結(jié)束本次循環(huán),,而不不是終終止整整個循循環(huán)的的執(zhí)行行,而而break語語句則則是結(jié)結(jié)束本層循環(huán),,不再再進行行條件件判斷斷。如如果有有以下下兩個個循環(huán)環(huán)結(jié)構(gòu)構(gòu):(1))while((表表達式式1))((2)while((表達達式1){…{…if(表達達式2)break;if(表表達式式2))continue;………}}2.2循循環(huán)結(jié)結(jié)構(gòu)例6.6把把100-200之之間的的不能能被3整除除的數(shù)數(shù)輸出出。main(){

溫馨提示

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

最新文檔

評論

0/150

提交評論