版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
會(huì)計(jì)學(xué)1C程序設(shè)計(jì)Ch分支實(shí)用2
分析問題確定算法編寫程序
調(diào)試程序整理結(jié)果第1頁/共46頁3NiklausWirth公式:
程序=數(shù)據(jù)結(jié)構(gòu)+算法第2頁/共46頁4程序=
數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計(jì)方
法+語言工具+程序設(shè)計(jì)人員第3頁/共46頁5§3.1
算法第4頁/共46頁6一、算法概念1.算法概念算法:解決問題的方法與步驟。如:某菜品制作步驟就是加工該菜肴的算法;
樂譜就是演奏某樂曲的算法;
太極拳動(dòng)作圖解就是打太極拳的算法。例1(清華P14例2.2)寫出輸出50個(gè)學(xué)生成績中大于等于80分者的算法。假設(shè):i為學(xué)生人數(shù)
ni為第i個(gè)學(xué)生的學(xué)號(hào)
gi為第i個(gè)學(xué)生的成績第5頁/共46頁7則算法如下:S1:1iS2:輸入ni,gi的值S3:如果gi≥80,則輸出ni,gi的值,否則不輸出S4:i+1iS5:若i≤50,則返回S2;否則算法結(jié)束2.算法優(yōu)劣標(biāo)準(zhǔn):
正確、簡單3.算法種類:數(shù)值計(jì)算算法與非數(shù)值計(jì)算算法
(清華P14)第6頁/共46頁8二、算法特性(清華P18)1.有窮性2.確定性(無歧義性)3.有效性4.有零個(gè)或多個(gè)輸入5.至少有一個(gè)輸出三、算法的組成要素(高教P56)1.操作(算數(shù)運(yùn)算、邏輯運(yùn)算、關(guān)系運(yùn)算、函數(shù)運(yùn)算、位運(yùn)算、I/O操作等)2.控制結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))第7頁/共46頁9四、算法的描述(清華P19,高教P57)1.用自然語言描述算法2.用傳統(tǒng)流程圖描述算法(組成元件見清華P19圖2.3)
例2(清華P20例2.7/高教P59求n!)
例3.用傳統(tǒng)流程圖描述求解兩個(gè)整數(shù)中的最大值的算法。第8頁/共46頁10
例3.
開始定義inta,b,ca>b輸入a,b的值acbc輸出c的值結(jié)束第9頁/共46頁113.用N_S流程圖描述算法(組成元件見清華P20圖2.24至2.27/高教P59圖3.6)
例4.
用N_S流程圖描述求解兩個(gè)整數(shù)中的最大值的算法。例5.(例1的N_S圖)定義inta,b,c輸入a,b的值a>bacbc輸出c的值yn定義inti,ni,gi輸入ni,gigi≥80i+1i1i輸出ni,giyn當(dāng)i≤50例4例5第10頁/共46頁124.用偽代碼描述算法用偽代碼描述算法就是用介于自然語言與計(jì)算機(jī)語言之間的文字與符號(hào)來描述算法。例6.(對(duì)應(yīng)例5)
BEGIN1iwhilei≤50{inputni,giifgi≥80printniandgii+1i}
END第11頁/共46頁135.用程序設(shè)計(jì)語言描述算法計(jì)算機(jī)無法識(shí)別流程圖和偽代碼,只有用程序設(shè)計(jì)語言描述的算法,才能被計(jì)算機(jī)執(zhí)行、實(shí)現(xiàn)。與偽代碼不同,用程序設(shè)計(jì)語言描述算法時(shí),必須嚴(yán)格遵守所用語言的語法規(guī)則。例7.
(例6中算法的C語言描述.高教P61例3.1類似)main(){inti=1,n,g;while(i<=50)
{scanf(“%d%d”,&n,&g);if(g>=80)printf(“%d,%d\n”,n,g);i=i+1;}
}第12頁/共46頁14§3.2
結(jié)構(gòu)化程序設(shè)計(jì)方法第13頁/共46頁15一、程序設(shè)計(jì)方法及其發(fā)展二、結(jié)構(gòu)化程序設(shè)計(jì)方法1.結(jié)構(gòu)化程序設(shè)計(jì)方法(功能抽象,化整為零,逐步細(xì)化)2.結(jié)構(gòu)化程序設(shè)計(jì)原則(高教P61例3.1后歸納總結(jié))(1).模塊化
(2).自頂向下
(3).逐步求精3.結(jié)構(gòu)化程序的特點(diǎn)
(1).由三種基本結(jié)構(gòu)順序組成(清華P28)(2).每個(gè)程序塊只有一個(gè)入口和一個(gè)出口
(3).沒有死語句(執(zhí)行不到的語句)
(4).沒有死循環(huán)設(shè)計(jì)的模塊化。劃分模塊時(shí),模塊的獨(dú)立性要強(qiáng);扇出數(shù)要恰當(dāng)(2—5個(gè),≤9個(gè));大小要適中(50——100條語句,≤500條)。編碼的結(jié)構(gòu)化。應(yīng)選擇結(jié)構(gòu)化程度高的程序設(shè)計(jì)語言編碼。第14頁/共46頁164.三種基本結(jié)構(gòu)(圖示其傳統(tǒng)框圖和N_S圖。高教P58)
(1).順序結(jié)構(gòu)
(2).分之結(jié)構(gòu)(單分支、二分支、多分支)(3).循環(huán)結(jié)構(gòu)(當(dāng)型循環(huán)、直到型循環(huán))任何一個(gè)結(jié)構(gòu)化程序都由這三種基本結(jié)構(gòu)順序組成,在基本結(jié)構(gòu)之間不存在向前或向后的跳轉(zhuǎn),流程的轉(zhuǎn)移只存在于一個(gè)基本結(jié)構(gòu)之內(nèi)。第15頁/共46頁17§3.3
C程序整體結(jié)構(gòu)與C語句第16頁/共46頁18一、C程序整體結(jié)構(gòu)
……
……
C程序源程序文件2源程序文件n函數(shù)1源程序文件1預(yù)處理命令全局變量聲明函數(shù)n函數(shù)說明部分函數(shù)體局部變量聲明執(zhí)行語句第17頁/共46頁19二、C語句(個(gè)高教P64,P68圖示)1.控制語句(清華P68,9種,控制程序流程)2.函數(shù)調(diào)用語句(由一次函數(shù)調(diào)用加;構(gòu)成)如:printf(“%d”,32+5);3.表達(dá)式語句(由一個(gè)表達(dá)式+;構(gòu)成)如:x=3;4.空語句(由一個(gè);構(gòu)成):;5.復(fù)合語句(花括號(hào)括起的多個(gè)語句)如:{intx,y;x=2;y=3;}第18頁/共46頁20§3.4三種基本控制結(jié)構(gòu)程序設(shè)計(jì)第19頁/共46頁21§3.3.1
順序結(jié)構(gòu)程序設(shè)計(jì)
(按語句出現(xiàn)的先后順序執(zhí)行,高教習(xí)題)例1.從終端輸入三角形三邊的值(假設(shè)能構(gòu)成三角形),求三角形的面積.設(shè)a,b,c,s,area分別為三邊,半周長和面積,則
area=s=(a+b+c)/2框圖和程序如下:第20頁/共46頁22
開始輸入a,b,c
(a+b+c)/2
s
area
輸出area
結(jié)束#include<math.h>main(){floata,b,c,s,area;printf(“Inputa,b,c:\n”);
scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%f\n”,area);}第21頁/共46頁23§3.3.2分支結(jié)構(gòu)程序設(shè)計(jì)(根據(jù)一定的條件有選擇地執(zhí)行)一、if語句的三種形式1.if(表達(dá)式)語句__單分支結(jié)構(gòu)
表達(dá)式
0
非0語句如:if(x>y)z=x;說明:①格式中的”語句”稱為if語句的內(nèi)嵌語句.②內(nèi)嵌語句只能是一個(gè)語句;若有多個(gè),應(yīng)用大括號(hào)括起來,成為一個(gè)復(fù)合語句.if(x>y){z=x;x=y;}第22頁/共46頁24③內(nèi)嵌語句可以是空語句.if(x>y)
;
特別:if(x>y)z=x;
可以寫成:if(x>y)
z=x;
但不能寫成:
if(x>y);
z=x;
④格式中的”表達(dá)式”
一般是表示條件的邏輯表達(dá)式或關(guān)系表達(dá)式,但它可以是任意的數(shù)值類型的表達(dá)式(整型,實(shí)型,字符型等)
如if(32)printf(“OK!\n”);if(‘a(chǎn)’)printf(“%d\n”,’a’);都是正確的
第23頁/共46頁25例2.輸入二整數(shù),求a,b中的最大值,并放在maxv中。main(){inta,b,maxv;scanf(“%d%d”,&a,&b);maxv=a;
if(a<b)maxv=b;printf(“max=%d\n”,maxv);}
開始輸入a,bamaxv
a<b
非0bmaxv
輸出maxv
結(jié)束0成本P29例3.4第24頁/共46頁26例3.輸入三個(gè)數(shù),使它們按由小到大的順序輸出.三個(gè)數(shù)由x,y,z輸入temp為中間變量按比較交換法排序板書算法框圖根據(jù)框圖寫出程序如右main(){floatex,y,z,temp;
scanf(“%f%f%f”,&x,&y,&z);
if(x>y){temp=x;x=y;y=temp;}if(x>z){temp=x;x=z;z=temp;}if(y>z){temp=y;y=z;z=temp;}Printf(“%f,%f,%f\n”,x,y,z);}成本P30例3.6,高教習(xí)題第25頁/共46頁272.if_else(二分支結(jié)構(gòu))
格式:if(表達(dá)式)語句1else語句2
功能:
根據(jù)條件控制程序流程
表達(dá)式
語句1語句2非00說明:①格式中if語句,else語句的內(nèi)嵌語句均可以是空語句,也可以是復(fù)合語句,還可以是分支語句②語句1與語句2只能被執(zhí)行其一.第26頁/共46頁28例4.用if_else結(jié)構(gòu)改寫例2中的程序main(){inta,b,maxv;scanf(“%d%d”,&a,&b);
if(a<b)maxv=b;
elsemaxv=a;printf(“max=%d\n”,maxv);}思考:①如果第五行中沒有else會(huì)怎樣?
②可否將if和else的內(nèi)嵌語句改為輸出語句?第27頁/共46頁29例5.(高教P69例3.3)例6.(新清華P95例5.3)有一函數(shù):輸入一個(gè)x值,輸出相應(yīng)的y值.以下程序中哪些能輸出正確結(jié)果?Why?程序1:main(){intx,y;scanf(“%d”,&x);
if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“%d,%d\n”,x,y);}程序2:將程序1中的if語句改為:if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;第28頁/共46頁30程序3:將程序1中的if
語句改為:y=-1;if(x!=0)if(x>0)y=1;elsey=0;程序4:將程序1中的if
語句改為:y=0;if(x>=0)if(x>0)y=1;elsey=-1;分析之,并據(jù)程序畫出相應(yīng)的框圖.注意:
①
if和else的內(nèi)嵌語句后都必須有分號(hào);②
else子句不能單獨(dú)使用,必須與if語句配對(duì)使用:從最內(nèi)層開始,與前面最近的if配對(duì).
高教P70例3.4第29頁/共46頁313.if_elseif(多分支結(jié)構(gòu))格式:if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3
…………
elseif(表達(dá)式n-1)語句n-1
else語句n第30頁/共46頁32功能:根據(jù)條件控制程序流程
表達(dá)式1
表達(dá)式2
表達(dá)式n-1
語句1語句2語句n-1語句n………非00非0非0000第31頁/共46頁33例7.某運(yùn)輸公司運(yùn)費(fèi)規(guī)定如下(cost為運(yùn)費(fèi),x為距離)0x≤500.05x>50cost=0.075x>1000.10x>3000.15x>500根據(jù)距離遠(yuǎn)近,輸出運(yùn)費(fèi).程序如右:main(){intx;floatcost;scanf(“%f”,&x);if(x<=50)cost=0;elseif(x<=100)cost=0.05;
elseif(x<=300)cost=0.075;
elseif(x<=500)cost=0.10;
elsecost=0.15;printf(“%d,%f\n”,x,cost);
}思考:該程序中的if結(jié)構(gòu)可否有其他表述形式?第32頁/共46頁34例8(成本P36例3.11)輸入一個(gè)簡單表達(dá)式,形如:
操作數(shù)運(yùn)算符操作數(shù)如:32*56
輸出該表達(dá)式的值。
main(){floatvalue1,value2;charoperator;printf(“typeinyourxpresssion.\n”);scanf(“%f%d%f”,&value1,&operator,&value2);第33頁/共46頁35if(operator==‘+’)printf(“%f\n”,value1+value2);else
if(operator==‘-’)printf(“%f\n”,value1-value2);
elseif(operator==‘*’)printf(“%f\n”,value1*value2);
elseif(operator==‘/’)if(value2==0)printf(“divisionbyzero.\n”);elseprintf(“%f\n”,value1/value2);
elseprintf(“unknwonoperator.\n”);}第34頁/共46頁36說明:①格式中if語句,else語句的內(nèi)嵌語句均可以是空語句,也可以是復(fù)合語句,還可以是分支語句②語句1,語句2,……,語句n只能被執(zhí)行其一.③if和else的內(nèi)嵌語句后都必須有分號(hào);④
else子句不能單獨(dú)使用,必須與if語句配對(duì)使用:從最內(nèi)層開始,與前面最近的if配對(duì).⑤當(dāng)if或else后又含有一個(gè)或多個(gè)if語句時(shí),稱為if語句的嵌套第35頁/共46頁37二、if語句的嵌套一般形式如下:if(){……if()語句1else語句2
……}else{……if()語句1else語句2
……}內(nèi)嵌if內(nèi)嵌if例.下面程序段試圖使第三行的else與第一行的if配對(duì),能否實(shí)現(xiàn)?怎樣實(shí)現(xiàn)?if()if()語句1elseif()語句2else語句3高教P70例3.4與此例類似,其正確程序見P72第36頁/共46頁38對(duì)于if語句的嵌套,應(yīng)特別注意else與if的配對(duì)關(guān)系:從最內(nèi)層開始,else與前面最近的if配對(duì).一般應(yīng)遵循如下原則:①內(nèi)嵌的if語句最好含有相應(yīng)的else語句,使if和else的數(shù)目相同,一一對(duì)應(yīng)。
例9:高教P72例3.5or
清華P59例5.3程序1②如果if和else的數(shù)目不相同,可使用大括號(hào)來確定配對(duì)關(guān)系。
如上例和高教P72例3.4的正確程序③只嵌套在else子句中,構(gòu)成if_elseif結(jié)構(gòu)。高教P74例3.6第37頁/共46頁39三、switch語句格式:
switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2
………………case常量表達(dá)式n:語句ndefault:語句n+1}第38頁/共46頁40說明:①switch后的表達(dá)式可以是整型字符型和枚舉型數(shù)據(jù)②各case后的表達(dá)式必須為常量表達(dá)式;
如:可以3+6,但不可以3+x③各case子句后的語句i可以是空語句,也可以是復(fù)合語句,并可缺省其大括號(hào);
如:case‘A’:x=90;printf(“%d”,x);④各case子句的前后順序可以任意;⑤
default子句可以沒有;⑥一個(gè)switch結(jié)構(gòu)的case子句和default子句必須用大括號(hào)整體擴(kuò)起來。第39頁/共46頁41功能:根據(jù)switch后表達(dá)式的值是否與某case
后常量表達(dá)式的值相等,確定程序流程N(yùn)S圖:表達(dá)式常量表達(dá)式1常量表達(dá)式2……常量表達(dá)式n否則語句1,……語句n+1語句2,……語句n+1……語句n,語句n+1語句n+1第40頁/共46頁42注意:
①任二case子句后的常量表達(dá)式的值不相等,否則會(huì)導(dǎo)致相同條件出現(xiàn)兩種甚至多種執(zhí)行方案的矛盾②多個(gè)case子句可共用一組執(zhí)行語句;且除該組最后一case子句,前面若干case子句的執(zhí)行語句可缺省不寫如:…………case‘A’:case‘B’:case‘C’:printf(“>60\n”);break;…………第41頁/共46頁43③執(zhí)行完一個(gè)case子句后,流程轉(zhuǎn)移到下一case子句繼續(xù)執(zhí)行,若只需執(zhí)行一個(gè)語句后退出switch結(jié)構(gòu),可以在該case子句的執(zhí)行語句序列最后使用break語句。例10.清華P75例3.7main(){floatvalue1,value2;charoperator;printf(“typeinyourexpresssion.\n”);scanf(“%f%d%f”,&value1,&operator,&value2);例11.(用switch結(jié)構(gòu)改寫例8)
第42頁/共46頁44{case’+’:printf(“%f\n”,value1+value2);break;case’-’:printf(“%f\n”,value1-value2);break;case’*’:prin
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度寵物用品連鎖店承包經(jīng)營服務(wù)協(xié)議4篇
- 二零二五版明星代言合同合作方責(zé)任與義務(wù)協(xié)議4篇
- 建設(shè)工程設(shè)計(jì)合同(2篇)
- 聚氨酯管殼施工方案
- 二零二五版數(shù)碼產(chǎn)品典當(dāng)借款服務(wù)協(xié)議4篇
- 2025年度個(gè)人貸款還款計(jì)劃合同模板8篇
- 中央處理器GPU:性能躍遷與行業(yè)應(yīng)用的深度剖析 頭豹詞條報(bào)告系列
- 班會(huì)安全教育模板
- 二零二五年度民間擔(dān)保機(jī)構(gòu)與企業(yè)合作協(xié)議4篇
- 鯨的自述200字5篇
- 常用靜脈藥物溶媒的選擇
- 2023-2024學(xué)年度人教版一年級(jí)語文上冊(cè)寒假作業(yè)
- 當(dāng)代西方文學(xué)理論知到智慧樹章節(jié)測(cè)試課后答案2024年秋武漢科技大學(xué)
- 2024年預(yù)制混凝土制品購銷協(xié)議3篇
- 2024-2030年中國高端私人會(huì)所市場(chǎng)競(jìng)爭(zhēng)格局及投資經(jīng)營管理分析報(bào)告
- GA/T 1003-2024銀行自助服務(wù)亭技術(shù)規(guī)范
- GB/T 18488-2024電動(dòng)汽車用驅(qū)動(dòng)電機(jī)系統(tǒng)
- 門診特定病種待遇認(rèn)定申請(qǐng)表
- 混合離子交換器使用說明書正本
- 工傷保險(xiǎn)待遇及案例分析PPT課件
- 自控工程識(shí)圖
評(píng)論
0/150
提交評(píng)論