C++程序設(shè)計(jì)與實(shí)踐:03-第4章 函數(shù)_第1頁
C++程序設(shè)計(jì)與實(shí)踐:03-第4章 函數(shù)_第2頁
C++程序設(shè)計(jì)與實(shí)踐:03-第4章 函數(shù)_第3頁
C++程序設(shè)計(jì)與實(shí)踐:03-第4章 函數(shù)_第4頁
C++程序設(shè)計(jì)與實(shí)踐:03-第4章 函數(shù)_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 C+的數(shù)據(jù)類型基本類型:整型、浮點(diǎn)型、枚舉型、地址類型:引用、指針結(jié)構(gòu)化類型:數(shù)組、結(jié)構(gòu)體、聯(lián)合體、類void類型 基本概念標(biāo)示符常量變量運(yùn)算符和表達(dá)式#includeint Div(int x,int y);void main() try cout5/2=Div(5,2)endl; cout8/0=Div(8,0)endl; cout7/1=Div(7,1)endl; catch(int) coutexcept of deviding zero.n; coutthat is ok.n;int Div(int x,int y) if(y=0) throw y;return x/y;程序運(yùn)行結(jié)

2、果如下:程序運(yùn)行結(jié)果如下:5/2=25/2=2except of deviding zero.except of deviding zero.that is ok.that is ok.。函數(shù)是面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)功能的抽象函數(shù)定義的語法形式返回值類型標(biāo)識(shí)符返回值類型標(biāo)識(shí)符指的是函數(shù)體語句執(zhí)行完指的是函數(shù)體語句執(zhí)行完成后,函數(shù)返回的值的類型,如成后,函數(shù)返回的值的類型,如int,float等,等,若函數(shù)無返回值,則用空類型若函數(shù)無返回值,則用空類型void來定義函來定義函數(shù)的返回值。缺省情況為數(shù)的返回值。缺省情況為int型。型。函數(shù)的定義函數(shù)名由任何合法的標(biāo)識(shí)符構(gòu)成。建議將函數(shù)名的命名與函數(shù)

3、內(nèi)容有一定關(guān)系。形式參數(shù)表 name1, name2, ., namen形參說明表是一系列用逗號(hào)分開的每個(gè)形參變量說明。如:int x, int y, int z這表示形參變量有三個(gè):x, y, z。它們的類型都是int型。函數(shù)的返回值 由 return 語句給出,例如:return 0; 無返回值的函數(shù)(void類型),不必寫return語句。函數(shù)返回語句的形式有以下兩種: 函數(shù)無返回值的情況:return; 函數(shù)有返回值的情況:return(表達(dá)式的值);在第種情況下要注意“表達(dá)式的值”的類型必須與函數(shù)返回值的類型相一致。函數(shù)語句體是放在一對(duì)花括號(hào) 中,由局部數(shù)據(jù)類型描述和功能實(shí)現(xiàn)兩部分組

4、成。一個(gè)程序只能有一個(gè)(一個(gè)程序只能有一個(gè)(mainmain)主函數(shù))主函數(shù) ,主函數(shù)可以聲明為有參函數(shù),也可以聲主函數(shù)可以聲明為有參函數(shù),也可以聲明為無參函數(shù);可以聲明為有返回值函明為無參函數(shù);可以聲明為有返回值函數(shù),也可以聲明為無返回值函數(shù)。數(shù),也可以聲明為無返回值函數(shù)。函數(shù)的調(diào)用調(diào)用前先聲明函數(shù)原型:在調(diào)用函數(shù)中,或程序文件中所有函數(shù)之外,按如下形式說明:類型標(biāo)識(shí)符 被調(diào)用函數(shù)名 (含類型說明的形參表);使用位置:函數(shù)調(diào)用之前使用情況:函數(shù)定義出現(xiàn)在函數(shù)調(diào)用之后,或在其它文件調(diào)用形式 函數(shù)名(實(shí)參列表)實(shí)參個(gè)數(shù)應(yīng)該與形參個(gè)數(shù)相同實(shí)參表達(dá)式類型應(yīng)該與形參對(duì)應(yīng)表達(dá)式類型相同調(diào)用時(shí)實(shí)參表達(dá)式的

5、值被傳遞給函數(shù),為對(duì)應(yīng)的形參變量所接受函數(shù)調(diào)用兩種情形1. 作為表達(dá)式的函數(shù)調(diào)用例:s=min(5,7)*5;這時(shí)函數(shù)本身是一個(gè)表達(dá)式,或是某個(gè)表達(dá)式的一個(gè)子表達(dá)式,其值參與表達(dá)式求值 無返回值的函數(shù)不能被作為表達(dá)式加以調(diào)用2. 作為語句的函數(shù)調(diào)用 通過函數(shù)的副作用發(fā)揮其作用 若調(diào)用的是有返回值的函數(shù),其返回值被舍棄 函數(shù)的作用通過其副作用被實(shí)現(xiàn),沒有副作用的函數(shù)作為語句調(diào)用無意義 例:min(5,7);/無意義main()調(diào)fun()結(jié)束fun()返回保存:返回地址當(dāng)前現(xiàn)場(chǎng)恢復(fù):主調(diào)程序現(xiàn)場(chǎng)返回地址函數(shù)1調(diào)用了函數(shù)2,函數(shù)2再調(diào)用函數(shù)3就形成函數(shù)的嵌套調(diào)用。main調(diào)fun1()結(jié)束fun1

6、()調(diào)fun2()返回fun2()返回嵌套調(diào)用嵌套調(diào)用 傳遞指針實(shí)際上仍屬于傳值的范疇:形參指針是實(shí)參指針的拷貝。不過,這兩個(gè)指針指向了同一個(gè)單元。因此,通過這兩個(gè)指針的任何一個(gè)都可以間接地改變實(shí)參的值。#includeusing namespace std;void Swap(int& a, int& b);int main() int x(5), y(10);coutx=x y=yendl;Swap(x,y);coutx=x y=yendl;return 0;void Swap(int& a, int& b) int t;t=a;a=b;b=t;運(yùn)行結(jié)果運(yùn)行結(jié)果:x=5 y=10 x=10

7、 y=5t=a;x5t5x 的別名axy510y 的別名x 的別名aby 的別名x 的別名abx10y10a=bb=t;y5t5y 的地址bxy105Swap(x,y);使用指針和引用參數(shù)具有實(shí)參被更改的潛在“危險(xiǎn)”。為了避免這種危險(xiǎn),可以給形參加上const約束,這是形參/實(shí)參成為只讀參數(shù),從而避免了被更改的問題。例如:26int add(int x=5,int y=6);void main(void) add(); /調(diào)用在實(shí)現(xiàn)前調(diào)用在實(shí)現(xiàn)前int add(int x,int y) return x+y; int add(int x=5,int y=6) return x+y; void

8、main(void) add(); /調(diào)用在實(shí)現(xiàn)后調(diào)用在實(shí)現(xiàn)后4.3 函數(shù)重載int add(int x, int y);int add(int a, int b);編譯器不以形參名形參名來區(qū)分int add(int x, int y);void add(int x, int y);編譯器不以返回值返回值來區(qū)分函數(shù)重載舉例編寫三個(gè)名為編寫三個(gè)名為add的重載函數(shù),分別實(shí)現(xiàn)兩整的重載函數(shù),分別實(shí)現(xiàn)兩整數(shù)相加、兩實(shí)數(shù)相加和兩個(gè)復(fù)數(shù)相加的功能。數(shù)相加、兩實(shí)數(shù)相加和兩個(gè)復(fù)數(shù)相加的功能。/3_16.cpp#includeusing namespace std;struct complexdouble r

9、eal;double imaginary;void main(void)int m, n;double x, y;complex c1, c2, c3;int add(int m, int n);double add(double x, double y);complex add(complex c1, complex c2);coutmn;coutinteger m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y)endl;coutc1.realc1.imaginary;coutc2.realc2.imaginary;c3=add(c1,

10、c2);coutcomplex number ( c1.real , c1.imaginary )+(c2.real, c2.imaginary)=(c3.real, c3.imaginary)n;運(yùn)行結(jié)果:Enter two integer: 3 5integer 3+5=8Enter two real number: 2.3 5.8real number 2.3+5.8= 8.1Enter the first complex number: 12.3 45.6Enter the second complex number: 56.7 67.8complex number (12.3,45.

11、6)+(56.7,67.8)= (69,113.4)直接將參數(shù)表達(dá)式放入宏體中例:#define abs(v) (v)0?-(v):(v)當(dāng)調(diào)用為abs(+a)時(shí),將不能正確工作內(nèi)聯(lián)函數(shù)定義:inline long abs(long num)return (num0?-num:num);聲明時(shí)使用關(guān)鍵字 inline。編譯時(shí)在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開銷。注意: 內(nèi) 聯(lián) 函 數(shù) 體 內(nèi) 不 能 有 循 環(huán) 語 句 和switch語句。 內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。 對(duì)內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明。#includeusing namespace s

12、td;inline double CalArea(double radius) return 3.14*radius*radius;int main()double r(3.0);double area;area=CalArea(r);coutareaendl;return 0;運(yùn)行結(jié)果:Hello!Welcome to c+!聲明區(qū) #include:函數(shù)聲明函數(shù)聲明定義全局變量定義全局變量主程序區(qū)類型類型 main(參數(shù)參數(shù)行行) 程序主體;程序主體; 函數(shù)定義區(qū)函數(shù)定義函數(shù)定義 函數(shù)主體;函數(shù)主體; 3函數(shù)定義區(qū)函數(shù)定義區(qū) 程序中除了程序中除了mainmain函數(shù)之外,還可以包含其它的函

13、數(shù)之外,還可以包含其它的函數(shù),每個(gè)函數(shù)是由函數(shù)說明和函數(shù)體兩部分構(gòu)函數(shù),每個(gè)函數(shù)是由函數(shù)說明和函數(shù)體兩部分構(gòu)成的。如圖所示:成的。如圖所示:函數(shù)定義區(qū)函數(shù)說明int max(int a,int b)函數(shù)體int c;c=a+b;return(c);在在C+中,將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的中,將數(shù)據(jù)從一個(gè)對(duì)象到另一個(gè)對(duì)象的流動(dòng)抽象為流動(dòng)抽象為“流流”。l流在使用前要被建立,使用后要被刪除;l從流中獲取數(shù)據(jù)的操作稱為提取操作;l向流中添加數(shù)據(jù)的操作稱為插入操作;l數(shù)據(jù)的輸入與輸出是通過流來實(shí)現(xiàn)的;lcin是預(yù)定義的用來處理標(biāo)準(zhǔn)輸入的流類對(duì)象-鍵盤;lcout是預(yù)定義的用來處理標(biāo)準(zhǔn)輸出的流類對(duì)象屏

14、幕;“”是預(yù)定義的提取符,作用在流類對(duì)象cint上,用來實(shí)現(xiàn)鍵盤輸入。 格式: cin變量變量. 在輸入語句中,可以串聯(lián)多個(gè)提取運(yùn)算符,用于實(shí)現(xiàn)給多個(gè)變量輸入數(shù)據(jù),變量的類型可以不一致。例如: int a,b; cinab;要求從鍵盤上輸入兩個(gè)int型數(shù),兩數(shù)之間以空格分隔。若輸入 5 6這時(shí),變量a得到的值為5,變量b得到的值為6。在數(shù)據(jù)輸入輸出時(shí),在數(shù)據(jù)輸入輸出時(shí),cincin和和coutcout能對(duì)數(shù)據(jù)自動(dòng)按正能對(duì)數(shù)據(jù)自動(dòng)按正確的格式進(jìn)行處理,除此之外,還可按特殊的格確的格式進(jìn)行處理,除此之外,還可按特殊的格式加以處理式加以處理 。這些操縱符可以直接嵌入到輸入輸出語句中實(shí)現(xiàn)這些操縱符可以

15、直接嵌入到輸入輸出語句中實(shí)現(xiàn)I/OI/O控制。控制。使用該操縱符,必須在源程序的開頭包含使用該操縱符,必須在源程序的開頭包含iomainipiomainip頭文件頭文件。操縱符名 含義dec 數(shù)值數(shù)據(jù)采用十進(jìn)制hex 數(shù)值數(shù)據(jù)采用十六進(jìn)制oct 數(shù)值數(shù)據(jù)采用八進(jìn)制ws 提取空白符endl 插入換行符,并刷新流ends 插入空白符setprecision(int) 設(shè)置浮點(diǎn)數(shù)的小數(shù)點(diǎn)位數(shù)(包括小數(shù)點(diǎn))setw(int) 設(shè)置域?qū)抍outsetw(5) setprecision(3) 3.1415endl;編寫一個(gè)求x的n次方的函數(shù)#include using namespace std;doub

16、le power(double x, int n);/函數(shù)聲明void main(void)cout “5 to the power 2 is ” power(5,2) endl;/函數(shù)使用double power(double x, int n)/函數(shù)定義double val = 1.0;while (n-)val = val*x;return(val);運(yùn)行結(jié)果:運(yùn)行結(jié)果:5 to the power 2 is 25#include using namespace std;void main(void) int a,b; int fun1(int x,int y); cinab; cout

17、a、b的平方和: fun1(a,b)endl;int fun1(int x,int y) /求平方和 int fun2(int m); return (fun2(x)+fun2(y);int fun2(int m) /求平方 return (m*m);運(yùn)行結(jié)果:3 4a、b的平方和:25分析:計(jì)算n!的公式如下:這是一個(gè)遞歸形式的公式,應(yīng)該用遞歸函數(shù)實(shí)現(xiàn)。)0()!1()0(1!nnnnn源程序:#include using namespace std;long fac(int n) long f; if (n0) coutn0,data error!endl; else if (n= =0) f=1; else f=fac(n-1)*n; return(f);int main() long fac(int n); int n; long y; coutn; y=fac(n); coutn!=yendl;運(yùn)行結(jié)果:Enter a positive integer:88!=40320#in

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論