




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第5 5講講 使用函數封使用函數封裝代碼裝代碼本講學習內容:本講學習內容:v函數及其組成函數及其組成v使用函數的結構化編程的優點使用函數的結構化編程的優點v如何創建函數如何創建函數v如何在函數中聲明局部變量如何在函數中聲明局部變量v如何從函數將值返回給程序如何從函數將值返回給程序v如何給函數傳遞參數如何給函數傳遞參數5.1 函數是什么函數是什么v函數的定義函數是一個被命名的、獨立的代碼段,它執行特定的任務,并可能可能給調用它的程序返回一個值。函數是什么函數是什么v函數的用法參見程序ch5cube.c。5.2 自頂向下的方法自頂向下的方法v采用結構化編程時,可以選用自頂向下的方法。v程序的大多
2、數實際工作是由位于樹枝末梢的函數完成,位于“主干”附件的函數主要用于引導程序執行這些函數。v要求編寫代碼之前一定要進行規劃,預先確定程序的結構可以節省編寫和調試代碼的時間。5.3 函數的工作原理函數的工作原理v僅當函數被程序的其他部分調用后,函數中的語句才會被執行。v調用函數時,程序可以通過一個或多個參數參數給它傳遞信息,然后執行函數中的語句,完成設計任務。v函數中的語句執行完畢后,控制權控制權將返回給調用函數的地方。v函數能夠以返回值返回值的方式將信息返回給程序。函數的工作原理函數的工作原理main() call func1() call func2() call func3() func1
3、 () func2 () func3 () 5.4 編寫函數編寫函數v函數頭v函數的返回類型v函數名v參數列表v函數體v函數原型5.4.1 函數頭函數頭v每個函數的第一行都是函數頭,函數頭由三部分組成,其中每一部分完成特定的功能。type function-name ( parm1,. )函數的返回類型函數名參數列表5.4.2 函數的返回類型函數的返回類型v函數的返回類型指定了函數返回給調用程序的數據類型。例如:int func1()/* Returns a type int. */float func2()/* Returns a type float. */void func3()/* R
4、eturns nothing. */5.4.3 函數名函數名v遵循變量名規則,可以為函數命名為任何名稱。v在一個具體的C程序中,函數名必須唯一。v建議給函數指定一個描述其功能的名稱。5.4.4 參數列表參數列表v函數通過參數來接受外界傳入的值,其參數類型信息由函數頭中的參數列表提供。例如:long cube(long x)void func1(int x, float y, char z)int func2(void)形參與實參形參與實參v形參(parameter)位于函數頭,是實參的一個占位符。函數的形參是固定的,在程序執行期間不會變化。v實參(argument)是調用程序傳遞給函數的實際值
5、。每次調用函數時,可以傳遞不同的參數。v關系:函數通過相應的形參名來訪問實參。v形式參數與實際參數的關系形式參數與實際參數的關系v形式參數在函數中是變量名形式參數在函數中是變量名,在函數調用時在函數調用時,形參被分形參被分配相應的內存。配相應的內存。v實際參數是表達式負責向對應的形參標識的內存單實際參數是表達式負責向對應的形參標識的內存單元傳遞數據。元傳遞數據。v實參與形參必須實參與形參必須個數相同個數相同。v對應的形參和實參的對應的形參和實參的類型類型必須必須一致一致。v形參和實參之間的關系是形參和實參之間的關系是: 單向的值的傳遞單向的值的傳遞主調函數中有如下語句主調函數中有如下語句: s
6、canf(%d,%d,&a,&b); m=max(a,b+3);如果輸入如果輸入 6,2函數函數 int max(int a,int b)形參形參 a 得到第一個實際參數得到第一個實際參數a的值的值 6形參形參 b 得到第二個實際參數得到第二個實際參數b+3的值的值 5例如例如形參與實參的區別形參與實參的區別參見程序ch5list1.c。形參與實參形參與實參v第一次調用 z = half_of(x); float half_of(float k)3.5實參形參v第二次調用 z = half_of(y); float half_of(float k)65.11實參形參5.4.5
7、函數體函數體v局部變量v函數的語句v返回值1. 局部變量局部變量v在函數體中聲明的變量,稱之為局部變量局部變量,該變量是該函數私有的。v聲明局部變量的方式和其他變量相同,可以聲明任何類型的變量。int func1(int y)int a, b = 10;float rate;double cost = 12.55;/* function code goes here */演示局部變量演示局部變量參見程序ch5var.c。2. 函數的語句函數的語句v函數幾乎可以包含任何語句,在函數中唯一不能做的是定義另一個函數,但可以使用其他任何語句,包括調用函數。3. 返回一個值返回一個值v要從函數返回一個值
8、,可以使用關鍵字return,并在后面加上一個表達式。int func1(int var)int x;/* Function code goes here */return x;返回一個值返回一個值v函數可以包含多條return語句,但只有一條被執行的return語句對程序有影響。v參見程序ch5return.c。5.4.6 函數原型函數原型v使用用戶定義的每個函數,程序都應包含一個原型。其功能是將有關函數的信息告知編譯器。v函數原型和函數頭相同,只是后面多了一個分號。5.5 將參數傳遞給函數將參數傳遞給函數v要將參數傳遞給函數,可將它們放在函數名的后面,并用圓括號括起。v參數的數目與類型必須
9、同函數頭和函數原型中的形參匹配。int a,b,c;函數調用函數調用func1(a, b, c);函數頭函數頭 void func1(int x, int y, int z)將參數傳遞給函數將參數傳遞給函數v每個參數都是可以任何合法的表達式:常量、變量、數學表達式,甚至可以是另一個函數(返回一個值的函數)。例如:half()、square()和third()均為有返回值的函數,則可以這樣編寫代碼:x half(third(square(half(y);5.6 調用函數調用函數v調用函數的方式有兩種:對于任何函數對于任何函數,都可以使用其名稱和參數列表進行調用。僅適用于有返回值的函數僅適用于有返
10、回值的函數,即為合法的表達式,可用于任何能使用表達式的地方。wait(12);printf(“Half of %d is %d”, x, half_of(x);a = half_of(x);if( half_of(x) 10)遞歸遞歸v遞歸指的是函數直接或間接調用自己。v間接遞歸指的是一個函數調用另一個函數,而后者又調用前者。使用遞歸函數計算階乘使用遞歸函數計算階乘例如,x的階乘表示為x!,計算方法如下: x! = x * (x-1) * (x-2) * (x-3)* (2) * 1然而,也可以這樣計算x!: x! = x * (x-1)!然后,可以使用同樣的方法計算x-1的階乘: (x-1)! = (x-1) * (x-2)!可以不斷地以遞歸的方式計算下去,直到1。參見程序ch5recurse.c。5.7 函數的位置函數的位置v就目前水平而言,函數定義位于main()函數所在的源代碼文件中,并位于main()函數的后面。函數原型函數原型void func1(int x, int y, int z);int main(void)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于SaaS模式的在線教育平臺教學質量監控報告
- 學校教務處個人計劃怎么寫10篇
- 校園里的號令教案一年級上冊道德與法治
- 揭開生命奧義找出屬于你的天賦才能
- 雄飛國際新城弱電方案設計
- 農村土地流轉現狀下規范化管理的土地流轉政策宣傳效果評價方法創新與實踐報告
- 發射基地保密協議書
- 小學一年級上冊地方安全教育教案
- 2025年初級會計實務考試核心考點試題及答案
- 雙擁共建簽約協議書
- 文學理論·第九章文學活動的發生和發展-課件
- 個人不擔當不作為問題清單及整改措施
- 第五章?商務談判的法律規定
- 2024年賈玲張小斐《上學那些事》(手稿)臺詞劇本完整版
- 田賽高度成績記錄表
- 小學六年級數學計算題100道(含答案)
- 上海市單位退工證明退工單
- 《企業財務現狀的杜邦分析-以大疆科技為例》開題報告(含提綱)2400字
- 2023屆高考模擬作文“人生有兩段路要走”漫畫作文導寫及范文
- YS/T 778-2011真空脫脂燒結爐
- GB/T 30776-2014膠粘帶拉伸強度與斷裂伸長率的試驗方法
評論
0/150
提交評論