全國計算機等級考試實用應試教程二級C語言 第7章 函數.ppt_第1頁
全國計算機等級考試實用應試教程二級C語言 第7章 函數.ppt_第2頁
全國計算機等級考試實用應試教程二級C語言 第7章 函數.ppt_第3頁
全國計算機等級考試實用應試教程二級C語言 第7章 函數.ppt_第4頁
全國計算機等級考試實用應試教程二級C語言 第7章 函數.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第7章 函數,本章要點: 7.1 庫函數 7.2 函數的定義和返回值 7.3 函數的調用 7.4 函數的說明 7.5 調用函數和被調用函數之間的數據傳遞,7.1 庫函數 1函數的概念 函數從本質上來說就是完成一定功能程序段,有一個名字叫函數名。若有其它程序要完成該函數的功能,可通過函數名調用它,函數可多次反復調用。引入函數主要是解決兩個問題:一是為了解決代碼的重復。如有一個程序段在程序中要出現很多次,每次都要寫出來既非常麻煩又使程序顯得很長,此時就可以把該程序段定義成一個函數,在使用該程序段的地方直接調用該函數就可以了;二是結構化、模塊化編程的需要。,建立函數的過程稱“函數的定義”,在程序中使

2、用函數稱“函數的調用”。被調用的函數稱“被調函數”,而調用函數的函數稱“主調函數”。在C程序中,main()可以調用任何非主函數,非主函數可以調有非主函數也可被其它函數調用但不能調用main()函數,也就是說main()只能作用主調函數。一般情況下,函數對數據進行加工,最后得到一個結果作為函數的返回值。 根據不同的方法,函數可以分成不同的種類。如從使用的角度來看,可以把函數分成用戶函數和系統(tǒng)函數;從定義時有無參數來分,可分為有參函數和無參函數;根據函數調用時是否有返回值來分,可分為有返回值的函數和無返回值的函數;根據函數的作用范圍來分,可分成內部函數和外部函數。,2庫函數 C語言提供了豐富的庫

3、函數,包括常用的數學函數,字符、字符串處理函數,輸入輸出函數等,用戶在編寫程序時可以直接調用這些已有的庫函數。以下是關于庫函數調用的幾點說明: (1)調用C語言標準庫函數時要求用include命令 對每一類庫函數,都有其相應的頭文件名,調用某個庫函數時,用戶在源程序中須用include命令包含其頭文件名。一般形式為: #include 或#include “頭文件名.h”,(2)標準庫函數的調用 庫函數調用的一般形式為: 函數名(參數表) C語言中庫函數的調用有兩種方式: 在表達式中調用。如: x=pow(2),就是在賦值表達式中調用pow函數來求x的值。 作為獨立的語句完成某種操作。如: p

4、rintf(“*,就是調用了printf函數,且調用之后加了分號,構成了一條獨立的語句,完成該輸出操作。 (3)各個庫函數的功能、參數的個數和類型、函數值的類型都有其規(guī)定,用戶在調用時根據需要選擇合適的庫函數,并嚴格按照該庫函數的規(guī)則,正確的進行調用。 重點提示:庫函數的調用需要注意的是:函數的功能,函數的參數個數、類型,函數的返回值,對參數的一些特殊要求。,7.2 函數的定義和返回值 1函數的定義方法 (1)C語言函數定義的一般形式: 存儲類型說明符 函數返回值類型名 函數名(類型名 形參1,類型名 形參2,) *函數首部*/ 說明部分 執(zhí)行部分 存儲類型說明符說明該函數是內部函數還是外部函

5、數。 函數返回值類型名是用來說明該函數返回值的類型,如果沒有返回值,則其類型說明符應為“void”。, 第一行通常稱為函數首部,通過它就能知道函數的功能及調用方式。 其它部分稱函數體。函數體包括兩個部分,說明部分和執(zhí)行部分,說明部分通常用來定義在本函數中使用的變量、數組等,執(zhí)行部分是函數功能的實現,通常由一系列的可執(zhí)行語句構成。 (2)無參函數的定義格式 存儲類型說明符 數據類型說明符 函數名( ) /*函數頭*/ 說明部分 執(zhí)行部分 說明: 無參函數與有參函數基本一樣,不同的只是它沒有形式參數,調用時不需實參。,3)關于函數定義的幾點說明 C語言規(guī)定,不能在同一個函數內部再定義函數。 函數名

6、和形式參數都是由用戶命名的標識符。在同一程序中,函數名必須唯一,形式參數名只要在同一函數中即可,可以與其他函數中的變量同名。 若省略了函數返回值的類型名,則C默認函數返回值的類型為int類型。 形參可以省略,稱為無參函數。在調用時不需實參。即 存儲類型說明符 函數返回值類型名 函數名() 函數體中,除形參外,用到的其它變量必須在說明部分進行定義,且可以和其他函數中的變量同名。,2函數的返回值 函數值通過return語句返回,return語句的一般形式為: return 表達式; 或 return (表達式) 或 return; 以下是幾點說明: (1)return語句中表達式的值就是所求的函數

7、值,且其類型必須與函數首部所說明的類型一致。若類型不一致,則由系統(tǒng)自動轉換為函數值的類型。,(2)在程序執(zhí)行到return語句時,流程就返回到調用該函數處,并帶回函數值。在同一個函數內,可以在多處出現return語句。 (3)return語句也可以不含表達式。此時,它只是使流程返回到調用函數,并沒有確定的函數值。 (4)函數體內可以沒有return語句,程序就一直執(zhí)行到函數末尾,然后返回調用函數,此時也沒有確定的函數值帶回。,3函數定義舉例 (1)定義一個函數,其功能是對三個實型參數求最大值,并返回這個值。 float max(float f1,float f2,float f3) /*定義函

8、數返回值的類型、函數名和形式參數*/ float m1; /*函數體的說明部分*/ if (f1f2) m1=f1; /*以下是函數體的執(zhí)行部分*/ else m1=f2; if(m1f3) m1=f3; return(m1); /*通過return(表達式)返回一個確定的值*/ ,(2)無參函數定義示例:定義一個函數,其作用是打印出五行歡迎詞“Welcome you, my dear friends”。 void welc()/*定義函數返回值的類型(為“void”說明無返回值)及函數名*/ int i; /*函數體的說明部分*/ for(i=1;i=5;i+)/*以下是函數體的執(zhí)行部分*/

9、 printf(“Welcome, my dear friends”); 說明:該函數的類型說明為“void”,所以為無返回值的函數,函數中不需要return語句。,重點提示:要想讓函數返回一個確定的值,必須通過語句“return(表達式)”來實現,其中表達式就是函數的返回值。如果沒有return語句,或return語句不帶表達式并不表示沒有返回值,而是表示返回一個不確定的值。如果不希望有返回值,必須在定義函數時把“數據類型說明符”說明為“void”。,7.3 函數的調用 7.3.1 函數調用的兩種形式 1有返回值的函數的調用形式 有返回值的函數調用,可以作為表達式或表達式的一部分,也可以作為

10、一條語句。其調用形式是: 函數名(實際參數列表) 調用的結果是獲得一個返回值,該返回值可以參加相應類型的計算。 如:sum(x,y)是一函數,可以由以下兩種調用方式 y2sum(3,4);(作為表達式的一部分,參與計算) 或sum(3,4);(單獨作為一條語句,不使用返回值),,,,,2無返回值的函數調用形式 無返回值的函數調用只能作為一條語句,其調用形式如下: 函數名(實際參數列表);(注意,這里的分號必不可少) 如:max(a,b,c);,3函數調用執(zhí)行過程 其實在執(zhí)行函數調用時,系統(tǒng)要完成一系列復雜的過程:首先為被調函數的所有形式參數分配內存,再計算實際參數的值,再一一對應地賦給相應的形

11、式參數(對于無參函數,不做該項工作);然后進入函數體,為函數說明部分定義的變量分配存儲空間,再依次執(zhí)行函數體中的可執(zhí)行語句;當執(zhí)行到“return(表達式)”語句時,計算返回值(如果是無返回值的函數,不做該項工作),收回本函數中定義的變量所占用的存儲空間(對于static類型的變量,其空間不收回),返回主調函數繼續(xù)執(zhí)行。 重點提示:有返回值的函數調用,可以作為表達式或表達式的一部分,也可以作為一條語句。而無返回值的函數調用只能作為一條語句。,7.3.2 函數調用時的語法要求 函數調用時,需要遵循以下幾條語法要求: (1)調用函數時,函數名必須與所調用的函數名字完全一致。 (2)實參的個數必須與

12、形參一致。實參可以是表達式,在類型上應按位置與形參一一對應匹配。如果類型不匹配,C編譯程序按賦值兼容的規(guī)則進行轉換,否則,程序運行后不能得到正確的結果。 (3)C語言規(guī)定,函數必須先定義后調用(函數的返回值類型為int或char時除外)。 (4)實參可以是 C程序中函數可以直接或間接的自己調用自己,即遞歸調用。 重點提示:函數調用時,必須特別注意實參和形參的類型匹配。,7.4 函數說明 7.4.1 函數說明的形式 在C語言中,要調用某個函數,需對該函數進行函數說明(或稱為函數原型說明)。函數說明的一般形式為: 類型名 函數名(參數類型1,參數類型2,)或 類型名 函數名(參數類型1 參數名1,

13、參數類型2 參數名2,),以下是函數說明的幾條規(guī)則: (1)調用系統(tǒng)函數時,需要在程序的開頭包含相應的頭文件。但scanf()和printf()等少數的幾個函數不需要。 (2)當被調函數定義在主調函數之前時,對被調函數的說明可以省去,也可以不省。 (3)當被調函數的返回值類型是整形或字符型時,不管其定義在主調函數之前還是之后,對被調函數的說明都可以省去,也可以不省。 (4)其它情況一律需要對被調函數進行說明。,(5)當被調函數和主調函數在同一個程序文件中,可在主調函數的函數體說明部分對被調函數進行說明,說明格式有兩種,如下: 類型名 被調函數名() 或 類型名 被調函數名(形式參數列表) (6

14、)函數說明可以是一條獨立的語句,也可以與普通變量一起出現在同一個定義語句中。如double sub(float,double)和double x,y,sub(float,double)都是合法的。 重點提示:內部函數的說明包含在.h文件中,故調用某個內部函數,必須包含相應的頭文件。,7.4.2 函數說明的位置 當在函數的外部、被調用之前說明函數時,在函數說明的后面所有位置上都可以對該函數進行調用。 函數說明也可以放在調用函數內的說明部分,如在main函數內部進行說明,則只能在main函數內部才能識別函數。 重點提示:函數調用時,必須特別注意實參和形參的類型匹配。,7.5 調用函數和被調用函數之

15、間的數據傳遞,1形參和實參的概念 每個函數一般都能完成一定的功能,可以形象地把函數看成一個加工廠,該加工廠對材料進行加工,最后生產出產品。而加工廠加工的材料,稱為“函數的參數”,而加工出來的產品稱為“函數的返回值”(有的函數沒有返回值)。在定義函數時,只是形式化地說明函數加工的對象,這種對象并不實際存在,就象建立一個本材加工廠時只是說明該加工廠把木材加工成木板,但并沒有實際的木材,把這種參數稱為“形式參數”。當程序段要調用該函數完成指定的功能,就需要給它實際的材料,以便加工出“產品”。就象一個人要把木材加工成木板,就必須把實際的木材送到加工廠加工一樣,函數調用時傳入的參數稱為“實際參數”。,2

16、數據傳遞的形式 (1)C語言中,調用函數和被調函數之間的數據可以通過三種方式進行傳遞: 實際參數和形式參數之間進行數據傳遞。 通過return語句把函數值返回調用函數。 通過全局變量。 (2)參數值的傳遞 主調函數在調用函數時,需要把相應的實際參數傳給相應的形式參數,實際參數的個數和類型要和形式參數的個數和類型一致。, 實參的個數與類型應與形參一致,否則將會出現編譯錯誤。 實參可以是常量、變量、數組元素和表達式,但如果在被調函數中有取形參地址或給形參賦值的語句,則對應的實參必須是變量和數組元素。 定義函數時定義的形參并不占用實際的存儲單元,只有在被調用時才由系統(tǒng)給它分配存儲單元,在調用結束后,形參所占用的存儲單元被回收。 C語言規(guī)定,函數間的參數傳遞是“值傳參”,即單向傳遞,實參可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論