輔導(dǎo)5-函數(shù).doc_第1頁
輔導(dǎo)5-函數(shù).doc_第2頁
輔導(dǎo)5-函數(shù).doc_第3頁
輔導(dǎo)5-函數(shù).doc_第4頁
輔導(dǎo)5-函數(shù).doc_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

函數(shù)一、 函數(shù)的定義1、 函數(shù)概念的引入1) 舉例:計算圓面積的c程序# include void main( ) double r=5.0; double area=3.14159*r*r; printf(”圓面積為:%fn”,area);抽取計算圓面積的算法作為獨立程序段,程序可改為:1. # include 2. double CalArea( ) /26行是CalArea函數(shù)功能的描述(定義)3. double r=5.0; /這個函數(shù)只能計算半徑為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ù)8. printf(”圓面積為:%fn”,area);9. 修改主函數(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 radius;8. printf(”請輸入半徑”);9. scanf(“%f”,&radius);10. double area= CalArea( radius ); / radius為函數(shù)的實在參數(shù)11. printf(”圓面積為:%fn”,area);12. 2) 函數(shù)的作用l 降低難度及復(fù)雜度,實行分工合作,各盡其職l 便于進行分級管理,簡化程序設(shè)計3) 程序的執(zhí)行總是從main()開始,最后總是在main() 結(jié)束(不論main()的位置) main( )aaa( );aaa( ) bbb( );bbb( ) 程序開始 程序結(jié)束 2、 函數(shù)的定義1) 定義格式返回類型 函數(shù)名(形參表) 函數(shù)體 double Area (double r) return 3.1415*r*r ;2) 函數(shù)參數(shù)l 含義:是函數(shù)完成功能所需要的輸入信息l 參數(shù)類型:形式參數(shù) 實在參數(shù)l 組成: 形式參數(shù):類型 參數(shù)1,類型 參數(shù)2,類型 參數(shù)n 實在參數(shù):參數(shù)1,參數(shù)2,參數(shù)n3) 返回類型l 含義:函數(shù)運行結(jié)束返回一個結(jié)果值,該值的數(shù)據(jù)類型l 類型包括:除數(shù)組外所有數(shù)據(jù)類型(默認(rèn)類型為int)4) 函數(shù)體l 含義:是函數(shù)功能的實現(xiàn)(描述)l 組成:語句5) 函數(shù)的類型l 無參函數(shù)/有參函數(shù) 無參函數(shù)類型 函數(shù)名() 函數(shù)體 有參函數(shù)類型 函數(shù)名(形參表) 函數(shù)體 l 無返回值/有返回值 無返回值void 函數(shù)名(形參表) return ;或 void 函數(shù)名(形參表) 有返回值返回值類型 函數(shù)名(形參表) return 表達式;3、 空函數(shù)1) 含義:函數(shù)體為空的函數(shù)2) 意義:增加程序的可讀性,便于程序的擴充4、 return 語句1) 格式:return 表達式 ;表達式為可選項2) 作用:l 終止當(dāng)前函數(shù)的執(zhí)行,返回主調(diào)函數(shù)l 向主調(diào)函數(shù)返回一個值5、 函數(shù)原型1) 前提:所有標(biāo)識符都必須遵循“先說明,后使用”的原則。2) 結(jié)論:因此在函數(shù)的調(diào)用前,必須有函數(shù)的說明。3) 函數(shù)原型與函數(shù)定義的區(qū)別l 函數(shù)定義定義性說明“從無到有”提供函數(shù)的所有信息l 函數(shù)原型參考性說明“提供函數(shù)調(diào)用所需的接口信息”l 定義只能有一次,但聲明可以多次出現(xiàn)4) 函數(shù)原型語句的格式:返回類型 函數(shù)名(形參表);5) 函數(shù)能正確調(diào)用的條件:函數(shù)的定義位于調(diào)用之前 或 函數(shù)的原型位于調(diào)用之前6) 必須使用函數(shù)原型的情況l 多文件程序l 函數(shù)遞歸調(diào)用l 使用庫函數(shù)二、 函數(shù)調(diào)用1、 函數(shù)的調(diào)用1) 調(diào)用格式: 函數(shù)名(實參表);實參 出現(xiàn)在 主調(diào)函數(shù)中 形參 出現(xiàn)在 被調(diào)函數(shù)中 2) 注意:l 實參與形參的個數(shù)要相同,類型要一致(兼容),且一一對應(yīng)l 常量形參(const):函數(shù)體中不能改變該形參的值。3) 調(diào)用方式:作為表達式(必須是有返回值的函數(shù))/ 作為語句調(diào)用2、 調(diào)用過程1) 參數(shù)傳遞2) 執(zhí)行函數(shù)體3) 函數(shù)返回3、 參數(shù)傳遞機制(賦值)1) 傳值調(diào)用 形式 對應(yīng)關(guān)系賦值實參 表達式(有確定值) 值形參 變量(存儲單元) 變量2) 傳地址調(diào)用 形式 對應(yīng)關(guān)系賦值實參 變量的地址 地址形參 變量 指針 l 數(shù)組名作為實參傳遞的是數(shù)組的首地址。三、 程序運行時的內(nèi)存分布l 程序運行時的內(nèi)存分布 程序代碼區(qū)全局?jǐn)?shù)據(jù)區(qū)堆 區(qū)棧 區(qū) 程序的源代碼(系統(tǒng)支配的空間) 全局變量和靜態(tài)變量(系統(tǒng)支配的空間) 由程序控制,可在運行中由語句動態(tài)分配(malloc)及回收(free) 被調(diào)用的函數(shù)信息,局部變量 (程序支配的空間) 注:紅色為數(shù)據(jù)區(qū),在全局?jǐn)?shù)據(jù)區(qū)的數(shù)據(jù),若沒初始化,自動取值為0; 堆、棧區(qū)的數(shù)據(jù),若沒初始化,其值為隨機值。四、 函數(shù)調(diào)用的實現(xiàn)機制1、 函數(shù)調(diào)用時系統(tǒng)執(zhí)行的操作:l 建立被調(diào)用函數(shù)的棧空間l 保護斷點(主調(diào)函數(shù)的運行狀態(tài)、返回地址)l 參數(shù)傳遞l 被調(diào)用函數(shù)取得程序的控制權(quán)2、 函數(shù)執(zhí)行結(jié)束后系統(tǒng)執(zhí)行的操作:l 若有返回值,將它存到一個臨時的空間l 恢復(fù)斷點(主調(diào)函數(shù)的運行狀態(tài)、返回地址)l 釋放相應(yīng)(調(diào)用函數(shù)所占)的??臻gl 繼續(xù)執(zhí)行主調(diào)函數(shù)五、 作用域1、 作用域:標(biāo)識符在程序中起作用(能被使用)的范圍l 全局作用域: 始于聲明點,終于程序(程序中一般都含有多個.cpp)的結(jié)束。l 文件作用域(static):始于聲明點,終于本文件(.cpp)結(jié)束處l 局部(塊)作用域:始于聲明點,終于“塊”結(jié)束處2、 存儲屬性:1) 靜態(tài):全局變量、static變量2) 動態(tài):堆變量、自動變量、函數(shù)的形參、寄存器變量3、 變量的作用域1) 全局變量:在函數(shù)之外定義l 無限制:可供程序中的所有函數(shù)使用l 有限制:文件域變量-只供本文件中的所有函數(shù)使用2) 局部變量:在復(fù)合語句內(nèi)定義,僅能在該復(fù)合語句內(nèi)使用3) 覆蓋問題:l 內(nèi)層的同名變量總是覆蓋外層的同名變量l 作用域小覆蓋作用域大的4) 歸納全局變量局部變量無限制限制:文件域在函數(shù)外定義在函數(shù)內(nèi)定義非靜態(tài)存儲類型(不帶static)靜態(tài)存儲類型(帶static)非靜態(tài)存儲類型(不帶static)靜態(tài)存儲類型(帶static)其他文件用extern加以聲明后可以使用不讓其他文件使用離開定義它的函數(shù)后其值不保留(釋放內(nèi)存單元)離開定義它的函數(shù)后其值仍保留(保留內(nèi)存單元)初值為0初值為隨機值初值為04、 生命期(生存期):標(biāo)識符存在(創(chuàng)建到刪除之間)的時間。l 靜態(tài)生命期: 全局變量、靜態(tài)變量 、常量特點:編譯時分配空間,程序運行結(jié)束才釋放空間l 動態(tài)生命期:非靜態(tài)的局部變量棧區(qū)中的變量特點:在函數(shù)調(diào)用時分配存儲單元,函數(shù)結(jié)束就釋放空間l 動態(tài)生命期:使用malloc()等函數(shù)分配空間的變量特點:程序運行中隨時根據(jù)需要申請分配空間、釋放空間(free)5、 舉例:例1:# include stdio.hvoid fun(int ,int );void main() int a,b; /這個a,b是內(nèi)部(局部)變量,有效范圍(作用域)在此處開始到main結(jié)束() a=5;b=8; fun(a,b); printf(主函數(shù)中:a=%d,b=%dn,a,b);void fun(int a,int b) /這個a,b是內(nèi)部(局部)變量,有效范圍(作用域)在此處開始到fun結(jié)束() int c; /c是內(nè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) /這個x,y是局部變量,有效范圍(作用域)在此處開始到fun結(jié)束() int c; /c是局部變量,有效范圍(作用域)在此處開始到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; /這個a,b是外部(全局)變量,有效范圍(作用域)在此處開始到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)部(局部)變量,有效范圍(作用域)在此處開始到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; /這個a,b是外部(全局)變量,有效范圍(作用域)在此處開始到程序結(jié)束void main() a=5;b=8; fun(); printf(主函數(shù)中:a=%d,b=%dn,a,b);程序2:b.cextern int a,b; /兩個函數(shù)不在同一個程序中,要使用其他程序中定義的外部(全局)變量,需要做出聲明void fun() int c; /c是內(nè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; /這個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; /雖然做出聲明,但無法使用a.c中定義的靜態(tài)外部變量void fun() int c; /c是內(nèi)部(局部)變量,有效范圍(作用域)在此處開始到fun結(jié)束() c=a;a=b;b=c; printf(fun函數(shù)中:a=%d,b=%dn,a,b);例5:# include stdio.hint a,b; /這個a,b是外部(全局)變量,初始值為0,它們的作用范圍是整個程序void fun( );void main() int a,b; /這個a,b是內(nèi)部(局部)變量,初始值為隨機值 b=8; /當(dāng)外部變量和內(nèi)部變量作用范圍重合時,內(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!,請輸入n值:); scanf(“%d”, &x); printf(%d !=%f n, x , factorial(x)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論