




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+ 程序設計程序設計第2篇 基于過程的程序設計第4章 利用函數實現指定的功能銅陵學院 汪永生目錄4.1 什么是函數4.2 定義函數的一般形式4.3 函數參數和函數的值4.4 函數的調用4.5 函數的嵌套調用4.6 函數的遞歸調用4.7 內置函數4.8 函數的重載4.9 函數模板4.10 有默認參數的函數4.11 局部變量和全局變量4.12 變量的存儲類別4.13 變量屬性小結4.14 關于變量的聲明和定義4.15 內部函數和外部函數4.16 頭文件第4章 利用函數實現指定的功能 4.1什么是函數4.1.1 為什么需要函數4.1.2 函數調用舉例一個過程化的程序中函數調用的示意圖。mainad
2、cbfeghchgi第4章 利用函數實現指定的功能 4.1什么是函數4.1.2 函數調用舉例例例4.1 4.1 編寫程序輸出如下結果。* Welcome to C+!*第4章 利用函數實現指定的功能 4.1什么是函數4.1.3 函數的分類函數系統函數(庫函數)自定義函數無參數函數有參數函數第4章 利用函數實現指定的功能 4.2 定義函數的一般形式4.2.1 定義無參函數的一般形式類型名 函數名(void) 聲明部分 執行語句例如:void printstar()4.2.2 定義有參函數的一般形式類型名 函數名(形式參數表列) 聲明部分 執行語句例如:第4章 利用函數實現指定的功能 4.3 函數
3、參數和函數的值4.3.1 形式參數和實際參數形式參數:在定義函數時函數名后面括號中的變量名稱。實際參數:在主調函數中調用一個函數時,函數名后面括號中的參數(或是一個表達式)例例4.2 4.2 求兩個整數中的大者,用函數調用實現。第4章 利用函數實現指定的功能 4.3 函數參數和函數的值4.3.1 形式參數和實際參有關形參與實參的說明:有關形參與實參的說明:(1)形式未調用之前不占內存,調用時分配內存單元,調用結束釋放所占內存單元;(2)實參可以是常量、變量或表達式;(3)定義函數時,必須在函數首部指定形參的類型;(4)實參與形參的類型應相同或賦值兼容;(5)實參變量對形參變量的數據傳遞是“值傳
4、遞”,即單向傳遞,實參傳給形參,形參不能傳回實參。第4章 利用函數實現指定的功能 4.3 函數參數和函數的值4.3.2 函數的返回值函數返回值:通過函數的調用使主調函數能得到一個確定的函數值。說說明:明:(1)函數的返回值是通過函數中的return語句獲得的;(2)函數值的類型;如:(3)如果函數值的類型和return語句中表達式的值不一致,則以函數類型為準,即函數類型判定返回值的類型;第4章 利用函數實現指定的功能 4.4 函數的調用4.4.1 函數調用的一般形式函數名(實參表列4.4.2 函數調用的方式函數調用方式函數語句如:printstar()函數表達式如:c=2*max(a,b)函數
5、參數如:=(,()第4章 利用函數實現指定的功能 4.4 函數的調用4.4.3 對被調用函數的聲明和函數原型一個函數中調用另一函數具備條件:(1)被調函數必須已經存在的函數(庫函數或者用戶自定義函數)(2)庫函數(#include )(3)自定義函數調用之前必須先聲明函數聲明: 在函數尚未定義的情況下,事先將該函數的有關信息通知編譯系統,以便編譯能正常進行。例例4.3 4.3 向計算機輸入兩個整數,用一個函數求出兩數之和。第4章 利用函數實現指定的功能 4.4 函數的調用4.4.3 對被調用函數的聲明和函數原型注注:對函數的定義和聲明是有區別的。函數原型作用函數原型作用:根據函數原型在程序編譯
6、階段對調函數的合法性進行全面檢查。函數原型一般形式函數原型一般形式:(1)函數類型 函數名(參數類型1,參數類型2);(2)函數類型 函數名(參數類型1 參數名1,參數類型2 參數名2);說明:第4章 利用函數實現指定的功能 4.5 函數的嵌套調用C+不允許函數作嵌套定義,即一個函數中不能完整地包含另一個函數,在一個程序程序中每一個函數的定義都是平行和獨立的。第4章 利用函數實現指定的功能 4.5 函數的嵌套調用圖4.5表示的兩層嵌套(加上main函數共3層)的執行過程:第4章 利用函數實現指定的功能 4.5 函數的嵌套調用例4.4 輸入4個整數,找出其中最大的數。用一個函數來實現。第4章 利
7、用函數實現指定的功能 4.6 函數的遞歸調用函數的遞歸(recursive)調用: 在調用一個函數的過程中又出現直接或間接調用該函數本身。遞歸函數:包含遞歸調用的函數。例如:f()調用f()f2()f1()調用f2()調用f1()直接調用直接調用間間接調用接調用第4章 利用函數實現指定的功能 4.6 函數的遞歸調用例4.5第4章 利用函數實現指定的功能 4.6 函數的遞歸調用例4.5第4章 利用函數實現指定的功能 4.6 函數的遞歸調用例4.5第4章 利用函數實現指定的功能第4章 利用函數實現指定的功能 4.7 內置函數函數調用過程:函數調用過程:(1)程序先執行函數調用之前的語句;(2)流程
8、的控制轉移到被調用函數的入口處,同時進行參數傳遞;(3)執行被調用函數中函數體的語句;(4)流程返回調用函數的下一條指令處,將函數返回值帶回;(5)接著執行主調函數中未執行的語句。a函數函數調調用用a函數函數結束結束main函數函數12345a函數體語句函數體語句第4章 利用函數實現指定的功能 4.7 內置函數內置函數(inline fuction):C+系統編譯時將所調用的代碼直接嵌入到主調函數中,而不是將流程轉出。指定內置函數方法:在函數首行的左端加inline例例4.7 4.7 函數指定為內置函數第4章 利用函數實現指定的功能 4.8 函數的重載函數重載(fuction overload
9、ing):C+允許用同一函數名定義多個函數,而這些函數的參數個數和參數類型可以不相同。例例4.8 4.8 求3個數中最大的數(分別考慮整數、長精度數、長整數的情況), 用函數重載的方法。第4章 利用函數實現指定的功能 4.8 函數的重載例例4.9 4.9 編寫一個程序,用來求兩個整數或3個整數中的最大者。如果輸入兩個整數,程序就輸出這兩個整數中的最大者,如果輸入3個整數,程序則輸出這3個整數中的最大者。注:注:函數重載時,參數個數、參數類型或參數順序三者必須至少有一種不同。int f(int); 錯誤錯誤long f(int); 錯誤void f(int); 錯誤第4章 利用函數實現指定的功能
10、 4.9 函數模板函數模板(函數模板(function templatefunction template): :一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型來代表。例例4.10 4.10 將例4.9程序改為通過函數模板來實現。定義函數模板一般形式:template 通通用函數定義用函數定義或:template 通用函數定義通用函數定義適用于1.函數體相同;函數體相同;2.函數參數個數相同函數參數個數相同3.參數類型不同參數類型不同第4章 利用函數實現指定的功能 4.10 有默認參數的函數指定默認值的參數必須放在形參表列中的最右端,如:例4.11 求兩個或3個正整數中的最大數
11、,用 帶有默認參數的函數實現。 void f1(float a, int b=0,int c, char d=a);不正確不正確 void f2(float a, int c, int b=0,char d=a);正確注:注:(1)如果函數的定義在函數調用之前,則應在函數定義中給出默認值。(2)一個函數不能既作為重載函數,又作為有默認參數的函數。第4章 利用函數實現指定的功能 4.11 局部變量和全局變量4.11.1 局部變量 局部變量局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內,離開該函數后再使用這種變量是非法的。第4章 利用函數實現指定的功能 4.11 局部
12、變量和全局變量4.11.2 全局變量 局部變量:局部變量:也在函數之外定義的變量。全局變量有效范圍為從定義變量的位置開始到本源文件結束。如:變量作用域文件作用域函數作用域塊作用域函數原型作用域全局局部第4章 利用函數實現指定的功能 4.12 變量的存儲類別4.12.1 動態存儲方式與靜態存儲方式 變量存儲期:是指變量在內存中的存在周期。分為靜態存儲期靜態存儲期和動態存儲期動態存儲期。 靜態存儲方式:是指在程序運行期間,系統對變量分配固定的存儲空間。 動態存儲方式:在程序運行期間,系統對變量動態地分配存儲空間。 變量存儲類別:自動的(auto)、靜態的(static)、寄存器的(register
13、)、外部的(extern)。變量存儲方式靜態存儲方式全局變量動態存儲方式函數形式參數函數中定義的變量(未加static)函數調用現場保護和返回地址等第4章 利用函數實現指定的功能 4.12 變量的存儲類別4.12.2 自動變量 在函數內部用關鍵字auto對定義變量作存儲類別的聲明,系統默認聲明變量為自動變量,關鍵字auto可不寫。4.12.3 用static聲明靜態局部變量 靜態局部變量:函數中的局部變量的值在函數調用結束后不消失而保留原來值,即其所占用的存儲空間單元不釋放,在下一次該函數調用時,該變量保留上一次調用結束時的值。說明:說明:(1)靜態局部變量在靜態存儲區內分配存儲單元。(2)對
14、靜態局部變量在編譯時賦初值。(3)不賦值時,編譯時自動對靜態局部變量賦初值0或空字符。(4)對其他函數是“不可見”。第4章 利用函數實現指定的功能 4.12 變量的存儲類別4.12.4 用register聲明寄存器變量 C+允許將局部變量的值放在CPU的寄存器中,需要時直接從寄存器取出參與運算,不必再到內存中去存取。用關鍵字register作聲明。4.12.5 用extern聲明外部變量1.在一個文件內聲明全局變量 如果外部變量不在文件的開頭定義,其有效作用范圍只限于定義的位置起到文件終了的位置止。例例4.14 4.14 用extern對外部變量作提前引用聲明,以擴展程序文件中的作用域。第4章
15、 利用函數實現指定的功能 4.12 變量的存儲類別4.12.5 用extern聲明外部變量2.在多文件的程序中聲明外部變量 使用方法:在任一文件中定義外部變量,而在其他文件中用extern作外部變量聲明。4.12.6 用static聲明靜態外部變量作用:外部變量只限于被本文件引用,而不能被其他文件引用。第4章 利用函數實現指定的功能 4.13 變量屬性小結變量屬性存儲類別autostaticregisterextern作用域局部變量自動變量局部變量寄存器變量形式參數全局變量靜態外部變量外部變量存儲期動態存儲自動變量寄存器變量形式參數靜態存儲靜態局部變量靜態外部變量外部變量第4章 利用函數實現指
16、定的功能 4.13 變量屬性小結變量可見性:如果一個變量在某個文件或函數范圍內是有效的,則稱該文件或函數為該變量的作用域,在此作用域內可以引用該變量,所以又稱變量在此作用域“可見”。變量存在性:如果一個變量值在某一時刻是存在的,則認為這一時刻屬于變量的存儲期,或稱該變量在此時刻“存在”。變量存儲類別變量存儲類別函數內函數內函數外函數外作用域(可見性)作用域(可見性)存在性存在性作用域(可見性)作用域(可見性)存在性存在性自動變量和寄存器變量靜態局部變量靜態外部變量(只限本文件)外部變量表4.2 變量的作用域和存在性第4章 利用函數實現指定的功能 4.14 關于變量的聲明和定義(1)函數的聲明是
17、函數的原型,函數的定義是函數功能的確立。(2)建立存儲空間的聲明稱為定義;不需要建立存儲空間的聲明稱為聲明。(3)外部變量定義只能定義一次,它的位置在所有函數之,而同一文件中的外部變量的聲明可以有多次,位置函數里或函數外。(4)用static來聲明一個變量的作用:對局部變量用static聲明,使該變量在本函數調用結束后不釋放,整個程序執行期間始終存在,使其存儲期為程序的全過程;全局變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)(5)用auto,register,static聲明變量時,是在定義變量的基礎上加上這些關鍵字,而不能單獨使用。第4章 利用函數實現指定的功能 4.15 內部函數和外部函數4.15.1 內部函數 內部函數內部函數:又稱靜態函數,即一個函數只能被本文件中其他函數所調用的函數。 內部函數一般格式為: static 類型標識符 函數名(形參表)4.15.2 外部函數(1)外部函數外部函數:在定義函數時,如果在函數首部的最左端以關鍵字extern,則表示此函數是外部函數,可供其他文件調用。(2)在需要調用此函數的文件中,用extern聲明所用的函數是外部函數。例例 4.15 4.15 輸入兩個整數,要求輸出其中的大者。用外部函數
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 疫苗研發的新技術、新材料考核試卷
- 淀粉行業的市場銷售與銷售管理考核試卷
- 自然資源在幼兒園課程中的有效運用
- 重癥醫學科護理教學計劃
- 臀部塑形操課件
- 2025保險公司借款合同樣本
- 2025辦公場所租賃合同范本
- 2025裝飾合同范文
- 2025建筑工程合同范本3
- 2025YY經濟適用房買賣合同
- GB/T 3785.3-2018電聲學聲級計第3部分:周期試驗
- GB/T 28462-2012機織起絨合成革基布
- 接觸網工復習題庫及答案
- 兒童泌尿道感染(課堂PPT)
- 全國壓力容器設計單位名錄
- 特變電工-財務報表分析課件
- 人民醫院人才隊伍建設規劃人才隊伍建設五年規劃
- 一年級語文下冊課件-21 小壁虎借尾巴24-部編版(15張PPT)
- 患者隨訪率低原因分析以及對策
- 計量認證實驗室程序文件(全套)
- DGC型瓦斯含量直接測定裝置使用說明書
評論
0/150
提交評論