版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第7章 函數(shù),本章要點: 7.1 庫函數(shù) 7.2 函數(shù)的定義和返回值 7.3 函數(shù)的調(diào)用 7.4 函數(shù)的說明 7.5 調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞,7.1 庫函數(shù) 1函數(shù)的概念 函數(shù)從本質(zhì)上來說就是完成一定功能程序段,有一個名字叫函數(shù)名。若有其它程序要完成該函數(shù)的功能,可通過函數(shù)名調(diào)用它,函數(shù)可多次反復調(diào)用。引入函數(shù)主要是解決兩個問題:一是為了解決代碼的重復。如有一個程序段在程序中要出現(xiàn)很多次,每次都要寫出來既非常麻煩又使程序顯得很長,此時就可以把該程序段定義成一個函數(shù),在使用該程序段的地方直接調(diào)用該函數(shù)就可以了;二是結(jié)構(gòu)化、模塊化編程的需要。,建立函數(shù)的過程稱“函數(shù)的定義”,在程序中使
2、用函數(shù)稱“函數(shù)的調(diào)用”。被調(diào)用的函數(shù)稱“被調(diào)函數(shù)”,而調(diào)用函數(shù)的函數(shù)稱“主調(diào)函數(shù)”。在C程序中,main()可以調(diào)用任何非主函數(shù),非主函數(shù)可以調(diào)有非主函數(shù)也可被其它函數(shù)調(diào)用但不能調(diào)用main()函數(shù),也就是說main()只能作用主調(diào)函數(shù)。一般情況下,函數(shù)對數(shù)據(jù)進行加工,最后得到一個結(jié)果作為函數(shù)的返回值。 根據(jù)不同的方法,函數(shù)可以分成不同的種類。如從使用的角度來看,可以把函數(shù)分成用戶函數(shù)和系統(tǒng)函數(shù);從定義時有無參數(shù)來分,可分為有參函數(shù)和無參函數(shù);根據(jù)函數(shù)調(diào)用時是否有返回值來分,可分為有返回值的函數(shù)和無返回值的函數(shù);根據(jù)函數(shù)的作用范圍來分,可分成內(nèi)部函數(shù)和外部函數(shù)。,2庫函數(shù) C語言提供了豐富的庫
3、函數(shù),包括常用的數(shù)學函數(shù),字符、字符串處理函數(shù),輸入輸出函數(shù)等,用戶在編寫程序時可以直接調(diào)用這些已有的庫函數(shù)。以下是關(guān)于庫函數(shù)調(diào)用的幾點說明: (1)調(diào)用C語言標準庫函數(shù)時要求用include命令 對每一類庫函數(shù),都有其相應的頭文件名,調(diào)用某個庫函數(shù)時,用戶在源程序中須用include命令包含其頭文件名。一般形式為: #include 或#include “頭文件名.h”,(2)標準庫函數(shù)的調(diào)用 庫函數(shù)調(diào)用的一般形式為: 函數(shù)名(參數(shù)表) C語言中庫函數(shù)的調(diào)用有兩種方式: 在表達式中調(diào)用。如: x=pow(2),就是在賦值表達式中調(diào)用pow函數(shù)來求x的值。 作為獨立的語句完成某種操作。如: p
4、rintf(“*,就是調(diào)用了printf函數(shù),且調(diào)用之后加了分號,構(gòu)成了一條獨立的語句,完成該輸出操作。 (3)各個庫函數(shù)的功能、參數(shù)的個數(shù)和類型、函數(shù)值的類型都有其規(guī)定,用戶在調(diào)用時根據(jù)需要選擇合適的庫函數(shù),并嚴格按照該庫函數(shù)的規(guī)則,正確的進行調(diào)用。 重點提示:庫函數(shù)的調(diào)用需要注意的是:函數(shù)的功能,函數(shù)的參數(shù)個數(shù)、類型,函數(shù)的返回值,對參數(shù)的一些特殊要求。,7.2 函數(shù)的定義和返回值 1函數(shù)的定義方法 (1)C語言函數(shù)定義的一般形式: 存儲類型說明符 函數(shù)返回值類型名 函數(shù)名(類型名 形參1,類型名 形參2,) *函數(shù)首部*/ 說明部分 執(zhí)行部分 存儲類型說明符說明該函數(shù)是內(nèi)部函數(shù)還是外部函
5、數(shù)。 函數(shù)返回值類型名是用來說明該函數(shù)返回值的類型,如果沒有返回值,則其類型說明符應為“void”。, 第一行通常稱為函數(shù)首部,通過它就能知道函數(shù)的功能及調(diào)用方式。 其它部分稱函數(shù)體。函數(shù)體包括兩個部分,說明部分和執(zhí)行部分,說明部分通常用來定義在本函數(shù)中使用的變量、數(shù)組等,執(zhí)行部分是函數(shù)功能的實現(xiàn),通常由一系列的可執(zhí)行語句構(gòu)成。 (2)無參函數(shù)的定義格式 存儲類型說明符 數(shù)據(jù)類型說明符 函數(shù)名( ) /*函數(shù)頭*/ 說明部分 執(zhí)行部分 說明: 無參函數(shù)與有參函數(shù)基本一樣,不同的只是它沒有形式參數(shù),調(diào)用時不需實參。,3)關(guān)于函數(shù)定義的幾點說明 C語言規(guī)定,不能在同一個函數(shù)內(nèi)部再定義函數(shù)。 函數(shù)名
6、和形式參數(shù)都是由用戶命名的標識符。在同一程序中,函數(shù)名必須唯一,形式參數(shù)名只要在同一函數(shù)中即可,可以與其他函數(shù)中的變量同名。 若省略了函數(shù)返回值的類型名,則C默認函數(shù)返回值的類型為int類型。 形參可以省略,稱為無參函數(shù)。在調(diào)用時不需實參。即 存儲類型說明符 函數(shù)返回值類型名 函數(shù)名() 函數(shù)體中,除形參外,用到的其它變量必須在說明部分進行定義,且可以和其他函數(shù)中的變量同名。,2函數(shù)的返回值 函數(shù)值通過return語句返回,return語句的一般形式為: return 表達式; 或 return (表達式) 或 return; 以下是幾點說明: (1)return語句中表達式的值就是所求的函數(shù)
7、值,且其類型必須與函數(shù)首部所說明的類型一致。若類型不一致,則由系統(tǒng)自動轉(zhuǎn)換為函數(shù)值的類型。,(2)在程序執(zhí)行到return語句時,流程就返回到調(diào)用該函數(shù)處,并帶回函數(shù)值。在同一個函數(shù)內(nèi),可以在多處出現(xiàn)return語句。 (3)return語句也可以不含表達式。此時,它只是使流程返回到調(diào)用函數(shù),并沒有確定的函數(shù)值。 (4)函數(shù)體內(nèi)可以沒有return語句,程序就一直執(zhí)行到函數(shù)末尾,然后返回調(diào)用函數(shù),此時也沒有確定的函數(shù)值帶回。,3函數(shù)定義舉例 (1)定義一個函數(shù),其功能是對三個實型參數(shù)求最大值,并返回這個值。 float max(float f1,float f2,float f3) /*定義函
8、數(shù)返回值的類型、函數(shù)名和形式參數(shù)*/ float m1; /*函數(shù)體的說明部分*/ if (f1f2) m1=f1; /*以下是函數(shù)體的執(zhí)行部分*/ else m1=f2; if(m1f3) m1=f3; return(m1); /*通過return(表達式)返回一個確定的值*/ ,(2)無參函數(shù)定義示例:定義一個函數(shù),其作用是打印出五行歡迎詞“Welcome you, my dear friends”。 void welc()/*定義函數(shù)返回值的類型(為“void”說明無返回值)及函數(shù)名*/ int i; /*函數(shù)體的說明部分*/ for(i=1;i=5;i+)/*以下是函數(shù)體的執(zhí)行部分*/
9、 printf(“Welcome, my dear friends”); 說明:該函數(shù)的類型說明為“void”,所以為無返回值的函數(shù),函數(shù)中不需要return語句。,重點提示:要想讓函數(shù)返回一個確定的值,必須通過語句“return(表達式)”來實現(xiàn),其中表達式就是函數(shù)的返回值。如果沒有return語句,或return語句不帶表達式并不表示沒有返回值,而是表示返回一個不確定的值。如果不希望有返回值,必須在定義函數(shù)時把“數(shù)據(jù)類型說明符”說明為“void”。,7.3 函數(shù)的調(diào)用 7.3.1 函數(shù)調(diào)用的兩種形式 1有返回值的函數(shù)的調(diào)用形式 有返回值的函數(shù)調(diào)用,可以作為表達式或表達式的一部分,也可以作為
10、一條語句。其調(diào)用形式是: 函數(shù)名(實際參數(shù)列表) 調(diào)用的結(jié)果是獲得一個返回值,該返回值可以參加相應類型的計算。 如:sum(x,y)是一函數(shù),可以由以下兩種調(diào)用方式 y2sum(3,4);(作為表達式的一部分,參與計算) 或sum(3,4);(單獨作為一條語句,不使用返回值),,,,,2無返回值的函數(shù)調(diào)用形式 無返回值的函數(shù)調(diào)用只能作為一條語句,其調(diào)用形式如下: 函數(shù)名(實際參數(shù)列表);(注意,這里的分號必不可少) 如:max(a,b,c);,3函數(shù)調(diào)用執(zhí)行過程 其實在執(zhí)行函數(shù)調(diào)用時,系統(tǒng)要完成一系列復雜的過程:首先為被調(diào)函數(shù)的所有形式參數(shù)分配內(nèi)存,再計算實際參數(shù)的值,再一一對應地賦給相應的形
11、式參數(shù)(對于無參函數(shù),不做該項工作);然后進入函數(shù)體,為函數(shù)說明部分定義的變量分配存儲空間,再依次執(zhí)行函數(shù)體中的可執(zhí)行語句;當執(zhí)行到“return(表達式)”語句時,計算返回值(如果是無返回值的函數(shù),不做該項工作),收回本函數(shù)中定義的變量所占用的存儲空間(對于static類型的變量,其空間不收回),返回主調(diào)函數(shù)繼續(xù)執(zhí)行。 重點提示:有返回值的函數(shù)調(diào)用,可以作為表達式或表達式的一部分,也可以作為一條語句。而無返回值的函數(shù)調(diào)用只能作為一條語句。,7.3.2 函數(shù)調(diào)用時的語法要求 函數(shù)調(diào)用時,需要遵循以下幾條語法要求: (1)調(diào)用函數(shù)時,函數(shù)名必須與所調(diào)用的函數(shù)名字完全一致。 (2)實參的個數(shù)必須與
12、形參一致。實參可以是表達式,在類型上應按位置與形參一一對應匹配。如果類型不匹配,C編譯程序按賦值兼容的規(guī)則進行轉(zhuǎn)換,否則,程序運行后不能得到正確的結(jié)果。 (3)C語言規(guī)定,函數(shù)必須先定義后調(diào)用(函數(shù)的返回值類型為int或char時除外)。 (4)實參可以是 C程序中函數(shù)可以直接或間接的自己調(diào)用自己,即遞歸調(diào)用。 重點提示:函數(shù)調(diào)用時,必須特別注意實參和形參的類型匹配。,7.4 函數(shù)說明 7.4.1 函數(shù)說明的形式 在C語言中,要調(diào)用某個函數(shù),需對該函數(shù)進行函數(shù)說明(或稱為函數(shù)原型說明)。函數(shù)說明的一般形式為: 類型名 函數(shù)名(參數(shù)類型1,參數(shù)類型2,)或 類型名 函數(shù)名(參數(shù)類型1 參數(shù)名1,
13、參數(shù)類型2 參數(shù)名2,),以下是函數(shù)說明的幾條規(guī)則: (1)調(diào)用系統(tǒng)函數(shù)時,需要在程序的開頭包含相應的頭文件。但scanf()和printf()等少數(shù)的幾個函數(shù)不需要。 (2)當被調(diào)函數(shù)定義在主調(diào)函數(shù)之前時,對被調(diào)函數(shù)的說明可以省去,也可以不省。 (3)當被調(diào)函數(shù)的返回值類型是整形或字符型時,不管其定義在主調(diào)函數(shù)之前還是之后,對被調(diào)函數(shù)的說明都可以省去,也可以不省。 (4)其它情況一律需要對被調(diào)函數(shù)進行說明。,(5)當被調(diào)函數(shù)和主調(diào)函數(shù)在同一個程序文件中,可在主調(diào)函數(shù)的函數(shù)體說明部分對被調(diào)函數(shù)進行說明,說明格式有兩種,如下: 類型名 被調(diào)函數(shù)名() 或 類型名 被調(diào)函數(shù)名(形式參數(shù)列表) (6
14、)函數(shù)說明可以是一條獨立的語句,也可以與普通變量一起出現(xiàn)在同一個定義語句中。如double sub(float,double)和double x,y,sub(float,double)都是合法的。 重點提示:內(nèi)部函數(shù)的說明包含在.h文件中,故調(diào)用某個內(nèi)部函數(shù),必須包含相應的頭文件。,7.4.2 函數(shù)說明的位置 當在函數(shù)的外部、被調(diào)用之前說明函數(shù)時,在函數(shù)說明的后面所有位置上都可以對該函數(shù)進行調(diào)用。 函數(shù)說明也可以放在調(diào)用函數(shù)內(nèi)的說明部分,如在main函數(shù)內(nèi)部進行說明,則只能在main函數(shù)內(nèi)部才能識別函數(shù)。 重點提示:函數(shù)調(diào)用時,必須特別注意實參和形參的類型匹配。,7.5 調(diào)用函數(shù)和被調(diào)用函數(shù)之
15、間的數(shù)據(jù)傳遞,1形參和實參的概念 每個函數(shù)一般都能完成一定的功能,可以形象地把函數(shù)看成一個加工廠,該加工廠對材料進行加工,最后生產(chǎn)出產(chǎn)品。而加工廠加工的材料,稱為“函數(shù)的參數(shù)”,而加工出來的產(chǎn)品稱為“函數(shù)的返回值”(有的函數(shù)沒有返回值)。在定義函數(shù)時,只是形式化地說明函數(shù)加工的對象,這種對象并不實際存在,就象建立一個本材加工廠時只是說明該加工廠把木材加工成木板,但并沒有實際的木材,把這種參數(shù)稱為“形式參數(shù)”。當程序段要調(diào)用該函數(shù)完成指定的功能,就需要給它實際的材料,以便加工出“產(chǎn)品”。就象一個人要把木材加工成木板,就必須把實際的木材送到加工廠加工一樣,函數(shù)調(diào)用時傳入的參數(shù)稱為“實際參數(shù)”。,2
16、數(shù)據(jù)傳遞的形式 (1)C語言中,調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)可以通過三種方式進行傳遞: 實際參數(shù)和形式參數(shù)之間進行數(shù)據(jù)傳遞。 通過return語句把函數(shù)值返回調(diào)用函數(shù)。 通過全局變量。 (2)參數(shù)值的傳遞 主調(diào)函數(shù)在調(diào)用函數(shù)時,需要把相應的實際參數(shù)傳給相應的形式參數(shù),實際參數(shù)的個數(shù)和類型要和形式參數(shù)的個數(shù)和類型一致。, 實參的個數(shù)與類型應與形參一致,否則將會出現(xiàn)編譯錯誤。 實參可以是常量、變量、數(shù)組元素和表達式,但如果在被調(diào)函數(shù)中有取形參地址或給形參賦值的語句,則對應的實參必須是變量和數(shù)組元素。 定義函數(shù)時定義的形參并不占用實際的存儲單元,只有在被調(diào)用時才由系統(tǒng)給它分配存儲單元,在調(diào)用結(jié)束后,形參所占用的存儲單元被回收。 C語言規(guī)定,函數(shù)間的參數(shù)傳遞是“值傳參”,即單向傳遞,實參可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 盲人探路活動策劃方案(3篇)
- 小米充值活動方案策劃(3篇)
- 水壩面板施工方案(3篇)
- 樓施工方案模板(3篇)
- 飲品活動方案策劃模板(3篇)
- 多孔模塊施工方案(3篇)
- 愛耳日老人活動策劃方案(3篇)
- 滲漏處理專項方案
- 工程電井安全培訓
- 中學學生社團活動對外合作制度
- 2026國家電投招聘試題及答案
- 2024年人教版七7年級下冊數(shù)學期末質(zhì)量檢測題(附答案)
- 2025 AHA 心肺復蘇與心血管急救指南 - 第6部分:兒童基本生命支持解讀
- 航空公司招聘筆試行測題
- 員工工資明細表Excel模板
- DB32-T 4086-2021 特種設(shè)備風險分級管控工作規(guī)范
- JJG 945-2010微量氧分析儀
- GB/T 38537-2020纖維增強樹脂基復合材料超聲檢測方法C掃描法
- “多規(guī)合一”實用性村莊規(guī)劃質(zhì)檢軟件建設(shè)方案
- GB/T 20727-2006封閉管道中流體流量的測量熱式質(zhì)量流量計
- GB/T 16770.1-2008整體硬質(zhì)合金直柄立銑刀第1部分:型式與尺寸
評論
0/150
提交評論