版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章
選擇結(jié)構(gòu)程序設(shè)計(jì)教學(xué)目標(biāo):掌握if語句的用法掌握switch語句的用法學(xué)會(huì)使用選擇結(jié)構(gòu)程序設(shè)計(jì)教學(xué)重點(diǎn)與難點(diǎn):學(xué)會(huì)使用選擇結(jié)構(gòu)程序設(shè)計(jì)第四章選擇結(jié)構(gòu)程序設(shè)計(jì)3第四章選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),是一種常見的程序控制結(jié)構(gòu)。在日常生活中,如果天氣晴朗,我們就去郊游;或者如果考試不及格,那么要參加補(bǔ)考。即根據(jù)條件進(jìn)行判斷,然后依據(jù)判斷的結(jié)果進(jìn)行相應(yīng)的情況處理。在C語言中,選擇結(jié)構(gòu)分為兩類:(1)if選擇結(jié)構(gòu):根據(jù)條件進(jìn)行判斷,選擇執(zhí)行不同的分支語句。(2)switch選擇結(jié)構(gòu):計(jì)算表達(dá)式的值,然后進(jìn)行判斷,選擇執(zhí)行多分支其中一個(gè)分支。44.1if語句4.1.1結(jié)構(gòu)化算法if語句分為三種形式,單分支、雙分支和多分支結(jié)構(gòu)。1.單分支選擇結(jié)構(gòu)單分支結(jié)構(gòu)是最簡單的選擇結(jié)構(gòu),其語法的一般格式為:if(表達(dá)式)語句;或者if(表達(dá)式){
語句塊;}執(zhí)行過程:if后面括號(hào)中的表達(dá)式是要判斷的條件,如果表達(dá)式的值為真,則執(zhí)行后面的語句或語句塊;如果表達(dá)式的值為假,則不會(huì)執(zhí)行后面的語句或語句塊。執(zhí)行流程如圖4.1所示。54.1.1if語句的三種形式圖4.1單分支選擇結(jié)構(gòu)【例4.1】從鍵盤上輸入兩個(gè)整數(shù),比較它們的大小,并按照從小到大的順序輸出。
分析:將存放在兩個(gè)變量x和y中的數(shù)進(jìn)行交換,必須借助于第三個(gè)變量才能實(shí)現(xiàn)。64.1.1if語句的三種形式關(guān)鍵代碼如下:If(x<y){t=x;x=y;y=t;}程序如下:#include<stdio.h>main(){intint1,int2,t;printf("請(qǐng)輸入兩個(gè)整數(shù):\n");scanf("%d,%d",&int1,&int2);if(int1>int2){
t=int1;int1=int2;/*兩個(gè)數(shù)交換需借助第三個(gè)變量t*/int2=t;}printf("%d,%d\n",int1,int2);}74.1.1if語句的三種形式程序運(yùn)行結(jié)果:請(qǐng)輸入兩個(gè)整數(shù):99,78↙78,9984.1.1if語句的三種形式【例4.2】從鍵盤上輸入三個(gè)數(shù),并按照從小到大的順序輸出。分析:一共比較三次第一次比較:如果a>b,將a和b交換。第二次比較:如果a>c,將a和c交換,兩次比較后a為最小數(shù)。第三次比較:如果b>c,將b和c交換,得到較小數(shù)和最大數(shù)。程序如下:#include<stdio.h>main(){floata,b,c,t;printf("請(qǐng)輸入三個(gè)數(shù):\n");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;/*a和b比較后交換*/b=t;9}if(a>c){t=a;a=c;/*a和c比較后交換*/c=t;}if(b>c){t=b;b=c;/*b和c比較后交換*/c=t;}printf("排序后結(jié)果為:%5.2f,%5.2f,%5.2f\n",a,b,c);}4.1.1if語句的三種形式程序運(yùn)行結(jié)果:請(qǐng)輸入三個(gè)數(shù):123.67,98.75,76.34↙排序后結(jié)果為:76.34,98.75,123.67思考:如果將例題中改為按照從大到小的順序輸出,程序如何變動(dòng)?104.1.1if語句的三種形式2.雙分支選擇結(jié)構(gòu)雙分支結(jié)構(gòu)語法的一般格式為:if(表達(dá)式){語句塊1;}else{語句塊2;}執(zhí)行過程:if后面括號(hào)中的表達(dá)式是要判斷的條件,如果表達(dá)式的值為真,則執(zhí)行語句塊1;如果表達(dá)式的值為假,則執(zhí)行語句塊2,執(zhí)行流程如圖4.2所示。圖4.2雙分支選擇結(jié)構(gòu)114.1.1if語句的三種形式3.多分支選擇結(jié)構(gòu)多分支結(jié)構(gòu)用于多種條件判斷,其語法的一般格式為:if(表達(dá)式1){語句塊1;}elseif(表達(dá)式2){語句塊2;}elseif(表達(dá)式3){語句塊3;}
……elseif(表達(dá)式n){語句塊n;}else{語句塊n+1;}124.1.1if語句的三種形式執(zhí)行過程:if后面括號(hào)中的表達(dá)式是要判斷的條件,首先計(jì)算表達(dá)式1的值,如果為真,則執(zhí)行語句塊1;否則(表達(dá)式1的值為假)計(jì)算表達(dá)式2的值,如果為真,則執(zhí)行語句塊2;否則(表達(dá)式2的值為假)計(jì)算表達(dá)式3的值,如果為真,則執(zhí)行語句塊3;以此類推……;如果表達(dá)式1、表達(dá)式2……表達(dá)式n的值都為假,則執(zhí)行語句塊n+1。執(zhí)行流程如圖4.3所示。134.1.1if語句的三種形式圖4.3多分支選擇結(jié)構(gòu)144.1.1if語句的三種形式【例4.4】從鍵盤上輸入學(xué)生期末考試成績,若成績?yōu)?0~100分輸出“優(yōu)秀”,80~89分輸出“良好”,70~79分輸出“中等”,60~69分輸出“及格”,0~59分輸出“不及格”。程序如下:#include<stdio.h>main(){floatscore;printf("請(qǐng)輸入學(xué)生期末考試成績(0—100):\n");scanf("%f",&score);if(score>=90&&score<=100)printf("優(yōu)秀!\n");elseif(score>=80&&score<=89)printf("良好!\n");elseif(score>=70&&score<=79)printf("中等!\n");elseif(score>=60&&score<=69)15printf("及格!\n");
elseprintf("不及格!\n");}程序運(yùn)行結(jié)果:請(qǐng)輸入學(xué)生期末考試成績(0—100):97↙優(yōu)秀!請(qǐng)輸入學(xué)生期末考試成績(0—100):75↙中等!請(qǐng)輸入學(xué)生期末考試成績(0—100):56↙不及格!4.1.1if語句的三種形式注意:當(dāng)多分支中有多個(gè)表達(dá)式同時(shí)滿足時(shí),只執(zhí)行第一個(gè)與之匹配的語句塊。因此要注意對(duì)多分支中條件表達(dá)式的書寫次序,防止某些值被過濾掉。4.1.1if語句的三種形式16思考:若將例4.4中程序改為以下兩種寫法,結(jié)果分別會(huì)如何?程序段一如下:#include<stdio.h>main(){floatscore;printf("請(qǐng)輸入學(xué)生期末考試成績(0-100):\n");scanf("%f",&score);if(score>=90)printf("優(yōu)秀!\n");elseif(score>=80)printf("良好!\n");elseif(score>=70)printf("中等!\n");elseif(score>=60)printf("及格!\n");
elseprintf("不及格!\n");}174.1.1if語句的三種形式程序段二如下:#include<stdio.h>main(){floatscore;printf("請(qǐng)輸入學(xué)生期末考試成績(0-100):\n");scanf("%f",&score);if(score>=60)printf("及格!\n");
elseif(score>=70)printf("中等!\n");elseif(score>=80)printf("良好!\n");elseif(score>=90)printf("優(yōu)秀!\n");
elseprintf("不及格!\n");}184.1.2if語句的嵌套在一個(gè)if語句中又可以包含一個(gè)或多個(gè)if語句,稱為if語句的嵌套。其語法的一般格式為:if(表達(dá)式1)if(表達(dá)式2)語句塊1;else語句塊2;elseif(表達(dá)式3)語句塊3;else語句塊4;執(zhí)行過程:首先判斷表達(dá)式1,如果表達(dá)式1的值為真,再判斷表達(dá)式2,如果表達(dá)式2的值為真,則執(zhí)行語句塊1;否則(表達(dá)式2的值為假)執(zhí)行語句塊2;如果表達(dá)式1的值為假,再判斷表達(dá)式3,如果表達(dá)式3的值為真,則執(zhí)行語句塊3;否則(表達(dá)式3的值為假)執(zhí)行語句塊4。194.1.2if語句的嵌套思考:以下兩種情況中else分別和哪個(gè)if配對(duì)?情況1:if(表達(dá)式1)if(表達(dá)式2)語句1;else語句2;情況2:if(表達(dá)式1){if(表達(dá)式2)語句1;}else語句2;程序如下:#include<stdio.h>main(){intx,y;printf("請(qǐng)輸入x:\n");scanf("%d",&x);if(x>0) y=2*x;elseif(x==0) y=0;else y=-x;printf("y的值為:%d\n",y);}20【例4.6】分段函數(shù)求解。從鍵盤上輸入整數(shù)x,求y的值。4.1.2if語句的嵌套程序運(yùn)行結(jié)果:請(qǐng)輸入x:8↙y的值為:16請(qǐng)輸入x:-2↙y的值為:2214.2switch語句日常生活中,經(jīng)常會(huì)遇到多重選擇的問題。除了使用多分支if…elseif語句外,C語言還提供了另一種結(jié)構(gòu)——switch語句。switch語句又稱為開關(guān)語句,主要用于實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。其語法的一般格式為:switch(表達(dá)式){case常量表達(dá)式1:語句塊1;break;case常量表達(dá)式2:語句塊2;break;
……case常量表達(dá)式n:語句塊n;break;default:語句塊n+1;}224.2switch語句執(zhí)行過程:先計(jì)算表達(dá)式的值,并依次與case后面的常量表達(dá)式比較,如果表達(dá)式的值與常量表達(dá)式1的值相等,則執(zhí)行其后面的語句塊1;否則若與常量表達(dá)式2的值相等,則執(zhí)行其后面的語句塊2;以此類推……;否則若與常量表達(dá)式n的值相等,則執(zhí)行后面的語句塊n;如果表達(dá)式的值與所有case后的常量表達(dá)式都不相同,則執(zhí)行default后面的語句塊n+1。case后的break表示跳出switch語句,執(zhí)行流程如圖4.4所示。234.2switch語句圖4.4switch選擇結(jié)構(gòu)244.2switch語句使用switch語句應(yīng)注意以下幾點(diǎn):(1)switch后面括號(hào)中的表達(dá)式一般是整型或字符型。(2)case后面的常量表達(dá)式類型必須和switch后面的表達(dá)式類型相同,并且不能使用變量。(3)case關(guān)鍵字和常量表達(dá)式之間需有空格,常量表達(dá)式的值必須互不相同。(4)每執(zhí)行一個(gè)case語句后,為了使流程能夠跳出switch結(jié)構(gòu),必須使用break語句結(jié)束switch語句的執(zhí)行,否則流程會(huì)按順序依次執(zhí)行后續(xù)的case語句。254.2switch語句例如:switch(grade){case1:printf("A!");case2:printf("B!");case3:printf("C!");case4:printf("D!");}因?yàn)閏ase后沒有break語句,所以程序會(huì)一直向下執(zhí)行。因此當(dāng)grade值為1時(shí),程序運(yùn)行結(jié)果為:A!B!C!D!26(5)case后面的語句塊可以是一條語句或多條語句,也可是空語句,但不需要用大括號(hào)括起來。(6)當(dāng)case后面常量表達(dá)式與switch后面的表達(dá)式均不匹配時(shí),則執(zhí)行default后面的語句塊,default可以放在程序的任何位置,不一定要位于最后。(7)多個(gè)case可以共用一個(gè)語句塊。例如:switch(n){case1:case2:case3:printf("優(yōu)秀!");break;}4.2switch語句274.2switch語句【例4.7】將例題4.4改為用switch語句實(shí)現(xiàn)。從鍵盤上輸入學(xué)生期末考試成績,若成績?yōu)?0~100分輸出“優(yōu)秀”,80~89分輸出“良好”,70~79分輸出“中等”,60~69分輸出“及格”,0~59分輸出“不及格”。程序如下:#include<stdio.h>main(){intscore;printf("請(qǐng)輸入學(xué)生期末考試成績(0-100):\n");scanf("%d",&score);switch(score/10){case10:case9:printf("優(yōu)秀!\n");break;case8:printf("良好!\n");break;case7:printf("中等!\n");break;case6:printf("及格!\n");break;
default:printf("不及格!\n");
}}284.2switch語句程序運(yùn)行結(jié)果:請(qǐng)輸入學(xué)生期末考試成績(0—100):95↙優(yōu)秀!請(qǐng)輸入學(xué)生期末考試成績(0—100):85↙良好!請(qǐng)輸入學(xué)生期末考試成績(0—100):68↙及格!請(qǐng)輸入學(xué)生期末考試成績(0—100):57↙不及格!思考:若將程序中的break語句去掉,結(jié)果會(huì)如何?294.3程序綜合實(shí)例【例4.9】從鍵盤上輸入三角形的三條邊長,判斷是否能構(gòu)成三角形,然后計(jì)算三角形的面積并輸出。假設(shè)a、b、c為三角形的三條邊長,令s=(a+b+c)/2,則三角形面積公式:area=程序如下:#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;printf("請(qǐng)輸入三角形的三條邊長:\n");scanf("%f,%f,%f",&a,&b,&c);/*輸入三角形的三條邊長*/if(a<0||b<0||c<0)printf("輸入的a,b,c均不能為負(fù)數(shù)!\n");else30if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));/*計(jì)算三角形的面積*/printf("三角形的面積:%5.2f\n",area);}elseprintf("不能構(gòu)成三角形,請(qǐng)重新輸入!\n");return0;}4.3程序綜合實(shí)例程序運(yùn)行結(jié)果:請(qǐng)輸入三角形的三條邊長:5.7,9.8,7.5↙三角形的面積:21.30請(qǐng)輸入三角形的三條邊長:1,2,3↙不能構(gòu)成三角形,請(qǐng)重新輸入!314.3程序綜合實(shí)例【例4.12】一元二次方程求解。從鍵盤上輸入a、b、c的值,對(duì)一元二次方程ax2+bx+c=0求解。分析:根據(jù)方程的求解情況,分為以下幾種:(1)當(dāng)a=0,b≠0時(shí),此時(shí)是一元一次方程。當(dāng)a=0,b=0時(shí),此時(shí)方程式并不合法,提示錯(cuò)誤信息。(2)
當(dāng)a≠0時(shí),此時(shí)為一元二次方程,根分為三種情況:①當(dāng)b2-4ac=0,方程有兩個(gè)相等的實(shí)根,即②當(dāng)b2-4ac>0,方程有兩個(gè)不同的實(shí)根,即③當(dāng)b2-4ac<0,方程有兩個(gè)不同的虛根,即324.3程序綜合實(shí)例程序如下:#include<stdio.h>#include<math.h>main(){doublea,b,c,x1,x2,delt,real,imaginary;printf("請(qǐng)輸入a、b、c的值:\n");scanf("%lf,%lf,%lf",&a,&b,&c); /*輸入三角形的三條邊長*/if(a==0){if(b!=0) { x1=-b/c;/*此時(shí)為一元一次方程求根*/printf("方程的解為:%5.2lf\n",x1); }elseprintf("輸入的值不合法,請(qǐng)重新輸入!\n");33}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度馬戲團(tuán)演出場(chǎng)地交通與物流服務(wù)合同4篇
- 2025年度房地產(chǎn)公司銷售顧問聘用合同簡易版
- 二零二五年度綜合服務(wù)私人廠房租賃合同
- 2025版公司勞動(dòng)合同與員工培訓(xùn)計(jì)劃
- 2025年度版股東店面租賃合同(文化創(chuàng)意園區(qū))
- 二零二五年度私了后不追究責(zé)任合同解除及債務(wù)免除協(xié)議
- 2025年度數(shù)碼產(chǎn)品代理銷售合同范本4篇
- 二零二五年度短視頻校園文化活動(dòng)拍攝合同
- 2025年度鋁合金船舶制造與維修合同范本4篇
- 2025年度財(cái)稅代理與稅收籌劃及合規(guī)輔導(dǎo)合同
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2024年食用牛脂項(xiàng)目可行性研究報(bào)告
- 消防安全隱患等級(jí)
- 溫室氣體(二氧化碳和甲烷)走航監(jiān)測(cè)技術(shù)規(guī)范
- 部編版一年級(jí)語文下冊(cè)第一單元大單元教學(xué)設(shè)計(jì)
- 《保單檢視專題》課件
- 北京地鐵13號(hào)線
- 2023山東春季高考數(shù)學(xué)真題(含答案)
- 職業(yè)衛(wèi)生法律法規(guī)和標(biāo)準(zhǔn)培訓(xùn)課件
- 高二下學(xué)期英語閱讀提升練習(xí)(二)
- 民事訴訟證據(jù)清單模板
評(píng)論
0/150
提交評(píng)論