




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五章 函數(shù), 函數(shù)概述, 函數(shù)的說(shuō)明與使用,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,1. 傳值調(diào)用方式,例,int mul (int m) m=m*3; return m;,調(diào)用函數(shù)2次:,int m=5; /變量與形參同名 cout mul (2) mul (m) mendl;,執(zhí)行結(jié)果:,6 15 5,傳值調(diào)用是指在發(fā)生函數(shù)調(diào)用時(shí),先計(jì)算實(shí)參表達(dá)式的值,并直接將各實(shí)參的值依次賦值給各形參。 單向傳遞,即由實(shí)參到形參; 形參的值不能影響實(shí)參的值。,#include int add(int , int ) ; void main() int a, b, c ; cin a b; c =
2、add(a,b) ; cout c = c endl ; int add(int i, int j ) i + + ; j + + ; return ( i + j ); ,a,b,輸出,c = 8,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,2. 引用調(diào)用方式,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,2. 引用調(diào)用方式,說(shuō)明:, 引用在定義時(shí)一定要初始化,例,int a=3; int , 對(duì)引用的操作就是對(duì)被引用 的變量的操作, 可以把某個(gè)引用賦給一個(gè)變 量,該變量的值就是被引用 的變量值, 引用一旦初始化后不得作為 其他變量的別名,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,在一條語(yǔ)句
3、中聲明多個(gè)引用:,int ,注,int ,int ,#include void main( ) int x=3, ,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,2. 引用調(diào)用方式,例,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,2. 引用調(diào)用方式, 函數(shù)的引用調(diào)用:,調(diào)用函數(shù)的實(shí)參必須要用變量名,將實(shí)參變量名賦給形參的引用,相當(dāng)于在被調(diào)用函數(shù)中使用了實(shí)參的別名。如swap(a,b);,在函數(shù)原型中該參數(shù)類(lèi)型后面加上 x=y; y=temp; coutx“ ”yendl; void main( ) int a=3,b=5; swap(a,b); couta“ ”bendl; ,#include
4、void swap(int ,在傳值調(diào)用中,swap( )函數(shù)中形參值的改變對(duì)實(shí)參無(wú)影響,在引用調(diào)用中,有 void squareByReference(int ,x=2 before squareByValue,Value returned by squareByValue:4,x=2 after squareByValue,z=4 before squareByReference,z=16 after squareByReference,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,3. 傳地址調(diào)用方式,*指針運(yùn)算符,表示指針?biāo)赶蜃兞康闹?int *p, int *ptr; ptr=/將變
5、量a的地址賦值給指針ptr,# include void swap ( int * , int * ) ; void main () int a = 3 , b = 8 ; cout a = a , b = b endl ; swap ( ,5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,傳址調(diào)用指將實(shí)參的地址傳遞給形參 采用這種方式調(diào)用時(shí),實(shí)參必須用地址值,形參用指針變量 發(fā)生函數(shù)調(diào)用時(shí),將實(shí)參地址直接傳遞給相應(yīng)的各形參指針變量 在函數(shù)中通過(guò)形參指針可以對(duì)實(shí)參進(jìn)行間接讀寫(xiě),5.2 函數(shù)的說(shuō)明與使用,五、函數(shù)參數(shù)傳遞,3. 傳地址調(diào)用方式,5.2 函數(shù)的說(shuō)明與使用,六、函數(shù)的嵌套與遞歸,函數(shù)嵌套:
6、一個(gè)函數(shù)的函數(shù)體中包含一個(gè)或多 個(gè)函數(shù)調(diào)用語(yǔ)句。,若函數(shù)A要調(diào)用函數(shù)B,則函數(shù)B的定義 或函數(shù)原型必須出現(xiàn)在A的定義之前。,說(shuō)明,若函數(shù)A在執(zhí)行過(guò)程中調(diào)用B,則中途將 程序控制權(quán)轉(zhuǎn)到B,待B執(zhí)行結(jié)束后再返 回到A。,函數(shù)嵌套調(diào)用示例,定義一個(gè)求 bin ( n, k ) 的函數(shù)。,分析: 定義函數(shù) fact ( m ) = m ! bin ( n , k ) = fact ( n ) / ( fact ( k ) * fact ( n - k ) ) 由主函數(shù)輸入數(shù)據(jù) a 、 b ,求 bin ( a , b ),試一下,函數(shù)嵌套調(diào)用示例 #include long fact ( int m
7、) int i ; long sum = 1 ; for ( i = 1 ; i a b ; f1 = fact ( a ) / ( fact ( b ) * fact ( a-b ) ) ; cout first: bin( a , b )= f1 endl ; f2 = bin ( a , b ) ; cout second: bin( a , b )= f2 endl ; ,函數(shù)嵌套調(diào)用示例 #include long fact ( int m ) int i ; long sum = 1 ; for ( i = 1 ; i a b ; f1 = fact ( a ) / ( fact
8、( b ) * fact ( a-b ) ) ; cout first: bin( a , b )= f1 endl ; f2 = bin ( a , b ) ; cout second: bin( a , b )= f2 endl ; ,函數(shù)嵌套調(diào)用示例 #include long fact ( int m ) int i ; long sum = 1 ; for ( i = 1 ; i a b ; f1 = fact ( a ) / ( fact ( b ) * fact ( a-b ) ) ; cout first: bin( a , b )= f1 endl ; f2 = bin (
9、a , b ) ; cout second: bin( a , b )= f2 endl ; ,函數(shù)嵌套調(diào)用示例 #include long fact ( int m ) int i ; long sum = 1 ; for ( i = 1 ; i a b ; f1 = fact ( a ) / ( fact ( b ) * fact ( a-b ) ) ; cout first: bin( a , b )= f1 endl ; f2 = bin ( a , b ) ; cout second: bin( a , b )= f2 endl ; ,5.2 函數(shù)的說(shuō)明與使用,六、函數(shù)的嵌套與遞歸,
10、函數(shù)遞歸:即自調(diào)用函數(shù),在函數(shù)體內(nèi)部直接 或間接地自己調(diào)用自己。,例如:下面的程序求n!,long fact (int n) if (n=1) return 1; return fact(n-1)*n; ,5.2 函數(shù)的說(shuō)明與使用,六、函數(shù)的嵌套與遞歸,函數(shù)遞歸,遞推階段:將原有問(wèn)題不斷地分解為新的子問(wèn)題,逐漸從未知向已知的方向推測(cè),最終到達(dá)已知的條件,即遞歸結(jié)束條件,這時(shí)遞推階段結(jié)束。,遞歸調(diào)用 的過(guò)程,回歸階段:從已知條件出發(fā),按照“遞推”的逆過(guò)程,逐一求值回歸,最后到達(dá)遞推的開(kāi)始處,結(jié)束回歸階段,完成遞歸調(diào)用。,5.2 函數(shù)的說(shuō)明與使用,六、函數(shù)的嵌套與遞歸,函數(shù)遞歸,#include
11、int f(int n) if (n=1) return 1; else return f (n-1)+n; void main( ) cout“s=”f(4)endl; ,遞歸終止條件,修改遞歸條件,#include int f(int n) if (n=1) return 1; else return f (n-1)+n; void main( ) cout“s=”f(4)endl; ,f(4),f(4),f(4),f(3),f(3),f(2),f(2),f(1),f(4)=f(3)+4,f(3)=f(2)+3,f(2)=f(1)+2,f(4)=6+4=10,f(3)=3+3=6,f(2)
12、=1+2=3,1,10,5.2 函數(shù)的說(shuō)明與使用,七、內(nèi)聯(lián)函數(shù),為什么要引進(jìn)內(nèi)聯(lián)函數(shù)?,#include int isnumber(char); void main( ) char c; while(c=cin.get( )!=n) if (isnumber(c) cout=0,#include int isnumber(char); void main( ) char c; while(c=cin.get( )!=n) if (ch=0 ,5.2 函數(shù)的說(shuō)明與使用,七、內(nèi)聯(lián)函數(shù),2. 內(nèi)聯(lián)函數(shù)的定義,inline 類(lèi)型說(shuō)明符 被調(diào)用函數(shù)名 (形參表),內(nèi)聯(lián)函數(shù)具有一般函數(shù)的特性,它與一般函數(shù)
13、的不同之處僅在于函數(shù)調(diào)用的處理。內(nèi)聯(lián)函數(shù)在調(diào)用時(shí),是將調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)體來(lái)替換。內(nèi)聯(lián)函數(shù)在開(kāi)始時(shí)僅聲明一次。,5.2 函數(shù)的說(shuō)明與使用,七、內(nèi)聯(lián)函數(shù),2. 內(nèi)聯(lián)函數(shù)的定義,#include inline int isnumber(char); void main( ) char c; while(c=cin.get( )!=n) if (isnumber(c) cout=0,內(nèi)聯(lián)函數(shù)必須在被調(diào)用之前聲明或定義。因?yàn)閮?nèi)聯(lián)函數(shù)的代碼必須在被替換之前生成。所以,程序若開(kāi)始時(shí)不聲明為inline,后面有inline也被視為普通函數(shù)。,內(nèi)聯(lián)函數(shù)中不能含有復(fù)雜的結(jié)構(gòu)控制語(yǔ)句,如switch和循環(huán)語(yǔ)句。
14、如果內(nèi)聯(lián)函數(shù)有這些語(yǔ)句,則編譯將該函數(shù)視為普通函數(shù)那樣產(chǎn)生函數(shù)調(diào)用。,遞歸函數(shù)不能用作內(nèi)聯(lián)函數(shù)。,內(nèi)聯(lián)函數(shù)只適用于15行的小函數(shù)。對(duì)一個(gè)含有許多語(yǔ)句的大函數(shù),函數(shù)調(diào)用和返回的開(kāi)銷(xiāo)相對(duì)來(lái)說(shuō)微不足道,沒(méi)必要用內(nèi)聯(lián)函數(shù)來(lái)實(shí)現(xiàn)。,八、函數(shù)重載,函數(shù)重載是指同一個(gè)函數(shù)名可以對(duì)應(yīng)著多個(gè)函數(shù)的實(shí)現(xiàn),即支持多個(gè)不同的函數(shù)采用同一名字。,5.2 函數(shù)的說(shuō)明與使用,八、函數(shù)重載,C+的函數(shù)如果在返回類(lèi)型、參數(shù)類(lèi)型、 參數(shù)個(gè)數(shù)、參數(shù)順序上有所不同,則認(rèn) 為是不同的。但重載函數(shù)如果僅僅是返 回類(lèi)型不同,則是不夠的,例如下面的 聲明是錯(cuò)誤的:,說(shuō)明,void func (int); int func(int);,5.2
15、 函數(shù)的說(shuō)明與使用,八、函數(shù)重載,舉例說(shuō)明參數(shù)類(lèi)型不同的重載函數(shù)的實(shí)現(xiàn),例1,#include int abs(int x) return x0?x:-x; float abs(float x) return x0?x:-x; void main( ) cout“-10的絕對(duì)值是:”abs(-10)endl; cout“-2.5的絕對(duì)值是:”abs(-2.5)endl; ,5.2 函數(shù)的說(shuō)明與使用,舉例說(shuō)明參數(shù)個(gè)數(shù)不同的重載函數(shù)的實(shí)現(xiàn),例2,#include int min(int a,int b) return ab?a:b; int min(int a,int b,int c) int t
16、=min(a,b);return min(t,c); int min(int a,int b,int c,int d) int t1=min(a,b); int t2=min(c,d); return min(t1,t2); void main( ) coutmin(13,5,4,9)endl; coutmin(-2,8,0)endl; ,八、函數(shù)重載,typedef定義的類(lèi)型只能使之相同于一個(gè) 已存在的類(lèi)型,而不能建立新的類(lèi)型, 所以不能用typedef定義的類(lèi)型名來(lái)區(qū)分 重載函數(shù)聲明的參數(shù)。例如下面的代碼 實(shí)際上是同一個(gè)函數(shù):,說(shuō)明,typedef INT int; void func(i
17、nt x) / void func(INT x) / /error,5.2 函數(shù)的說(shuō)明與使用,八、函數(shù)重載, 讓重載函數(shù)執(zhí)行不同的功能,是不好 的編程風(fēng)格。同名函數(shù)應(yīng)該具有相同 的功能。如果定義一個(gè)abs( )函數(shù)而 返回的卻是一個(gè)數(shù)的平方根,則程序 的可讀性受到破壞。,說(shuō)明,5.2 函數(shù)的說(shuō)明與使用,八、函數(shù)重載, 使用重載,應(yīng)避免產(chǎn)生二義性。,說(shuō)明,包含缺省參數(shù)時(shí),可能造成二義性。例如:,int sum(int a,int b,int c=0); int sum(int a,int b);,5.2 函數(shù)的說(shuō)明與使用,5.3 頭文件與多文件結(jié)構(gòu),一、頭文件,一個(gè)項(xiàng)目文件往往包含多個(gè)頭文件(.
18、h)和源文件(.cpp) 一般將聲明部分或者說(shuō)明部分(包括類(lèi)的聲明)形成.h文件,將函數(shù)的定義、類(lèi)的實(shí)現(xiàn)及類(lèi)的使用等形成.cpp。,/examplech317.h 關(guān)于函數(shù)原型聲明的頭文件 double cuboid(double x, double y); double cylinder(double h, double r); double spheroid(double r);,5.3 頭文件與多文件結(jié)構(gòu),二、多文件結(jié)構(gòu),一個(gè)C+程序稱(chēng)為一個(gè)工程(.dsp) 一個(gè)工程由一個(gè)或多個(gè)文件組成 一個(gè)文件可以包含多個(gè)函數(shù)定義,但一個(gè)函數(shù)的定義必須 完整地存在于一個(gè)文件中 一個(gè)文件可以被多個(gè)應(yīng)用程序共享,計(jì)算圓面積和矩形面積,計(jì)算圓面積和矩形面積,計(jì)算圓面積和矩形面積,用指定正文替換程序中出現(xiàn)的標(biāo)識(shí)符 形式#define 標(biāo)識(shí)符 文本,#undef 功能是刪除 由#define定義的宏,使之不再起作用,一、宏定義,5.4 編譯預(yù)處理,/ calculate.h #define
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 10485-2025道路車(chē)輛外部照明和光信號(hào)裝置環(huán)境耐久性
- 合同管理:土木建筑工程投標(biāo)全攻略
- CASS清算間接借記合同
- 10 我們當(dāng)?shù)氐娘L(fēng)俗 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- 探索:企業(yè)間合作合同模式多樣化幾種類(lèi)型值得關(guān)注
- 投資與融資合作協(xié)議合同
- 公司為員工提供購(gòu)車(chē)補(bǔ)貼合同
- 時(shí)尚配飾代理合同范文
- 商標(biāo)使用權(quán)租賃合同
- 10《父母多愛(ài)我》第一課時(shí)(教學(xué)設(shè)計(jì))-2023-2024學(xué)年道德與法治三年級(jí)上冊(cè)統(tǒng)編版
- 新版統(tǒng)編版一年級(jí)道德與法治下冊(cè)全冊(cè)教案(完整版)教學(xué)設(shè)計(jì)含教學(xué)反思
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 《幼兒教育政策與法規(guī)》教案-單元4 幼兒園的保育和教育
- 化工流程模擬實(shí)訓(xùn)AspenPlus教程第6章?lián)Q熱器單元模擬
- 中小學(xué)教師校本培訓(xùn)管理手冊(cè)
- 吹灰器檢修三措兩案
- 軸承專(zhuān)用中英文對(duì)照表 (完整版)
- 了解現(xiàn)代漢字字義的特點(diǎn)根據(jù)形旁的表義ppt課件
- 人教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)教材分析ppt課件
- 嵩晟富氫水銷(xiāo)售方案ppt課件
- 藥物療法和過(guò)敏試驗(yàn)法護(hù)理學(xué)基礎(chǔ)
評(píng)論
0/150
提交評(píng)論