




已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
函數(shù)一、 函數(shù)的定義1、 函數(shù)概念的引入1) 舉例:計(jì)算圓面積的c程序# include void main( ) double r=5.0; double area=3.14159*r*r; printf(”圓面積為:%fn”,area);抽取計(jì)算圓面積的算法作為獨(dú)立程序段,程序可改為:1. # include 2. double CalArea( ) /26行是CalArea函數(shù)功能的描述(定義)3. double r=5.0; /這個(gè)函數(shù)只能計(jì)算半徑為5的圓的面積4. double area=3.14159*r*r;5. return area;6. 7. void main( )8. double area= CalArea( ); /執(zhí)行CalArea函數(shù)9. printf(”圓面積為:%fn”,area);10. 修改CalArea( ) 函數(shù),使半徑的值由主函數(shù)決定 1. # include 2. double CalArea( double r ) / r為函數(shù)CalArea的形式參數(shù)3. double area=3.14159*r*r;4. return area;5. 6. void main( )7. double area= CalArea( 5 ); / 5為函數(shù)CalArea的實(shí)在參數(shù)8. printf(”圓面積為:%fn”,area);9. 修改主函數(shù),使程序可以計(jì)算半徑不同的圓的面積1. # include 2. double CalArea( double r ) / r為函數(shù)CalArea的形式參數(shù)3. double area=3.14159*r*r;4. return area;5. 6. void main( )7. double radius;8. printf(”請(qǐng)輸入半徑”);9. scanf(“%f”,&radius);10. double area= CalArea( radius ); / radius為函數(shù)的實(shí)在參數(shù)11. printf(”圓面積為:%fn”,area);12. 2) 函數(shù)的作用l 降低難度及復(fù)雜度,實(shí)行分工合作,各盡其職l 便于進(jìn)行分級(jí)管理,簡(jiǎn)化程序設(shè)計(jì)3) 程序的執(zhí)行總是從main()開(kāi)始,最后總是在main() 結(jié)束(不論main()的位置) main( )aaa( );aaa( ) bbb( );bbb( ) 程序開(kāi)始 程序結(jié)束 2、 函數(shù)的定義1) 定義格式返回類型 函數(shù)名(形參表) 函數(shù)體 double Area (double r) return 3.1415*r*r ;2) 函數(shù)參數(shù)l 含義:是函數(shù)完成功能所需要的輸入信息l 參數(shù)類型:形式參數(shù) 實(shí)在參數(shù)l 組成: 形式參數(shù):類型 參數(shù)1,類型 參數(shù)2,類型 參數(shù)n 實(shí)在參數(shù):參數(shù)1,參數(shù)2,參數(shù)n3) 返回類型l 含義:函數(shù)運(yùn)行結(jié)束返回一個(gè)結(jié)果值,該值的數(shù)據(jù)類型l 類型包括:除數(shù)組外所有數(shù)據(jù)類型(默認(rèn)類型為int)4) 函數(shù)體l 含義:是函數(shù)功能的實(shí)現(xiàn)(描述)l 組成:語(yǔ)句5) 函數(shù)的類型l 無(wú)參函數(shù)/有參函數(shù) 無(wú)參函數(shù)類型 函數(shù)名() 函數(shù)體 有參函數(shù)類型 函數(shù)名(形參表) 函數(shù)體 l 無(wú)返回值/有返回值 無(wú)返回值void 函數(shù)名(形參表) return ;或 void 函數(shù)名(形參表) 有返回值返回值類型 函數(shù)名(形參表) return 表達(dá)式;3、 空函數(shù)1) 含義:函數(shù)體為空的函數(shù)2) 意義:增加程序的可讀性,便于程序的擴(kuò)充4、 return 語(yǔ)句1) 格式:return 表達(dá)式 ;表達(dá)式為可選項(xiàng)2) 作用:l 終止當(dāng)前函數(shù)的執(zhí)行,返回主調(diào)函數(shù)l 向主調(diào)函數(shù)返回一個(gè)值5、 函數(shù)原型1) 前提:所有標(biāo)識(shí)符都必須遵循“先說(shuō)明,后使用”的原則。2) 結(jié)論:因此在函數(shù)的調(diào)用前,必須有函數(shù)的說(shuō)明。3) 函數(shù)原型與函數(shù)定義的區(qū)別l 函數(shù)定義定義性說(shuō)明“從無(wú)到有”提供函數(shù)的所有信息l 函數(shù)原型參考性說(shuō)明“提供函數(shù)調(diào)用所需的接口信息”l 定義只能有一次,但聲明可以多次出現(xiàn)4) 函數(shù)原型語(yǔ)句的格式:返回類型 函數(shù)名(形參表);5) 函數(shù)能正確調(diào)用的條件:函數(shù)的定義位于調(diào)用之前 或 函數(shù)的原型位于調(diào)用之前6) 必須使用函數(shù)原型的情況l 多文件程序l 函數(shù)遞歸調(diào)用l 使用庫(kù)函數(shù)二、 函數(shù)調(diào)用1、 函數(shù)的調(diào)用1) 調(diào)用格式: 函數(shù)名(實(shí)參表);實(shí)參 出現(xiàn)在 主調(diào)函數(shù)中 形參 出現(xiàn)在 被調(diào)函數(shù)中 2) 注意:l 實(shí)參與形參的個(gè)數(shù)要相同,類型要一致(兼容),且一一對(duì)應(yīng)l 常量形參(const):函數(shù)體中不能改變?cè)撔螀⒌闹怠?) 調(diào)用方式:作為表達(dá)式(必須是有返回值的函數(shù))/ 作為語(yǔ)句調(diào)用2、 調(diào)用過(guò)程1) 參數(shù)傳遞2) 執(zhí)行函數(shù)體3) 函數(shù)返回3、 參數(shù)傳遞機(jī)制(賦值)1) 傳值調(diào)用 形式 對(duì)應(yīng)關(guān)系賦值實(shí)參 表達(dá)式(有確定值) 值形參 變量(存儲(chǔ)單元) 變量2) 傳地址調(diào)用 形式 對(duì)應(yīng)關(guān)系賦值實(shí)參 變量的地址 地址形參 變量 指針 l 數(shù)組名作為實(shí)參傳遞的是數(shù)組的首地址。三、 程序運(yùn)行時(shí)的內(nèi)存分布l 程序運(yùn)行時(shí)的內(nèi)存分布 程序代碼區(qū)全局?jǐn)?shù)據(jù)區(qū)堆 區(qū)棧 區(qū) 程序的源代碼(系統(tǒng)支配的空間) 全局變量和靜態(tài)變量(系統(tǒng)支配的空間) 由程序控制,可在運(yùn)行中由語(yǔ)句動(dòng)態(tài)分配(malloc)及回收(free) 被調(diào)用的函數(shù)信息,局部變量 (程序支配的空間) 注:紅色為數(shù)據(jù)區(qū),在全局?jǐn)?shù)據(jù)區(qū)的數(shù)據(jù),若沒(méi)初始化,自動(dòng)取值為0; 堆、棧區(qū)的數(shù)據(jù),若沒(méi)初始化,其值為隨機(jī)值。四、 函數(shù)調(diào)用的實(shí)現(xiàn)機(jī)制1、 函數(shù)調(diào)用時(shí)系統(tǒng)執(zhí)行的操作:l 建立被調(diào)用函數(shù)的??臻gl 保護(hù)斷點(diǎn)(主調(diào)函數(shù)的運(yùn)行狀態(tài)、返回地址)l 參數(shù)傳遞l 被調(diào)用函數(shù)取得程序的控制權(quán)2、 函數(shù)執(zhí)行結(jié)束后系統(tǒng)執(zhí)行的操作:l 若有返回值,將它存到一個(gè)臨時(shí)的空間l 恢復(fù)斷點(diǎn)(主調(diào)函數(shù)的運(yùn)行狀態(tài)、返回地址)l 釋放相應(yīng)(調(diào)用函數(shù)所占)的棧空間l 繼續(xù)執(zhí)行主調(diào)函數(shù)五、 作用域1、 作用域:標(biāo)識(shí)符在程序中起作用(能被使用)的范圍l 全局作用域: 始于聲明點(diǎn),終于程序(程序中一般都含有多個(gè).cpp)的結(jié)束。l 文件作用域(static):始于聲明點(diǎn),終于本文件(.cpp)結(jié)束處l 局部(塊)作用域:始于聲明點(diǎn),終于“塊”結(jié)束處2、 存儲(chǔ)屬性:1) 靜態(tài):全局變量、static變量2) 動(dòng)態(tài):堆變量、自動(dòng)變量、函數(shù)的形參、寄存器變量3、 變量的作用域1) 全局變量:在函數(shù)之外定義l 無(wú)限制:可供程序中的所有函數(shù)使用l 有限制:文件域變量-只供本文件中的所有函數(shù)使用2) 局部變量:在復(fù)合語(yǔ)句內(nèi)定義,僅能在該復(fù)合語(yǔ)句內(nèi)使用3) 覆蓋問(wèn)題:l 內(nèi)層的同名變量總是覆蓋外層的同名變量l 作用域小覆蓋作用域大的4) 歸納全局變量局部變量無(wú)限制限制:文件域在函數(shù)外定義在函數(shù)內(nèi)定義非靜態(tài)存儲(chǔ)類型(不帶static)靜態(tài)存儲(chǔ)類型(帶static)非靜態(tài)存儲(chǔ)類型(不帶static)靜態(tài)存儲(chǔ)類型(帶static)其他文件用extern加以聲明后可以使用不讓其他文件使用離開(kāi)定義它的函數(shù)后其值不保留(釋放內(nèi)存單元)離開(kāi)定義它的函數(shù)后其值仍保留(保留內(nèi)存單元)初值為0初值為隨機(jī)值初值為04、 生命期(生存期):標(biāo)識(shí)符存在(創(chuàng)建到刪除之間)的時(shí)間。l 靜態(tài)生命期: 全局變量、靜態(tài)變量 、常量特點(diǎn):編譯時(shí)分配空間,程序運(yùn)行結(jié)束才釋放空間l 動(dòng)態(tài)生命期:非靜態(tài)的局部變量棧區(qū)中的變量特點(diǎn):在函數(shù)調(diào)用時(shí)分配存儲(chǔ)單元,函數(shù)結(jié)束就釋放空間l 動(dòng)態(tài)生命期:使用malloc()等函數(shù)分配空間的變量特點(diǎn):程序運(yùn)行中隨時(shí)根據(jù)需要申請(qǐng)分配空間、釋放空間(free)5、 舉例:例1:# include stdio.hvoid fun(int ,int );void main() int a,b; /這個(gè)a,b是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到main結(jié)束() a=5;b=8; fun(a,b); printf(主函數(shù)中:a=%d,b=%dn,a,b);void fun(int a,int b) /這個(gè)a,b是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() int c; /c是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() c=a;a=b;b=c; printf(fun函數(shù)中:a=%d,b=%dn,a,b);fun也可寫成:void fun(int x,int y) /這個(gè)x,y是局部變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() int c; /c是局部變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() c=x;x=y;y=c; printf(fun函數(shù)中:a=%d,b=%dn,x,y);例2:test6_8_2.c:# include stdio.hvoid fun( );int a,b; /這個(gè)a,b是外部(全局)變量,有效范圍(作用域)在此處開(kāi)始到test6_8_2.c文件的最后一行void main() a=5;b=8; fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b);void fun() int c; /c是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() c=a;a=b;b=c; printf(fun函數(shù)中:a=%d,b=%dn,a,b);例3:程序1:a.c# include stdio.hvoid fun( );int a,b; /這個(gè)a,b是外部(全局)變量,有效范圍(作用域)在此處開(kāi)始到程序結(jié)束void main() a=5;b=8; fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b);程序2:b.cextern int a,b; /兩個(gè)函數(shù)不在同一個(gè)程序中,要使用其他程序中定義的外部(全局)變量,需要做出聲明void fun() int c; /c是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() c=a;a=b;b=c; printf(fun函數(shù)中:a=%d,b=%dn,a,b);例4:程序1:a.c# include stdio.hvoid fun( );static int a,b; /這個(gè)a,b是靜態(tài)外部(全局)變量,有效范圍(作用域)限制在a.c中void main() a=5;b=8; fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b);fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b);程序2:b.cextern int a,b; /雖然做出聲明,但無(wú)法使用a.c中定義的靜態(tài)外部變量void fun() int c; /c是內(nèi)部(局部)變量,有效范圍(作用域)在此處開(kāi)始到fun結(jié)束() c=a;a=b;b=c; printf(fun函數(shù)中:a=%d,b=%dn,a,b);例5:# include stdio.hint a,b; /這個(gè)a,b是外部(全局)變量,初始值為0,它們的作用范圍是整個(gè)程序void fun( );void main() int a,b; /這個(gè)a,b是內(nèi)部(局部)變量,初始值為隨機(jī)值 b=8; /當(dāng)外部變量和內(nèi)部變量作用范圍重合時(shí),內(nèi)部起作用 fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b); /在 main范圍中,局部變量a,b起作用void fun() a+; b-; printf(fun函數(shù)中:a=%d,b=%dn,a,b);例6:# include stdio.hvoid fun( );void main() int i; for (i=1;i1)# include double factorial(int );void main() int x; printf(求n!,請(qǐng)輸入n值:); scanf(“%d”, &x); printf(%d !=%f n, x , factorial(x)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 班會(huì)課件-傾聽(tīng)
- 《污水處理廠設(shè)計(jì)與運(yùn)行》課件
- 《流體動(dòng)力學(xué)圖像處理》課件
- 藥用植物與生藥學(xué)練習(xí)題含答案(附解析)
- 北歐簡(jiǎn)約風(fēng)格室內(nèi)設(shè)計(jì)解析
- 2024年8月工程安全管理基礎(chǔ)測(cè)試題與答案(附解析)
- 7月獸醫(yī)微生物學(xué)習(xí)題庫(kù)及參考答案解析
- 搪瓷裝飾制品在校園文化墻的設(shè)計(jì)考核試卷
- 公路幾何設(shè)計(jì)案例分析
- 服裝設(shè)計(jì)企劃全案
- GA 374-2019電子防盜鎖
- 江蘇蘇州工業(yè)園區(qū)司法工作辦公室招考聘用輔助人員3人模擬試卷【共500題附答案解析】
- 人工髖關(guān)節(jié)置換術(shù)后的護(hù)理 課件
- 九州通集團(tuán)簡(jiǎn)介
- 質(zhì)量工藝問(wèn)題反饋單模板
- 2022-2023學(xué)年人教版選擇性必修3 3.4 第1課時(shí) 羧酸 學(xué)案
- 2022年浙江小升初科學(xué)試卷及評(píng)分標(biāo)準(zhǔn)答案
- 移液器(槍)容量?jī)?nèi)部校核記錄
- 市場(chǎng)管理及產(chǎn)品規(guī)劃課件培訓(xùn)課件(PPT-202張)
- 公共場(chǎng)所衛(wèi)生 可吸入顆粒物PM10 方法驗(yàn)證報(bào)告
- 標(biāo)準(zhǔn)作業(yè)指導(dǎo)書(SOP)培訓(xùn)PPT課件
評(píng)論
0/150
提交評(píng)論