C程序設(shè)計(jì)Ch 分支實(shí)用_第1頁
C程序設(shè)計(jì)Ch 分支實(shí)用_第2頁
C程序設(shè)計(jì)Ch 分支實(shí)用_第3頁
C程序設(shè)計(jì)Ch 分支實(shí)用_第4頁
C程序設(shè)計(jì)Ch 分支實(shí)用_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論