版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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ù)實(shí)現(xiàn)模塊化程序設(shè)計(jì)P1681/647.1函數(shù)是什么假如程序功效比較多,規(guī)模比較大,把全部程序代碼都寫在一個(gè)主函數(shù)中,就會(huì)使主函數(shù)變得龐雜、頭緒不清,使閱讀和維護(hù)程序變得困難。P1682/64有時(shí)程序中要屢次實(shí)現(xiàn)某一功效,就需要屢次重復(fù)編寫實(shí)現(xiàn)此功效程序代碼。這使程序冗長,不精煉。7.1函數(shù)是什么P1683/64采取“組裝”方法簡化程序設(shè)計(jì)過程事先編好一批函數(shù)實(shí)現(xiàn)各種不一樣功效用到什么函數(shù)就直接裝使用就能夠這就是模塊化程序設(shè)計(jì)7.1函數(shù)是什么P1684/64函數(shù)就是功效(Function)每一個(gè)函數(shù)用來實(shí)現(xiàn)一個(gè)特定功效函數(shù)名字應(yīng)反應(yīng)其代表功效7.1函數(shù)是什么P1685/64在設(shè)計(jì)一個(gè)較大程序時(shí),往往把它分為若干個(gè)程序模塊,每一個(gè)模塊包含一個(gè)或多個(gè)函數(shù),每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)特定功效。7.1函數(shù)是什么P1686/64一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)其它函數(shù)組成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也能夠相互調(diào)用。同一個(gè)函數(shù)能夠被一個(gè)或多個(gè)函數(shù)調(diào)用任意屢次7.1函數(shù)是什么P1687/647.1函數(shù)是什么P168mainabcfghdeie8/64除了能夠使用庫函數(shù)外,還能夠編寫一些本事域或本單位慣用到一些專用函數(shù),供本事域或本單位人員使用。、在程序設(shè)計(jì)中要善于利用函數(shù),能夠降低各人重復(fù)編寫程序段工作量,同時(shí)能夠方便地實(shí)現(xiàn)模塊化程序設(shè)計(jì)。7.1函數(shù)是什么P1689/64說明:(1)一個(gè)C程序由一個(gè)或多個(gè)程序模塊組成,每一個(gè)程序模塊作為一個(gè)源程序文件。對于較大程序,一般不把全部內(nèi)容全放在一個(gè)源程序文件中,而是將它們分別放在若干個(gè)源文件中,由若干個(gè)源程序文件組成一個(gè)C程序。這么便于分別編寫、分別編譯,提高調(diào)試效率。一個(gè)源程序文件可認(rèn)為多個(gè)C程序所調(diào)用。10/64說明:(2)一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)以及其它相關(guān)內(nèi)容組成。一個(gè)源程序文件是一個(gè)編譯單位,在程序編譯時(shí)是以源程序文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。11/64說明:(3)不論main函數(shù)出現(xiàn)在什么位置,總是從main函數(shù)開始執(zhí)行。假如在main函數(shù)中調(diào)用其他函數(shù),在調(diào)用后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序運(yùn)行。12/64說明:(4)全部函數(shù)都是平行,即在定義函數(shù)時(shí)是分別進(jìn)行,是相互獨(dú)立。一個(gè)函數(shù)并不隸屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義。函數(shù)間能夠相互調(diào)用,但不能調(diào)用main函數(shù)。main函數(shù)是由系統(tǒng)調(diào)用。13/64說明:(5)從用戶使用角度看,函數(shù)有兩種。庫函數(shù),它是由系統(tǒng)提供,用戶無須自己定義而直接使用它們。應(yīng)該說明,不一樣C語言編譯系統(tǒng)提供庫函數(shù)數(shù)量和功效會(huì)有一些不一樣,當(dāng)然許多基本函數(shù)是共同。用戶自己定義函數(shù)。它是用以處理用戶專門需要函數(shù)。14/64說明:(6)從函數(shù)形式看,函數(shù)分兩類。
①無參函數(shù)。函數(shù)沒有參數(shù),普通用來執(zhí)行固定一組操作。無參函數(shù)能夠帶回或不帶回函數(shù)值,但普通以不帶回函數(shù)值居多。
②有參函數(shù)。在調(diào)用函數(shù)時(shí),要給出實(shí)參。主調(diào)函數(shù)在調(diào)用被調(diào)用函數(shù)時(shí),經(jīng)過參數(shù)向被調(diào)用函數(shù)傳遞數(shù)據(jù),普通情況下,執(zhí)行被調(diào)用函數(shù)時(shí)會(huì)得到一個(gè)函數(shù)值,供主調(diào)函數(shù)使用。15/647.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ù)原型P17016/64C語言要求,在程序中用到全部函數(shù),必須“先定義,后使用”指定函數(shù)名字、函數(shù)返回值類型、函數(shù)實(shí)現(xiàn)功效以及參數(shù)個(gè)數(shù)與類型,將這些信息通知編譯系統(tǒng)。7.2.1為何要定義函數(shù)P17017/64指定函數(shù)名字,方便以后按名調(diào)用指定函數(shù)類型,即函數(shù)返回值類型指定函數(shù)參數(shù)名字和類型,方便在調(diào)用函數(shù)時(shí)向它們傳遞數(shù)據(jù)指定函數(shù)功效。這是最主要,這是在函數(shù)體中處理7.2.1為何要定義函數(shù)P17018/64假如程序中要調(diào)用庫函數(shù),只需用#include指令把相關(guān)頭文件包含到本文件模塊中即可。假如想使用庫函數(shù)中沒有函數(shù),需要程序設(shè)計(jì)者在程序中自己定義。7.2.1為何要定義函數(shù)P17019/647.2.2函數(shù)定義1.怎樣定義無參函數(shù)函數(shù)名后面圓括號中空,沒有參數(shù)定義無參函數(shù)普通形式為:
類型名
函數(shù)名()
{
函數(shù)體
}
P171包含申明部分和語句部分指定函數(shù)值類型20/647.2.2函數(shù)定義1.怎樣定義無參函數(shù)函數(shù)名后面圓括號中空,沒有參數(shù)定義無參函數(shù)普通形式為:
類型名
函數(shù)名()
{
函數(shù)體
}P171表示不需要帶回函數(shù)值void21/647.2.2函數(shù)定義2.怎樣定義有參函數(shù)定義有參函數(shù)普通形式為:類型標(biāo)識(shí)符
函數(shù)名(形式參數(shù)表列)
{
函數(shù)體
}P17122/647.2.2函數(shù)定義2.怎樣定義有參函數(shù)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}P171求x和y二者中大者23/647.2.3函數(shù)調(diào)用1.調(diào)用無參函數(shù)形式
函數(shù)名()
如print_star()2.調(diào)用無參函數(shù)形式
函數(shù)名(實(shí)參表列)如max(a,b)P172假如有多個(gè)參數(shù),用逗號隔開24/64例7.2輸入兩個(gè)整數(shù),輸出二者中大者。要求在主函數(shù)中輸入兩個(gè)整數(shù),用一個(gè)函數(shù)max求出其中大者,并在主函數(shù)中輸出此值。25/64#include<stdio.h>
intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}參數(shù)類型函數(shù)類型定義函數(shù)定義函數(shù)內(nèi)使用變量26/64
c=max(a,b);(main函數(shù))intmax(intx,inty)(max函數(shù)){intz;z=x>y?x:y;return(z);}27/64#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í)際參數(shù)28/64函數(shù)調(diào)用過程:在定義函數(shù)中指定形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存中存放單元。在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)max形參被暫時(shí)分配內(nèi)存單元。2a3bxy23實(shí)參形參29/64函數(shù)調(diào)用過程:2a3bxy23實(shí)參形參調(diào)用結(jié)束,形參單元被釋放實(shí)參單元仍保留并維持原值,沒有改變假如在執(zhí)行一個(gè)被調(diào)用函數(shù)時(shí),形參值發(fā)生改變,不會(huì)改變主調(diào)函數(shù)實(shí)參值30/64調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式1.函數(shù)語句調(diào)用沒有返回值函數(shù),函數(shù)調(diào)用單獨(dú)作為一個(gè)語句
如例7.1中“print_star();”31/64調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式2.函數(shù)表示式函數(shù)出現(xiàn)在一個(gè)表示式中,這種表示式稱為函數(shù)表示式
如例7.2中“c=max(a,b);”32/64調(diào)用函數(shù)方式:按函數(shù)在程序中出現(xiàn)位置來分,能夠有以下3種函數(shù)調(diào)用方式3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)實(shí)參
如printf(″%d″,max(a,b));33/647.2.4對被調(diào)用函數(shù)申明和函數(shù)原型P175在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(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/647.2.4對被調(diào)用函數(shù)申明和函數(shù)原型P175函數(shù)原型普通形式有兩種:如intmax(intx,inty);intmax(int,int);原型說明能夠放在文件開頭,這時(shí)本文件中全部函數(shù)都能夠使用此函數(shù)35/647.3函數(shù)嵌套調(diào)用和遞歸調(diào)用P1777.3.1函數(shù)嵌套調(diào)用7.3.2函數(shù)遞歸調(diào)用36/647.3.1函數(shù)嵌套調(diào)用調(diào)用一個(gè)函數(shù)過程中,又能夠調(diào)用另一個(gè)函數(shù)P17737/647.3.1函數(shù)嵌套調(diào)用P177main函數(shù)①調(diào)用a函數(shù)⑨結(jié)束a函數(shù)③調(diào)用b函數(shù)⑦②⑧b函數(shù)⑤④⑥38/647.4數(shù)組作為函數(shù)參數(shù)7.4.1數(shù)組元素作函數(shù)實(shí)參7.4.2數(shù)組名作函數(shù)參數(shù)P18439/647.4.1數(shù)組元素作函數(shù)實(shí)參
因?yàn)閷?shí)參能夠是表示式,而數(shù)組元素能夠是表示式組成部分,所以數(shù)組元素能夠作為函數(shù)實(shí)參。P18540/647.4.2數(shù)組名作函數(shù)參數(shù)P186希望在函數(shù)中處理整個(gè)數(shù)組元素時(shí),能夠用數(shù)組名作為函數(shù)實(shí)參注意,此時(shí)只是將數(shù)組首元素地址傳遞給所對應(yīng)形參,所以對應(yīng)形參應(yīng)該是指針變量(見第8章)。41/64例7.7有10個(gè)學(xué)生成績,用一個(gè)函數(shù)求全體學(xué)生平均成績。解題思緒:在主函數(shù)中定義一個(gè)實(shí)型數(shù)組score,將輸入10個(gè)學(xué)生成績存放在數(shù)組中設(shè)計(jì)函數(shù)average,用來求學(xué)生平均成績需要把數(shù)組相關(guān)信息傳遞給average函數(shù)采取用數(shù)組名作為實(shí)參,把數(shù)組地址傳給average函數(shù),在該函數(shù)中對數(shù)組進(jìn)行處理42/64#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ù)組名作實(shí)參43/64floataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);}與score共占同一存放單元實(shí)參、形參都是float型相當(dāng)于score[0]相當(dāng)于score[i]44/647.5變量作用域和生存期7.5.1變量作用域---局部變量和全局變量7.5.2變量存放方式和生存期7.5.3作用域和生存期小結(jié)P19245/647.5.1變量作用域
——局部變量和全局變量1局部變量在函數(shù)和復(fù)合語句內(nèi)定義變量,稱為內(nèi)部變量或局部變量只在本函數(shù)或復(fù)合語句內(nèi)范圍內(nèi)有效(從定義點(diǎn)開始到函數(shù)或復(fù)合語句結(jié)束)在此函數(shù)或復(fù)合語句以外是不能使用這些變量P19246/642全局變量一個(gè)程序可以包含一個(gè)或若干個(gè)源程序文件(即程序模塊),而一個(gè)源文件可以包含一個(gè)或若干個(gè)函數(shù)在函數(shù)之外定義變量是外部變量,也稱為全局變量(或全程變量)全局變量有效范圍為從定義變量位置開始到根源文件結(jié)束,在此范圍內(nèi)可認(rèn)為本文件中全部函數(shù)所共用47/642全局變量在一個(gè)函數(shù)中既能夠使用本函數(shù)中局部變量,又能夠使用有效全局變量。假如在同一個(gè)源文件中,外部變量與局部變量同名,則在局部變量作用范圍內(nèi),外部變量被“屏蔽”了,即它不起作用,此時(shí)局部變量是有效。48/647.5.2變量存放方式和生存期變量生存期:變量值存在時(shí)間變量兩種存放方式:靜態(tài)存放方式和動(dòng)態(tài)存放方式靜態(tài)存放方式是指在程序運(yùn)行期間由系統(tǒng)分配固定存放空間方式動(dòng)態(tài)存放方式是在程序運(yùn)行期間依據(jù)需要進(jìn)行動(dòng)態(tài)分配存放空間方式P19549/647.5.2變量存放方式和生存期全局變量采取靜態(tài)存放方式,在程序開始執(zhí)行時(shí)給全局變量分配存放區(qū),程序執(zhí)行完成釋放。在程序執(zhí)行過程中它們占據(jù)固定存放單元,而不是動(dòng)態(tài)地進(jìn)行分配和釋放。P19550/647.5.2變量存放方式和生存期在函數(shù)中定義變量,在函數(shù)調(diào)用開始時(shí)分配動(dòng)態(tài)存放空間,函數(shù)結(jié)束時(shí)釋放這些空間。在程序執(zhí)行過程中,這種分配和釋放是動(dòng)態(tài)。P19551/647.5.2變量存放方式和生存期每一個(gè)變量和函數(shù)都有兩個(gè)屬性:數(shù)據(jù)類型和數(shù)據(jù)存放類別數(shù)據(jù)類型,如整型、浮點(diǎn)型等存放類別指是數(shù)據(jù)在內(nèi)存中存放方式(如靜態(tài)存放和動(dòng)態(tài)存放)P19552/641.auto—申明自動(dòng)變量(auto變量)函數(shù)中形參和在函數(shù)中定義變量(包含在復(fù)合語句中定義變量),都屬于這類在調(diào)用該函數(shù)時(shí),系統(tǒng)給這些變量分配存放空間,在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些存放空間。所以這類局部變量稱為自動(dòng)變量。自動(dòng)變量用關(guān)鍵字auto作存放類別申明53/64intf(inta){autointb,c=3;
┇}能夠省略54/642.static—申明靜態(tài)變量以下情況需要指定static存放類別:希望函數(shù)中局部變量值在函數(shù)調(diào)用結(jié)束后不消失而繼續(xù)保留原值,即其占用存放單元不釋放,在下一次該函數(shù)調(diào)用時(shí),該變量已經(jīng)有值,就是上一次函數(shù)調(diào)用結(jié)束時(shí)值。這時(shí)就應(yīng)用關(guān)鍵字static指定該局部變量為“靜態(tài)局部變量”。55/64對靜態(tài)局部變量說明:(1)靜態(tài)局部變量屬于靜態(tài)存放類別,在靜態(tài)存放區(qū)內(nèi)分配存放單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存放類別,占動(dòng)態(tài)存放區(qū)空間而不占靜態(tài)存放區(qū)空間,函數(shù)調(diào)用結(jié)束后即釋放56/64對靜態(tài)局部變量說明:(2)對靜態(tài)局部變量是在編譯時(shí)賦初值,即只賦初值一次,在程序運(yùn)行時(shí)它已經(jīng)有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)值。而對自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行,而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語句。57/64對靜態(tài)局部變量說明:(3)如在定義局部變量時(shí)不賦初值話,則對靜態(tài)局部變量來說,編譯時(shí)自動(dòng)賦初值0(對數(shù)值型變量)或空字符(對字符變量)。而對自動(dòng)變量來
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025云南省本草種植合同(合同版本)
- 珍愛生命遠(yuǎn)離毒-品主題班會(huì)教案設(shè)計(jì)七篇
- 科技孵化器培育創(chuàng)新企業(yè)的搖籃
- 2024年含乳飲料項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 民族復(fù)興之路上的少民族醫(yī)藥物學(xué)振興戰(zhàn)略
- 2025年蘇人新版選修6歷史上冊月考試卷含答案
- 2025年浙教新版九年級語文下冊月考試卷
- 2025年新世紀(jì)版七年級生物上冊階段測試試卷含答案
- 2025年湘師大新版九年級英語下冊階段測試試卷含答案
- 2025年粵教滬科版八年級歷史上冊月考試卷含答案
- 《健康體檢知識(shí)》課件
- 2023年護(hù)理人員分層培訓(xùn)、考核計(jì)劃表
- 生產(chǎn)計(jì)劃主管述職報(bào)告
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
評論
0/150
提交評論