用函數(shù)實現(xiàn)模塊化程序設(shè)計市公開課一等獎百校聯(lián)賽特等獎?wù)n件_第1頁
用函數(shù)實現(xiàn)模塊化程序設(shè)計市公開課一等獎百校聯(lián)賽特等獎?wù)n件_第2頁
用函數(shù)實現(xiàn)模塊化程序設(shè)計市公開課一等獎百校聯(lián)賽特等獎?wù)n件_第3頁
用函數(shù)實現(xiàn)模塊化程序設(shè)計市公開課一等獎百校聯(lián)賽特等獎?wù)n件_第4頁
用函數(shù)實現(xiàn)模塊化程序設(shè)計市公開課一等獎百校聯(lián)賽特等獎?wù)n件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

7.1函數(shù)是什么7.2函數(shù)定義和調(diào)用7.3函數(shù)嵌套調(diào)用和遞歸調(diào)用7.4數(shù)組作為函數(shù)參數(shù)7.5變量作用域和生存期第7章用函數(shù)實現(xiàn)模塊化程序設(shè)計P168第1頁7.1函數(shù)是什么假如程序功效比較多,規(guī)模比較大,把全部程序代碼都寫在一個主函數(shù)中,就會使主函數(shù)變得龐雜、頭緒不清,使閱讀和維護(hù)程序變得困難。P168第2頁有時程序中要屢次實現(xiàn)某一功效,就需要屢次重復(fù)編寫實現(xiàn)此功效程序代碼。這使程序冗長,不精煉。7.1函數(shù)是什么P168第3頁采取“組裝”方法簡化程序設(shè)計過程事先編好一批函數(shù)實現(xiàn)各種不一樣功效用到什么函數(shù)就直接裝使用就能夠這就是模塊化程序設(shè)計7.1函數(shù)是什么P168第4頁函數(shù)就是功效(Function)每一個函數(shù)用來實現(xiàn)一個特定功效函數(shù)名字應(yīng)反應(yīng)其代表功效7.1函數(shù)是什么P168第5頁在設(shè)計一個較大程序時,往往把它分為若干個程序模塊,每一個模塊包含一個或多個函數(shù),每個函數(shù)實現(xiàn)一個特定功效。7.1函數(shù)是什么P168第6頁一個C程序可由一個主函數(shù)和若干個其它函數(shù)組成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也能夠相互調(diào)用。同一個函數(shù)能夠被一個或多個函數(shù)調(diào)用任意屢次7.1函數(shù)是什么P168第7頁7.1函數(shù)是什么P168mainabcfghdeie第8頁除了能夠使用庫函數(shù)外,還能夠編寫一些本事域或本單位慣用到一些專用函數(shù),供本事域或本單位人員使用。、在程序設(shè)計中要善于利用函數(shù),能夠降低各人重復(fù)編寫程序段工作量,同時能夠方便地實現(xiàn)模塊化程序設(shè)計。7.1函數(shù)是什么P168第9頁說明:(1)一個C程序由一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。對于較大程序,一般不把全部內(nèi)容全放在一個源程序文件中,而是將它們分別放在若干個源文件中,由若干個源程序文件組成一個C程序。這么便于分別編寫、分別編譯,提高調(diào)試效率。一個源程序文件可認(rèn)為多個C程序所調(diào)用。第10頁說明:(2)一個源程序文件由一個或多個函數(shù)以及其它相關(guān)內(nèi)容組成。一個源程序文件是一個編譯單位,在程序編譯時是以源程序文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。第11頁說明:(3)不論main函數(shù)出現(xiàn)在什么位置,總是從main函數(shù)開始執(zhí)行。假如在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個程序運行。第12頁說明:(4)全部函數(shù)都是平行,即在定義函數(shù)時是分別進(jìn)行,是相互獨立。一個函數(shù)并不隸屬于另一個函數(shù),即函數(shù)不能嵌套定義。函數(shù)間能夠相互調(diào)用,但不能調(diào)用main函數(shù)。main函數(shù)是由系統(tǒng)調(diào)用。第13頁說明:(5)從用戶使用角度看,函數(shù)有兩種。庫函數(shù),它是由系統(tǒng)提供,用戶無須自己定義而直接使用它們。應(yīng)該說明,不一樣C語言編譯系統(tǒng)提供庫函數(shù)數(shù)量和功效會有一些不一樣,當(dāng)然許多基本函數(shù)是共同。用戶自己定義函數(shù)。它是用以處理用戶專門需要函數(shù)。第14頁說明:(6)從函數(shù)形式看,函數(shù)分兩類。

①無參函數(shù)。函數(shù)沒有參數(shù),普通用來執(zhí)行固定一組操作。無參函數(shù)能夠帶回或不帶回函數(shù)值,但普通以不帶回函數(shù)值居多。

②有參函數(shù)。在調(diào)用函數(shù)時,要給出實參。主調(diào)函數(shù)在調(diào)用被調(diào)用函數(shù)時,經(jīng)過參數(shù)向被調(diào)用函數(shù)傳遞數(shù)據(jù),普通情況下,執(zhí)行被調(diào)用函數(shù)時會得到一個函數(shù)值,供主調(diào)函數(shù)使用。第15頁7.2函數(shù)定義和調(diào)用7.2.1為何要定義函數(shù)7.2.2函數(shù)定義7.2.3函數(shù)調(diào)用7.2.4對被調(diào)用函數(shù)申明和函數(shù)原型P170第16頁C語言要求,在程序中用到全部函數(shù),必須“先定義,后使用”指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實現(xiàn)功效以及參數(shù)個數(shù)與類型,將這些信息通知編譯系統(tǒng)。7.2.1為何要定義函數(shù)P170第17頁指定函數(shù)名字,方便以后按名調(diào)用指定函數(shù)類型,即函數(shù)返回值類型指定函數(shù)參數(shù)名字和類型,方便在調(diào)用函數(shù)時向它們傳遞數(shù)據(jù)指定函數(shù)功效。這是最主要,這是在函數(shù)體中處理7.2.1為何要定義函數(shù)P170第18頁假如程序中要調(diào)用庫函數(shù),只需用#include指令把相關(guān)頭文件包含到本文件模塊中即可。假如想使用庫函數(shù)中沒有函數(shù),需要程序設(shè)計者在程序中自己定義。7.2.1為何要定義函數(shù)P170第19頁7.2.2函數(shù)定義1.怎樣定義無參函數(shù)函數(shù)名后面圓括號中空,沒有參數(shù)定義無參函數(shù)普通形式為:

類型名

函數(shù)名()

函數(shù)體

P171包含申明部分和語句部分指定函數(shù)值類型第20頁7.2.2函數(shù)定義1.怎樣定義無參函數(shù)函數(shù)名后面圓括號中空,沒有參數(shù)定義無參函數(shù)普通形式為:

類型名

函數(shù)名()

函數(shù)體

}P171表示不需要帶回函數(shù)值void第21頁7.2.2函數(shù)定義2.怎樣定義有參函數(shù)定義有參函數(shù)普通形式為:類型標(biāo)識符

函數(shù)名(形式參數(shù)表列)

函數(shù)體

}P171第22頁7.2.2函數(shù)定義2.怎樣定義有參函數(shù)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}P171求x和y二者中大者第23頁7.2.3函數(shù)調(diào)用1.調(diào)用無參函數(shù)形式

函數(shù)名()

如print_star()2.調(diào)用無參函數(shù)形式

函數(shù)名(實參表列)如max(a,b)P172假如有多個參數(shù),用逗號隔開第24頁例7.2輸入兩個整數(shù),輸出二者中大者。要求在主函數(shù)中輸入兩個整數(shù),用一個函數(shù)max求出其中大者,并在主函數(shù)中輸出此值。第25頁#include<stdio.h>

intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}參數(shù)類型函數(shù)類型定義函數(shù)定義函數(shù)內(nèi)使用變量第26頁

c=max(a,b);(main函數(shù))intmax(intx,inty)(max函數(shù)){intz;z=x>y?x:y;return(z);}第27頁#include<stdio.h>voidmain(){intmax(intx,inty);inta,b,c;printf(”pleaseinputtwonumber:”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“maxis%d\n”,c);}

intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}形式參數(shù)實際參數(shù)第28頁函數(shù)調(diào)用過程:在定義函數(shù)中指定形參,在未出現(xiàn)函數(shù)調(diào)用時,它們并不占內(nèi)存中存放單元。在發(fā)生函數(shù)調(diào)用時,函數(shù)max形參被暫時分配內(nèi)存單元。2a3bxy23實參形參第29頁函數(shù)調(diào)用過程:2a3bxy23實參形參調(diào)用結(jié)束,形參單元被釋放實參單元仍保留并維持原值,沒有改變假如在執(zhí)行一個被調(diào)用函數(shù)時,形參值發(fā)生改變,不會改變主調(diào)函數(shù)實參值第30頁調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式1.函數(shù)語句調(diào)用沒有返回值函數(shù),函數(shù)調(diào)用單獨作為一個語句

如例7.1中“print_star();”第31頁調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式2.函數(shù)表示式函數(shù)出現(xiàn)在一個表示式中,這種表示式稱為函數(shù)表示式

如例7.2中“c=max(a,b);”第32頁調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個函數(shù)實參

如printf(″%d″,max(a,b));第33頁7.2.4對被調(diào)用函數(shù)申明和函數(shù)原型P175在一個函數(shù)中調(diào)用另一個函數(shù)需要具備以下條件:(1)被調(diào)用函數(shù)必須是已經(jīng)定義函數(shù)(是庫函數(shù)或用戶自己定義函數(shù))。(2)假如使用庫函數(shù),應(yīng)該在本文件開頭加對應(yīng)#include指令。(3)假如使用自己定義函數(shù),而該函數(shù)位置在調(diào)用它函數(shù)后面,應(yīng)該進(jìn)行函數(shù)申明第34頁7.2.4對被調(diào)用函數(shù)申明和函數(shù)原型P175函數(shù)原型普通形式有兩種:如intmax(intx,inty);intmax(int,int);原型說明能夠放在文件開頭,這時本文件中全部函數(shù)都能夠使用此函數(shù)第35頁7.3函數(shù)嵌套調(diào)用和遞歸調(diào)用P1777.3.1函數(shù)嵌套調(diào)用7.3.2函數(shù)遞歸調(diào)用第36頁7.3.1函數(shù)嵌套調(diào)用調(diào)用一個函數(shù)過程中,又能夠調(diào)用另一個函數(shù)P177第37頁7.3.1函數(shù)嵌套調(diào)用P177main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧b函數(shù)⑤④⑥第38頁7.4數(shù)組作為函數(shù)參數(shù)7.4.1數(shù)組元素作函數(shù)實參7.4.2數(shù)組名作函數(shù)參數(shù)P184第39頁7.4.1數(shù)組元素作函數(shù)實參

因為實參能夠是表示式,而數(shù)組元素能夠是表示式組成部分,所以數(shù)組元素能夠作為函數(shù)實參。P185第40頁7.4.2數(shù)組名作函數(shù)參數(shù)P186希望在函數(shù)中處理整個數(shù)組元素時,能夠用數(shù)組名作為函數(shù)實參注意,此時只是將數(shù)組首元素地址傳遞給所對應(yīng)形參,所以對應(yīng)形參應(yīng)該是指針變量(見第8章)。第41頁例7.7有10個學(xué)生成績,用一個函數(shù)求全體學(xué)生平均成績。解題思緒:在主函數(shù)中定義一個實型數(shù)組score,將輸入10個學(xué)生成績存放在數(shù)組中設(shè)計函數(shù)average,用來求學(xué)生平均成績需要把數(shù)組相關(guān)信息傳遞給average函數(shù)采取用數(shù)組名作為實參,把數(shù)組地址傳給average函數(shù),在該函數(shù)中對數(shù)組進(jìn)行處理第42頁#include<stdio.h>voidmain(){floataverage(floatarray[10]);floatscore[10],aver;inti;printf("input10scores:\n");for(i=0;i<10;i++)scanf("%f",&score[i]);aver=average(score);printf("averagescoreis%5.2f\n",aver);}數(shù)組名作實參第43頁floataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}與score共占同一存放單元實參、形參都是float型相當(dāng)于score[0]相當(dāng)于score[i]第44頁7.5變量作用域和生存期7.5.1變量作用域---局部變量和全局變量7.5.2變量存放方式和生存期7.5.3作用域和生存期小結(jié)P192第45頁7.5.1變量作用域

——局部變量和全局變量1局部變量在函數(shù)和復(fù)合語句內(nèi)定義變量,稱為內(nèi)部變量或局部變量只在本函數(shù)或復(fù)合語句內(nèi)范圍內(nèi)有效(從定義點開始到函數(shù)或復(fù)合語句結(jié)束)在此函數(shù)或復(fù)合語句以外是不能使用這些變量P192第46頁2全局變量一個程序可以包含一個或若干個源程序文件(即程序模塊),而一個源文件可以包含一個或若干個函數(shù)在函數(shù)之外定義變量是外部變量,也稱為全局變量(或全程變量)全局變量有效范圍為從定義變量位置開始到根源文件結(jié)束,在此范圍內(nèi)可認(rèn)為本文件中全部函數(shù)所共用第47頁2全局變量在一個函數(shù)中既能夠使用本函數(shù)中局部變量,又能夠使用有效全局變量。假如在同一個源文件中,外部變量與局部變量同名,則在局部變量作用范圍內(nèi),外部變量被“屏蔽”了,即它不起作用,此時局部變量是有效。第48頁7.5.2變量存放方式和生存期變量生存期:變量值存在時間變量兩種存放方式:靜態(tài)存放方式和動態(tài)存放方式靜態(tài)存放方式是指在程序運行期間由系統(tǒng)分配固定存放空間方式動態(tài)存放方式是在程序運行期間依據(jù)需要進(jìn)行動態(tài)分配存放空間方式P195第49頁7.5.2變量存放方式和生存期全局變量采取靜態(tài)存放方式,在程序開始執(zhí)行時給全局變量分配存放區(qū),程序執(zhí)行完成釋放。在程序執(zhí)行過程中它們占據(jù)固定存放單元,而不是動態(tài)地進(jìn)行分配和釋放。P195第50頁7.5.2變量存放方式和生存期在函數(shù)中定義變量,在函數(shù)調(diào)用開始時分配動態(tài)存放空間,函數(shù)結(jié)束時釋放這些空間。在程序執(zhí)行過程中,這種分配和釋放是動態(tài)。P195第51頁7.5.2變量存放方式和生存期每一個變量和函數(shù)都有兩個屬性:數(shù)據(jù)類型和數(shù)據(jù)存放類別數(shù)據(jù)類型,如整型、浮點型等存放類別指是數(shù)據(jù)在內(nèi)存中存放方式(如靜態(tài)存放和動態(tài)存放)P195第52頁1.auto—申明自動變量(auto變量)函數(shù)中形參和在函數(shù)中定義變量(包含在復(fù)合語句中定義變量),都屬于這類在調(diào)用該函數(shù)時,系統(tǒng)給這些變量分配存放空間,在函數(shù)調(diào)用結(jié)束時就自動釋放這些存放空間。所以這類局部變量稱為自動變量。自動變量用關(guān)鍵字auto作存放類別申明第53頁intf(inta){autointb,c=3;

┇}能夠省略第54頁2.static—申明靜態(tài)變量以下情況需要指定static存放類別:希望函數(shù)中局部變量值在函數(shù)調(diào)用結(jié)束后不消失而繼續(xù)保留原值,即其占用存放單元不釋放,在下一次該函數(shù)調(diào)用時,該變量已經(jīng)有值,就是上一次函數(shù)調(diào)用結(jié)束時值。這時就應(yīng)用關(guān)鍵字static指定該局部變量為“靜態(tài)局部變量”。第55頁對靜態(tài)局部變量說明:(1)靜態(tài)局部變量屬于靜態(tài)存放類別,在靜態(tài)存放區(qū)內(nèi)分配存放單元。在程序整個運行期間都不釋放。而自動變量(即動態(tài)局部變量)屬于動態(tài)存放類別,占動態(tài)存放區(qū)空間而不占靜態(tài)存放區(qū)空間,函數(shù)調(diào)用結(jié)束后即釋放第56頁對靜態(tài)局部變量說明:(2)對靜態(tài)局部變量是在編譯時賦初值,即只賦初值一次,在程序運行時它已經(jīng)有初值。以后每次調(diào)用函數(shù)時不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時值。而對自動變量賦初值,不是在編譯時進(jìn)行,而是在函數(shù)調(diào)用時進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語句。第57頁對靜態(tài)局部變量說明:(3)如在定義局部變量時不賦初值話,則對靜態(tài)局部變量來說,編譯時自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)。而對自動變量

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論