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

下載本文檔

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

文檔簡(jiǎn)介

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)用 局部變量和全局變量局部變量和全局變量 存儲(chǔ)類別存儲(chǔ)類別 函數(shù)原型函數(shù)原型 函數(shù)函數(shù) 函數(shù)是由基本語(yǔ)句組成的、可以完成特定功能 的例程。 函數(shù)是構(gòu)成C+程序的基本單位,一個(gè)C+程 序就是一個(gè)或若干個(gè)函數(shù)的集合。 函數(shù)通常可以分為兩種: 一種是C+提供的標(biāo)準(zhǔn)函數(shù),或者稱庫(kù)函數(shù),是 C+提供的函數(shù),用戶不用定義就可以使用; 另一種是用戶自己定義的函數(shù),用于解決用戶自 己

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

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

4、數(shù)時(shí)也指明這個(gè)函數(shù)的返回值類型是void。 函數(shù)值的數(shù)據(jù)類型與返回值的數(shù)據(jù)函數(shù)值的數(shù)據(jù)類型與返回值的數(shù)據(jù) 類型不一致類型不一致 函數(shù)嵌套調(diào)用函數(shù)嵌套調(diào)用 在C+中,不允許函數(shù)嵌套定義。 C+中允許函數(shù)嵌套調(diào)用 允許在定義一個(gè)函數(shù)時(shí)函數(shù)體中存在對(duì)另一個(gè)函 數(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)用 一個(gè)函數(shù)直接地或者間接地調(diào)用這個(gè)函數(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! 局部變量局部變量 局部變量是指在一個(gè)代碼塊內(nèi)部定義的變量。 局部變量的作用范圍就是定義這個(gè)變量所處的代 碼塊,在此代碼塊外無(wú)法使用這個(gè)變量。 由于這種變量的有效范圍是局部的,所以稱之為 局部變

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

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

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

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

10、令不是C+C+語(yǔ)言的一部分,這些命令的主要語(yǔ)言的一部分,這些命令的主要 作用是改進(jìn)程序設(shè)計(jì)環(huán)境,提高程序設(shè)計(jì)效率。作用是改進(jìn)程序設(shè)計(jì)環(huán)境,提高程序設(shè)計(jì)效率。 C+C+的預(yù)處理命令包括的預(yù)處理命令包括 宏定義命令宏定義命令 文件包含命令文件包含命令 條件編譯命令條件編譯命令 宏定義命令宏定義命令 # #define define 宏名宏名 字符串字符串 在編譯時(shí),在程序語(yǔ)句中只要遇到在編譯時(shí),在程序語(yǔ)句中只要遇到“宏名宏名”就就 會(huì)用后面的會(huì)用后面的“字符串字符串”來(lái)替代。這個(gè)過程稱為來(lái)替代。這個(gè)過程稱為 “宏展開宏展開”。 # #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) 計(jì)算一個(gè)圓的周長(zhǎng)和面積計(jì)算一個(gè)圓的周長(zhǎng)和面積 文件包含文件包含 使用文件包含命令的文件可以把這個(gè)命令所指使用文件包含命令的文件可以把這個(gè)命令所指 定文件的全部?jī)?nèi)容包含到本文件中來(lái)。定文件的全部?jī)?nèi)容包含到本文件中來(lái)。 # #include include 文件名文件名 或者或者 # #includeinclude 條件編譯條件編譯 C+C+中允許根據(jù)特定的情況對(duì)部分代碼進(jìn)行編中允許根據(jù)特定的情況對(duì)部分代碼進(jìn)行編 譯。由于這種編譯是根據(jù)指定的條件進(jìn)行的,譯。由于這種編譯是根據(jù)指定的條件進(jìn)行的, 所以稱為條件編譯。所以稱為條件編譯。 第一種表述形式第一種表述形式 #if #if 表達(dá)式表達(dá)式 代碼段代碼段1 1 #else#else 代碼段代

溫馨提示

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

評(píng)論

0/150

提交評(píng)論