版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
c語言第二章程序的流程控制2.1選擇(分支)結構2.1.1關系運算符與邏輯運算符C的關系運算符如下:
> 大于
>= 大于等于
< 小于
<= 小于等于
== 等于
!= 不等于關系運算符關鍵是真(true)和假(false)的概念。C中true可以是不為0的任何值,而false則為0。使用關系運算符時,若表達式為真(即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算法的表示程序的三種基本結構1.順序結構2.2算法的表示---流程圖AB流程圖2.0算法的表示程序的三種基本結構2.2算法的表示---流程圖2.選擇序結構PAB真假2.0算法的表示程序的三種基本結構2.2算法的表示---流程圖3.循環(huán)序結構1.當型(while型)循環(huán)結構2.直到型(until型)循環(huán)結構PA假真AP真假2.0算法的表示2.1選擇(分支)結構2.1.1關系運算符與邏輯運算符C的邏輯運算符如下:
! 邏輯非
&& 邏輯與 || 邏輯或例如:
!1&&0
先求!1和先求1&&0將會等于出不同的結果,那么何者優(yōu)先呢?這在C中是有規(guī)定的C的部分運算符的優(yōu)先級如下:━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━表達式 ┃優(yōu)先級───────────────────────────╂────()(小括號)[](數(shù)組下標).(結構成員)->(指針型結構成員) ┃最高
!(邏輯非)~(位取反)-(負號)++(加1)--(減1)&(變量地址) ┃
*(指針所指內(nèi)容)sizeof(長度計算) ┃
*(乘)/(除)%(取模) ┃
+(加)-(減) ┃
<<(位左移)>>(位右移) ┃
<(小于)<=(小于等于)>(大于)>=(大于等于) ┃
==(等于)!=(不等于) ┃
&(位與) ┃
^(位異或) ┃
|(位或) ┃
&&(邏輯與) ┃
||(邏輯或) ┃
?:(?表達式) ┃
=+=-=(聯(lián)合操作) ┃
,(逗號運算符) ┃最低━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2.1選擇(分支)結構2.1.2if()…else結構C中條件語句的一般形式為: if(表達式) 語句1; else 語句2;上述結構表示:如果表達式的值為非0(true)即真,則執(zhí)行語句1,執(zhí)行完語句1從語句2后開始繼續(xù)向下執(zhí)行;如果表達式的值為0(false)即假,則跳過語句1而執(zhí)行語句2。所謂表達式是指關系表達式和邏輯表達式的結合式。注意:1.條件執(zhí)行語句中“else語句2;”部分是選擇項,可以缺省,此時條件語句變成:if(表達式)語句1;表示若表達式的值為非0則執(zhí)行語句1,否則跳過語句1繼續(xù)執(zhí)行。2.如果語句1或語句2有多于一條語句要執(zhí)行時,必須使用"{"和"}"把這些語句包括在其中,此時條件語句形式為:if(表達式){語句體1;}else{語句體2;}
2.1選擇(分支)結構2.1.2if()…else結構注意: if(表達式) {語句體1;} else {語句體2;}3.條件語句可以嵌套,這種情況經(jīng)常碰到,但條件嵌套語句容易出錯,其原因主要是不知道哪個if對應哪個else。例如: if(x>20||x<-10) if(y<=100&&y>x) printf("Good"); else printf("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"); } else printf("Bad");
2.1選擇(分支)結構2.1.2if()…else結構例2.1符號函數(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選擇(分支)結構2.1.3條件運算符與條件表達式條件表達式:e1?e2:e3例如: a=((x>0)?(x++):(x--))相當于 if(x>0) a=x++; else a=x--;2.1選擇(分支)結構2.1.2if()…else結構例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選擇(分支)結構2.1.3switch結構在編寫程序時,經(jīng)常會碰到按不同情況分轉的多路問題,這時可用嵌套if-else-fi語句來實現(xiàn),但if-else-if語句使用不方便,并且容易出錯。對這種情況,C提供了一個開關語句。開關語句格式為:switch(變量){ case常量1: 語句1或空; case常量2: 語句2或空; ... case常量n; 語句n或空; default: 語句n+1或空;}
2.1選擇(分支)結構
執(zhí)行switch開關語句時,將變量逐個與case后的常量進行比較,若與其中一個相等,則執(zhí)行該常量下的語句,若不與任何一個常量相等,則執(zhí)行default后面的語句。注意: 1.switch中變量可以是數(shù)值,也可以是字符。2.可以省略一些case和default。3.每個case或default后的語句可以是語句體,但不需要使用"{"和"}"括起來。
2.1.3switch結構下例的switch中變量為整數(shù)型。例2.3intmain(void){ inttest; for(test=0;test<=10;test++) { switch(test) /*變量為整型數(shù)的開關語句*/ { case1: printf("%d\n",test); break;/*退出開關語句*/ case2: printf("%d\n",test); break; case3: printf("%d\n",test); break; default: puts("Error");break; } }}
switch中變量也可為字符2.1選擇(分支)結構2.2循環(huán)結構for語句的一般形式為:for(表達式1;表達式2;表達式3) {循環(huán)體}它的執(zhí)行過程如下:(1)先求解表達式1;(2)求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步,若為假(0),則結束循環(huán),轉到第(5)步。(3)若表達式為真,在執(zhí)行指定的語句后,求解表達式3。(4)轉回上面第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行for語句下面的一個語句。
2.2.1for結構求解表達式1語句for語句的下一語句求解表達式3求解表達式2FT2.2.1for結構2.2循環(huán)結構2.2.1for結構例如:計算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)結構2.2.1for結構for語句中表達式1可以省略,其后的分號不能省略介,此時應在for語句之前給循環(huán)變量賦初值。如:
for(;i<=100;i++)sum=sum+i;執(zhí)行時,跳過“求解表達式1”這一步,其它不變。
2.如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式2始終為真。如:
for(i=1;;i++)sum=sum+i;2.2循環(huán)結構2.2.1for結構3.表達式3也可以省略,但此時程序設計者應另外設法保證循環(huán)能正常結束。如:for(sum=0,i=1;i<=100;){sum=sum十i;i++;}本例把i++的操作不放在for語句的表達式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結束。4.可以省略表達式1和表達式3,只有表達式2,即只給循環(huán)條件。如:for(;i<=100;){sum=sum+i;i++;}相當于:5.三個表達式都可省略,如for(;;)語句
2.2循環(huán)結構2.2.2while結構和do…while結構while語句用來實現(xiàn)“當型”循環(huán)結構。其一般形式如下:
whi1e(表達式E) {循環(huán)體}
;執(zhí)行過程:①計算表達式E的值②若E為非0,則執(zhí)行語句s,然后轉①若E為0,則退出循環(huán),執(zhí)行該循環(huán)后的語句ES0非0特點:先判斷表達式,后執(zhí)行語句,因此,若進入while循環(huán)時E的值就是0,則語句S一次也不執(zhí)行2.2循環(huán)結構2.2.2while結構和do…while結構例如:計算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)結構2.2.2while結構和do…while結構do-while語句用來實現(xiàn)“直到型”循環(huán)結構。其一般形式為:do{循環(huán)體}while(表達式E);執(zhí)行過程:①執(zhí)行循環(huán)體S②計算E值若E的值為真(非0),則轉①若E的值為假(0),則結束循環(huán)ES0非0特點:先執(zhí)行循環(huán)體,再判斷表達式,因此循環(huán)體至少執(zhí)行一次。2.2循環(huán)結構例如:計算1+2+3+…+100=?main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf(“sum=%d”,sum);}2.2.2while結構和do…while結構while循環(huán)和do~while循環(huán)的區(qū)別在于:a.它們執(zhí)行循環(huán)體與計算表達式的先后順序不同,do~while先執(zhí)行循環(huán)體,再計算表達式;while循環(huán)為先計算表達式,表達式的結果為非零值,則執(zhí)行循環(huán)體語句。b.do~while至少要執(zhí)行一次循環(huán)體。while執(zhí)行循環(huán)體的次數(shù)可能為零次或若干次。2.2循環(huán)結構猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少個桃子。
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結構和do…while結構2.2循環(huán)結構本節(jié)課新內(nèi)容到此結束后面的內(nèi)容為下一節(jié)2.2.3循環(huán)嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構,稱為循環(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)結構2.2.4break語句和continue語句1break語句break語句可以使流程跳出switch結構,繼續(xù)執(zhí)行switch語句下面的一個語句。break語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結束循環(huán),接著執(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)語句和switch語句。2.2循環(huán)結構2.2.4break語句和continue語句2continue語句一般形式為continue;其作用為結束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。
continue語句和break語句的區(qū)別是:continue語句只結束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行,而break語句則是結束本層循環(huán),不再進行條件判斷。如果有以下兩個循環(huán)結構:(1)while(表達式1)(2)while(表達式1){…{…if(表達式2)break;if(表達式2)continue;……}}2.2循環(huán)結構例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語句和continue語句2.2循環(huán)結構2.2.5程序舉例例1用π/4=1-1/3+1/5-1/7+…求π的近似值,直到某一項的絕對值小于10-6為止。#inc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能家居門窗維修保養(yǎng)服務合同范本3篇
- 二零二五年度農(nóng)民工勞務分包合同糾紛處理規(guī)則
- 2025年牛棚承包及綠色環(huán)保養(yǎng)殖技術合作合同
- 2025年度水利工程檢測與評估承包合同
- 二零二五年度新能源儲能技術合同能源變革3篇
- 2025年度綠色餐飲聯(lián)營合作合同協(xié)議范本3篇
- 二零二五版農(nóng)田灌溉水資源綜合利用合同4篇
- 2025版內(nèi)衣品牌跨界合作開發(fā)新產(chǎn)品合同3篇
- 二零二五年度住宅小區(qū)綠化托管與物業(yè)管理合同3篇
- 二零二五年度智能交通行業(yè)員工離職解除合同標準模板
- 中華人民共和國保守國家秘密法實施條例培訓課件
- 管道坡口技術培訓
- 2024年全國統(tǒng)一高考英語試卷(新課標Ⅰ卷)含答案
- 2024年認證行業(yè)法律法規(guī)及認證基礎知識 CCAA年度確認 試題與答案
- 皮膚儲存新技術及臨床應用
- 外研版七年級英語上冊《閱讀理解》專項練習題(含答案)
- 2024年遼寧石化職業(yè)技術學院單招職業(yè)適應性測試題庫必考題
- 上海市復旦大學附中2024屆高考沖刺模擬數(shù)學試題含解析
- 幼兒園公開課:大班健康《國王生病了》課件
- 小學六年級說明文閱讀題與答案大全
- 人教pep小學六年級上冊英語閱讀理解練習題大全含答案
評論
0/150
提交評論