




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)本章要點(diǎn):if語句if語句的嵌套條件運(yùn)算符switch語句選擇結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)方法建議:學(xué)習(xí)本章內(nèi)容應(yīng)重點(diǎn)掌握if語句的執(zhí)行過程,在此基礎(chǔ)上,掌握if語句、switch語句格式及應(yīng)用,學(xué)會編寫選擇結(jié)構(gòu)程序。本章的難點(diǎn)是if語句的嵌套和switch語句的應(yīng)用。4.1引例1.問題描述——學(xué)生助學(xué)金評定助學(xué)金是高等院校資助貧困學(xué)生的一項(xiàng)重要舉措,一般助學(xué)金的評定要參考學(xué)生的學(xué)習(xí)成績。假定助學(xué)金的評選規(guī)則為:綜合平均成績在90分及以上的同學(xué)可獲一等助學(xué)金;在80分(包括80分)至90分之間的同學(xué)可獲二等助學(xué)金;在60分(包括60分)至80的同學(xué)可獲三等助學(xué)金;60分以下的同學(xué)不能獲助學(xué)金。2.引例分析首先用最簡單的方式處理評定結(jié)果:根據(jù)某位同學(xué)的成績判斷他能否獲取助學(xué)金,輸出不獲得助學(xué)金的提示信息,算法的流程圖如圖4-1所示。3.程序代碼實(shí)現(xiàn)引例算法的程序代碼:#include<stdio.h>main(){intscore;printf("inputscore:");scanf("%d",&score);if(score<60)printf("Nogrant!\n");}4.2if語句4.2.1if語句1.第一種格式格式:if(表達(dá)式)語句1;功能:首先計(jì)算表達(dá)式的值,若值為“真”(非0),則執(zhí)行語句1;表達(dá)式的值為“假”(0),則直接轉(zhuǎn)到此if語句的下一條語句去執(zhí)行。(1)if語句中的“表達(dá)式”必須用“()”括起來。(2)當(dāng)if(表達(dá)式)后面的語句,僅由一條語句構(gòu)成時,可不使用大括號,但是語句1由兩條或兩條以上語句構(gòu)成,就必須用大括號“{}”括起來構(gòu)成復(fù)合語句。圖4-2if語句第一種格式流程圖main(){inta,b,x;
scanf("a=%d,b=%d",&a,&b);
if(a<b)
{x=a;a=b;b=x;
}/*交換a與b單元的內(nèi)容*/
printf("a=%d,b=%d",a,b);}第一次運(yùn)行結(jié)果為:輸入a=10,b=20↙
a=20,b=10第二次運(yùn)行結(jié)果為:輸入a=30,b=5↙
a=30,b=5【例4.1】比較兩個數(shù),按由大到小輸出。if(表達(dá)式)
語句1;else
語句2;功能:計(jì)算表達(dá)式的值,若表達(dá)式的值為“真”(非0或T),則執(zhí)行語句1;表達(dá)式的值為“假”(0或F),則執(zhí)行語句2。2.第二種格式【例4.2】由4.1節(jié)引例可知,當(dāng)輸入一個大于60分的成績,程序無任何顯示。因此,有必要進(jìn)一步補(bǔ)充助學(xué)金評定結(jié)果的信息,無論結(jié)果如何,都給出提示信息。程序代碼修改如下:#include<stdio.h>main(){intscore;printf("inputscore:");scanf("%d",&score);if(score<60)printf("Sorry!Youdon'tgetagrant.\n");elseprintf("Congratulations!Youmaygetgrantmoney.\n");}【例4.3】從兩個數(shù)中找出較大的數(shù)。#include<stdio.h>main(){inta,b,max;printf("inputtwoscores:");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("max=%d\n",max);}運(yùn)行結(jié)果為:Pleaseinputthreenumbers:6,9,13↙max=13main(){intnum1,num2,num3,max;printf("Pleaseinputthreenumbers:");scanf("%d,%d,%d",&num1,&num2,&num3);if(num1>num2)max=num1;elsemax=num2;if(num3>max)max=num3;printf("Thethreenumbersare:%d,%d,%d\n",num1,num2,num3);printf("max=%d\n",max);}【例4.4】輸入任意三個整數(shù)num1、num2、num3,求三個數(shù)中的最大值。if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2; elseif(表達(dá)式3)語句3;… elseif(表達(dá)式n)語句n;
else語句n+1;3.第三種格式圖4-3if語句第三種格式流程圖【例4.5】使用if-else語句完善了助學(xué)金評定引例,實(shí)際上引例顯示的信息仍然有限。我們希望依據(jù)某位同學(xué)的成績,程序可以判斷出他能否獲取助學(xué)金,而且還可以詳細(xì)地顯示助學(xué)金的等級。引例的程序代碼修改如下:#include<stdio.h>main(){intscore;printf("inputascore(0~100):");scanf("%d",&score);if(score<=100&&score>=90)/*90分及以上為一等助學(xué)金*/printf("Grantgrade:1\n");elseif(score>=80)/*80分(包括80分)至90分之間為二等助學(xué)金*/printf("Grantgrade:2\n");elseif(score>=60)/*60分(包括60分)至80為三等助學(xué)金*/printf("Grantgrade:3\n");else/*60分以下不能獲取助學(xué)金*/printf("Nogrant!\n");}【例4.6】輸入一個字符,判定它的類別,比如是數(shù)字、小寫字母、大寫字母、控制字符或其他字符。#include<stdio.h>main(){charc;printf("inputacharacter:");c=getchar();if(c<32)/*判定是否為控制字符*/printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')/*判定是否為數(shù)字字符*/printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')/*判定是否為大寫字母*/printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')/*判定是否為小寫字母*/printf("Thisisasmallletter\n");else/*判定是否為其他字符*/printf("Thisisanothercharacter\n");}if語句中又包含一個或多個if語句稱為if語句的嵌套。一般形式為:if()
if()語句1;else語句2;elseif()語句3;else語句4;4.2.2if語句的嵌套【例4.7】使用嵌套的if語句實(shí)現(xiàn)相同的功能,首先根據(jù)成績的取值范圍處理分為兩種情況:有或者沒有助學(xué)金,如果有則進(jìn)一步判別等級是一等、二等或三等助學(xué)金。#include<stdio.h>main(){intscore;printf("inputscorevaluebetween0and100:");scanf("%d",&score);if(score>=60){if(score<80)printf("Grantgrade:3\n");else{if(score<90)printf("Grantgrade:2\n");elseprintf(“Grantgrade:1\n”);}}elseprintf("Nogrant!\n");}【例4.8】if語句的嵌套應(yīng)用。#include<stdio.h>main(){inta,b;printf("inputa,b=");scanf("%d,%d",&a,&b);if(a>b)printf("a>b\n");else/*此else與距離它最近的if(a>b)配對*/if(a<b)printf("a<b\n");elseprintf("a=b\n");/*else與距離它最近if配對*/}
條件運(yùn)算符要求有3個操作對象,稱三目(元)運(yùn)算符。條件表達(dá)式的一般格式為
表達(dá)式1?表達(dá)式2:表達(dá)式3
如果“表達(dá)式1”的值為非0(即真),則運(yùn)算結(jié)果等于“表達(dá)式2”的值;否則,運(yùn)算結(jié)果等于“表達(dá)式3”的值。例如:x=a>b?a:b當(dāng)a=2b=1時,x=2
條件運(yùn)算符的優(yōu)先級,高于賦值運(yùn)算符,但低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。其結(jié)合性為“從右到左”(即右結(jié)合性)。例如:x=a>b?a:(c>d?c:d)
當(dāng)a=1b=2c=3d=4時x=44.2.3條件運(yùn)算符【例4.9】從鍵盤上輸入一個字符,如果它是大寫字母,則把它轉(zhuǎn)換成小寫字母輸出;否則,直接輸出。#include<stdio.h>main(){charch;printf("Inputacharacter:");scanf("%c",&ch);/*輸入一個字符*/ch=(ch>='A'&&ch<='Z')?(ch+32):ch;/*若是大寫字母則轉(zhuǎn)換成小寫字母,否則直接輸出*/printf("ch=%c\n",ch);} 4.3switch語句
C語言還提供了另一種用于多分支選擇的switch語句,這種語句把一個表達(dá)式的值和一個整數(shù)或字符常量表中的元素逐一比較,發(fā)生匹配時,與匹配常數(shù)關(guān)聯(lián)的語句被執(zhí)行。switch語句的一般形式:
switch(表達(dá)式)
{case常量表達(dá)式1:語句1;[break;]
case常量表達(dá)式2:語句2;[break;]......case常量表達(dá)式n:語句n;[break;][default:語句n+1;[break;]] }【例4.10】使用swicth語句實(shí)現(xiàn)“助學(xué)金評定”引例的編程,完成助學(xué)金等級的判別。#include<stdio.h>main(){intscore;printf("inputscorevaluebetween0and100:");scanf("%d",&score);switch(score/10){case10:case9:printf("Grantgrade:1\n");break;case8:printf("Grantgrade:2\n");break;case7:case6:printf("Grantgrade3\n");break;case5:case4:case3:case2:case1:case0:printf("Nogrant!\n");break;default:printf("Thescoreisoutofrange!\n");}}4.4程序設(shè)計(jì)舉例【例4.11】有一函數(shù),輸入x值,輸出對應(yīng)的y值。main(){intx,y;
printf("inputx:");
scanf("%d",&x);
if(x<1)
y=x;
elseif(x<10)/*此時x≥1在判斷x<10則相當(dāng)于滿足條件(1≤x<10)*/
y=2*x-1;
else
y=3*x+1;/*前面判斷x不小于1,也不小于10即滿足條件x≥10*/
printf("y=%d\n",y);
}運(yùn)行結(jié)果為:inputx:5↙y=9【例4.12】已知三角形的三條邊長a、b、c,求三角形面積。計(jì)算三角形面積的海倫公式為:,其中s=(a+b+c)/2。#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;printf("Pleseinputthreesidesoftriangle:\n");scanf("%f,%f,%f",&a,&b,&c);/*輸入三角形的三條邊長a,b,c*/if(a+b>c&&a+c>b&&b+c>a)/*是否滿足三角形的條件*/{s=1.0/2*(a+b+c);/*計(jì)算三角形周長的一半*/area=sqrt(s*(s-a)*(s-b)*(s-c));/*利用海倫公式計(jì)算三角形面積*/ printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s); printf("area=%.2f\n",area);/*輸出三角形面積*/}else/*如果不滿足三角形條件,則輸出三角形的邊值出錯*/printf("Thevalueoftrianglesideserror!");}【例4.13】輸入一個數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為3的倍數(shù)。#include<stdio.h>main(){intx;scanf("%d",&x);if(x%2!=0)/*判斷x是否為奇數(shù)*/{printf("%disanodd\n",x);if(x%3==0)/*判斷x是否是3的倍數(shù)*/printf("%disthetimesof3\n",x);}elseprintf("%disaneven\n",x);}【例4.14】求一元二次方程ax2+bx+c=0的解(a≠0)。#include<stdio.h>#include<math.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("%f,%f,%f",&a,&b,&c);/*輸入一元二次方程的系數(shù)a,b,c*/disc=b*b-4*a*c;if(fabs(disc)<=1e-6) /*fabs()為絕對值函數(shù)*/printf("x1=x2=%7.2f\n",-b/(2*a));/*輸出兩個相等的實(shí)根*/else{if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a); /*求出兩個不相等的實(shí)根*/x2=(-b-sqrt(disc))/(2*a);printf("x1=%7.2f,x2=%7.2f\n",x1,x2);}else{p=-b/(2*a);/*求出兩個共軛復(fù)根*/q=sqrt(fabs(disc))/(2*a);printf("x1=%7.2f+%7.2fi\n",p,q);/*輸出兩個共軛復(fù)根*/
printf("x2=%7.2f-%7.2fi\n",p,q);}}}①能被4整除,但不能被100整除。②能被400整除。main(){intyear;printf("Pleaseinputtheyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}【例4.15】判別某一年是否為閏年。判斷閏年的條件為下面二者之一:運(yùn)行結(jié)果為:輸入1989↙1989isnotaleapyear.輸入2000↙2000isaleapyear.上機(jī)實(shí)驗(yàn)1.熟練掌握if語句的基本結(jié)構(gòu);2.學(xué)會利用if語句編寫選擇結(jié)構(gòu)程序;3.學(xué)會利用switch語句編寫選擇結(jié)構(gòu)程序。一、實(shí)驗(yàn)?zāi)康?.驗(yàn)證性實(shí)驗(yàn)1)以下程序?qū)崿F(xiàn)計(jì)算兩個數(shù)的商,請驗(yàn)證程序運(yùn)行結(jié)果。#include<stdio.h>main(){inta,b;printf(“Inputtwointnumber:\n”);scanf(“%d%d”,&a,&b);if(b==0)printf("Dividedbyzero\n");elseprintf(“%f\n”,1.0*a/b);}二、實(shí)驗(yàn)內(nèi)容2)程序改錯#include<stdio.h>main()
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高考物理“系統(tǒng)思維”構(gòu)建試題
- 教育有關(guān)的考試題及答案
- 工序知識考試題及答案解析
- 市場調(diào)查分析框架及數(shù)據(jù)應(yīng)用
- 高等代數(shù)1考試題及答案
- 贛源食品考試題及答案
- 2025年丙肝防止培訓(xùn)試題及答案
- 玉泉學(xué)??荚囶}目及答案
- 2025年上海復(fù)旦大學(xué)附屬浦東實(shí)驗(yàn)學(xué)校教師招聘模擬試卷附答案詳解(考試直接用)
- 環(huán)保型家居用品設(shè)計(jì)開發(fā)與生產(chǎn)合作協(xié)議
- 金華蘭溪市衛(wèi)生健康局所屬事業(yè)單位招聘筆試真題2024
- 旅游政策與法規(guī)基礎(chǔ)教程
- 風(fēng)電項(xiàng)目運(yùn)營與維護(hù)管理方案
- 學(xué)習(xí)《水利水電工程生產(chǎn)安全重大事故隱患判定導(dǎo)則-SLT 842》課件
- 2025年秋招:招商銀行筆試真題及答案(可下載)
- 1.3 逐層分類細(xì)化分類結(jié)果【知識精研】二年級上冊數(shù)學(xué)(人教版2024)
- 甘肅省醫(yī)療建設(shè)管理辦法
- 計(jì)算機(jī)視覺(CV)工程師崗位面試問題及答案
- 胸痛的護(hù)理教學(xué)課件
- 2025年輔警招聘考試題庫(+答案解析)
- 橋梁施工培訓(xùn)課件
評論
0/150
提交評論