C教程從入門到精通chap04_第1頁
C教程從入門到精通chap04_第2頁
C教程從入門到精通chap04_第3頁
C教程從入門到精通chap04_第4頁
C教程從入門到精通chap04_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第4 4章章函數(shù)和預(yù)處理命令函數(shù)和預(yù)處理命令 函數(shù)函數(shù) 預(yù)處理命令預(yù)處理命令 函數(shù)函數(shù) 函數(shù)的定義函數(shù)的定義 函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)的參數(shù)與函數(shù)的返回值函數(shù)的參數(shù)與函數(shù)的返回值 函數(shù)的嵌套調(diào)用與遞歸調(diào)用函數(shù)的嵌套調(diào)用與遞歸調(diào)用 局部變量和全局變量局部變量和全局變量 存儲類別存儲類別 函數(shù)原型函數(shù)原型 函數(shù)函數(shù) 函數(shù)是由基本語句組成的、可以完成特定功能 的例程。 函數(shù)是構(gòu)成C+程序的基本單位,一個C+程 序就是一個或若干個函數(shù)的集合。 函數(shù)通常可以分為兩種: 一種是C+提供的標(biāo)準(zhǔn)函數(shù),或者稱庫函數(shù),是 C+提供的函數(shù),用戶不用定義就可以使用; 另一種是用戶自己定義的函數(shù),用于解決用戶自 己

2、的問題。 函數(shù)的定義函數(shù)的定義 數(shù)據(jù)類型數(shù)據(jù)類型 函數(shù)名函數(shù)名(形式參數(shù)列表形式參數(shù)列表) 聲明部分聲明部分 語句語句 函數(shù)的調(diào)用函數(shù)的調(diào)用 調(diào)用一個函數(shù)的方法是指明這個函數(shù)的函數(shù)名, 如果函數(shù)的定義中包括形參的話,那么須要在 后面的括號中寫出傳給這些形參的值。 f ( )g ( ) 函數(shù)調(diào)用函數(shù)調(diào)用 形式參數(shù)和實際參數(shù)形式參數(shù)和實際參數(shù) 定義函數(shù)時定義的參數(shù)是形式參數(shù) 在定義函數(shù)時,雖然定義了函數(shù)的形式參數(shù),但 是這些參數(shù)在沒有被其他函數(shù)調(diào)用時并不在內(nèi)存 中分配存儲單元,而是在被調(diào)用時才分配,函數(shù) 調(diào)用結(jié)束時它所占用的內(nèi)存單元被立即回收。因 此在函數(shù)沒有被調(diào)用時這些參數(shù)只是形式上存在, 所以

3、稱之為形式參數(shù) 函數(shù)調(diào)用時使用的參數(shù)是實際參數(shù) 值傳遞值傳遞 指在函數(shù)調(diào)用時,實參的值會被復(fù)制到形參中。 由于函數(shù)調(diào)用時函數(shù)的形參和實參并不占用同 樣的存儲單元,因此在這種情況下實參的值是 被復(fù)制到形參中的,因此稱為“值傳遞” 改寫改寫max函數(shù)以解釋形參和實參之函數(shù)以解釋形參和實參之 間的值傳遞關(guān)系間的值傳遞關(guān)系 編寫編寫swap函數(shù)以解釋形參和實參之函數(shù)以解釋形參和實參之 間的值傳遞關(guān)系間的值傳遞關(guān)系 函數(shù)的返回值函數(shù)的返回值 在調(diào)用函數(shù)時能夠通過函數(shù)體的return語句從 函數(shù)中獲得一個返回值。 有些函數(shù)只是實現(xiàn)一些操作,不需要返回值, 這樣函數(shù)的函數(shù)體中就沒有return語句,定義 函

4、數(shù)時也指明這個函數(shù)的返回值類型是void。 函數(shù)值的數(shù)據(jù)類型與返回值的數(shù)據(jù)函數(shù)值的數(shù)據(jù)類型與返回值的數(shù)據(jù) 類型不一致類型不一致 函數(shù)嵌套調(diào)用函數(shù)嵌套調(diào)用 在C+中,不允許函數(shù)嵌套定義。 C+中允許函數(shù)嵌套調(diào)用 允許在定義一個函數(shù)時函數(shù)體中存在對另一個函 數(shù)的調(diào)用。 f (x)main ( )g (x) 根據(jù)根據(jù)x的輸入求函數(shù)的輸入求函數(shù)f(x)的值的值 f(x)=2g(x)2+(3g(x)+7)1/2 g(x)=(65x3+7X2-8)/x2-3 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用 一個函數(shù)直接地或者間接地調(diào)用這個函數(shù)本身 如果有下面的函數(shù)定義,求如果有下面的函數(shù)定義,求f(x)的的 值。已知值。已

5、知f(0)=5,且且f(x)=3*f(x-1)+6 執(zhí)行流程執(zhí)行流程 調(diào)用 f (3) 輸出 f (3) m=3*f(2)+6 return(m) m=3*f(1)+6 return(m) m=3*f(0)+6 return(m) m=5 return(m) main f(3) f(2) f(1) f(0) f(3)=213 f(2)=69 f(1)=21 f(0)=5 用遞歸的方法求用遞歸的方法求n! 局部變量局部變量 局部變量是指在一個代碼塊內(nèi)部定義的變量。 局部變量的作用范圍就是定義這個變量所處的代 碼塊,在此代碼塊外無法使用這個變量。 由于這種變量的有效范圍是局部的,所以稱之為 局部變

6、量。 只要是用一對括起來的代碼都可以稱為代碼塊。 一個函數(shù)的函數(shù)體部分是一個代碼塊 一個復(fù)合語句也是一個代碼塊 局部變量的使用局部變量的使用 全局變量全局變量 全局變量定義在所有函數(shù)之外,因此所有函數(shù) 都可以訪問全局變量,作用范圍是整個程序。 建議盡量減少使用全局變量 全局變量的使用全局變量的使用 存儲類別存儲類別 一個變量的存儲類別可以決定程序在執(zhí)行時給 這個變量分配什么樣的存儲空間 在C+中,有4種常用存儲類別說明符 auto extern register static auto存儲類型存儲類型 在C+中,如果不特別說明,所有的局部變量 都是auto存儲類型的變量。 auto存儲類型的變

7、量保存在動態(tài)存儲區(qū)中,在 定義它的代碼塊執(zhí)行時分配存儲空間,在代碼 塊執(zhí)行結(jié)束之后釋放存儲空間。 auto 數(shù)據(jù)類型 變量列表; 用用extern聲明全局變量聲明全局變量 如果需要把代碼寫在兩個或兩個以上的文件中 時,如果要定義全局變量,C+采用在一個文 件中定義應(yīng)用的全部全局變量,而在另一個文 件中使用extern關(guān)鍵字指明這些變量的定義在 其他的文件中,這樣編譯器在看到用extern關(guān) 鍵字修飾的變量時就不再為這些變量分配存儲 空間。 使用使用extern聲明全局變量聲明全局變量 static存儲類型存儲類型 如果希望局部變量在定義它的代碼塊執(zhí)行完之 后不被銷毀,而是與全局變量一樣一直保留

8、其 內(nèi)存空間,那么就可以定義這個變量為static 存儲類型。 系統(tǒng)會為static存儲類型的變量分配靜態(tài)存儲 區(qū)中的內(nèi)存空間。由于在代碼塊執(zhí)行完之后這 個變量仍然存在,因此如果再次調(diào)用這個代碼 塊時,上次調(diào)用這個變量的值仍然存在。 static int i; 求求110的階乘的階乘 register存儲類型存儲類型 在C+中可以使用register關(guān)鍵字定義變量,作 用是告知編譯器這個變量將使用一個寄存器來 保存,而不是使用內(nèi)存空間來保存。 register int i; 函數(shù)原型函數(shù)原型 函數(shù)的聲明和函數(shù)的定義 定義函數(shù)是指說明函數(shù)的函數(shù)名、返回值、形參 以及函數(shù)體的內(nèi)容 函數(shù)的聲明則只要

9、求說明函數(shù)的函數(shù)名、返回值、 形參就可以了 聲明函數(shù)就要使用函數(shù)原型。函數(shù)原型會指明一個函數(shù) 的函數(shù)名、函數(shù)的參數(shù)個數(shù)、函數(shù)參數(shù)的數(shù)據(jù)類型、函 數(shù)的返回值類型。在函數(shù)原型中,還可以指定所有形式 參數(shù)的名字,但這并不是必須的 使用函數(shù)原型聲明函數(shù)使用函數(shù)原型聲明函數(shù) 預(yù)處理命令預(yù)處理命令 宏定義宏定義 文件包含文件包含 條件編譯條件編譯 預(yù)處理命令預(yù)處理命令 編譯器在對程序開始正式編譯之前會對程序中的預(yù)編譯器在對程序開始正式編譯之前會對程序中的預(yù) 處理命令進(jìn)行預(yù)處理,預(yù)處理過程中處理的這些命處理命令進(jìn)行預(yù)處理,預(yù)處理過程中處理的這些命 令就是預(yù)處理命令。令就是預(yù)處理命令。 預(yù)處理命令不是預(yù)處理命

10、令不是C+C+語言的一部分,這些命令的主要語言的一部分,這些命令的主要 作用是改進(jìn)程序設(shè)計環(huán)境,提高程序設(shè)計效率。作用是改進(jìn)程序設(shè)計環(huán)境,提高程序設(shè)計效率。 C+C+的預(yù)處理命令包括的預(yù)處理命令包括 宏定義命令宏定義命令 文件包含命令文件包含命令 條件編譯命令條件編譯命令 宏定義命令宏定義命令 # #define define 宏名宏名 字符串字符串 在編譯時,在程序語句中只要遇到在編譯時,在程序語句中只要遇到“宏名宏名”就就 會用后面的會用后面的“字符串字符串”來替代。這個過程稱為來替代。這個過程稱為 “宏展開宏展開”。 # #define PI 3.1415define PI 3.1415

11、 # #define PI 3.A1415define PI 3.A1415 C+C+中還允許定義帶參數(shù)的宏。中還允許定義帶參數(shù)的宏。 # #define MIN(a,b) (a)(b)?a:b)define MIN(a,b) (a)(b)?a:b) 計算一個圓的周長和面積計算一個圓的周長和面積 文件包含文件包含 使用文件包含命令的文件可以把這個命令所指使用文件包含命令的文件可以把這個命令所指 定文件的全部內(nèi)容包含到本文件中來。定文件的全部內(nèi)容包含到本文件中來。 # #include include 文件名文件名 或者或者 # #includeinclude 條件編譯條件編譯 C+C+中允許根據(jù)特定的情況對部分代碼進(jìn)行編中允許根據(jù)特定的情況對部分代碼進(jìn)行編 譯。由于這種編譯是根據(jù)指定的條件進(jìn)行的,譯。由于這種編譯是根據(jù)指定的條件進(jìn)行的, 所以稱為條件編譯。所以稱為條件編譯。 第一種表述形式第一種表述形式 #if #if 表達(dá)式表達(dá)式 代碼段代碼段1 1 #else#else 代碼段代

溫馨提示

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

最新文檔

評論

0/150

提交評論