華中師范大學(xué)物理系課件_第1頁
華中師范大學(xué)物理系課件_第2頁
華中師范大學(xué)物理系課件_第3頁
華中師范大學(xué)物理系課件_第4頁
華中師范大學(xué)物理系課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、華中師范大學(xué)物理系,1,第三章 函數(shù),華中師范大學(xué)物理系,C+語言程序設(shè)計,華中師范大學(xué)物理系,2,本章主要內(nèi)容,函數(shù)的聲明和調(diào)用 函數(shù)間的參數(shù)傳遞 內(nèi)聯(lián)函數(shù) 帶缺省形參值的函數(shù) 函數(shù)重載 函數(shù)模板 C+系統(tǒng)函數(shù),華中師范大學(xué)物理系,3,函數(shù)的聲明,函數(shù)是面向?qū)ο蟪绦蛟O(shè)計中的基本抽象單元,是對功能的抽象 函數(shù)定義的語法形式 類型標識符 函數(shù)名(形式參數(shù)表) 語句序列 ,函數(shù)的聲明與使用,若無參數(shù),寫void,是被初始化的內(nèi)部變量,壽命和可見性僅限于函數(shù)內(nèi)部,若無返回值,寫void,華中師范大學(xué)物理系,4,函數(shù)的聲明,形式參數(shù)表 name1, name2, ., namen 函數(shù)的返回值 由 r

2、eturn 語句給出,例如:return 0 無返回值的函數(shù)(void類型),不必寫return語句。,函數(shù)的聲明與使用,華中師范大學(xué)物理系,5,函數(shù)的調(diào)用,調(diào)用前先說明函數(shù)原型: 在調(diào)用函數(shù)的說明部分,或程序文件開頭所有函數(shù)之前,按如下形式說明: 類型標識符 被調(diào)用函數(shù)名 (含類型說明的形參表); 調(diào)用形式 函數(shù)名(實參列表) 嵌套調(diào)用 函數(shù)不允許嵌套聲明,但可以嵌套調(diào)用。 遞歸調(diào)用 函數(shù)直接或間接調(diào)用自身。,函數(shù)的聲明與使用,華中師范大學(xué)物理系,6,例3-1編寫一個求x的n次方的函數(shù),#include doublepower (double x, int n); void main(voi

3、d) cout 5 to the power 2 is power(5,2) endl; doublepower (double x, int n) double val = 1.0; while (n-) val = val*x; return(val); ,函數(shù)的聲明與使用,華中師范大學(xué)物理系,7,運行結(jié)果: 5 to the power 2 is 25,例3-1編寫一個求x的n次方的函數(shù),函數(shù)的聲明與使用,華中師范大學(xué)物理系,8,例3-2 數(shù)制轉(zhuǎn)換,題目: 輸入一個8位二進制數(shù),將其轉(zhuǎn)換為十進制數(shù)輸出。 例如:000011012 =0(27) +0(26) +0(25) +0(24) +

4、1(23) + 1(22) + 0(21) + 1(20)= 1310 所以,若輸入,則應(yīng)輸出13,函數(shù)的聲明與使用,#include double power (double x, int n); void main(void) int i; int value = 0; char ch; cout = 0; i-) cin ch; if (ch = 1) value += int(power(2,i); cout Decimal value is valueendl; ,double power (double x, int n) double val = 1.0; while (n-)

5、val *= x; return(val); 運行結(jié)果: Enter an 8 bit binary number 01101001 Decimal value is 105,華中師范大學(xué)物理系,11,例3-3編寫程序求的值,其中arctan用如下形式的級數(shù)計算: 直到級數(shù)某項絕對值不大于10-15為止;和x均為double型。,函數(shù)的聲明與使用,#include void main() double a,b; double arctan(double x) ; a=16.0*arctan(1/5.0) ; b=4.0*arctan(1/239.0) ; /注意:因為整數(shù)相除結(jié)果取整, /如果

6、參數(shù)寫1/5,1/239,結(jié)果就都是0 coutPI=a-bendl; ,double arctan(double x) int i; double r,e,f,sqr; sqr=x*x; r=0; e=x; i=1; while(e/i1e-15) f=e/i; r=(i%4=1)? r+f : r-f ; e=e*sqr; i+=2; return r ; ,運行結(jié)果: PI=3.14159,運行結(jié)果: PI=3.14159,華中師范大學(xué)物理系,15,例3-4,尋找并輸出11999之間的數(shù)m,它滿足m、m2和m3均為回文數(shù)。 回文:各位數(shù)字左右對稱的整數(shù)。例如:11滿足上述條件 112=1

7、21,113=1331。 分析: 10取余的方法,從最低位開始,依次取出該數(shù)的各位數(shù)字。按反序重新構(gòu)成新的數(shù),比較與原數(shù)是否相等,若相等,則原數(shù)為回文。,函數(shù)的聲明與使用,#include void main() bool symm(long n); long m; for(m=11; m1000; m+) if (symm(m) ,bool symm(long n) long i, m; i=n ; m=0 ; while(i) m=m*10+i%10; i=i/10 ; return ( m=n ); ,運行結(jié)果: m=11 m*m=121 m*m*m=1331 m=101 m*m=102

8、01 m*m*m=1030301 m=111 m*m=12321 m*m*m=1367631,華中師范大學(xué)物理系,19,函數(shù)調(diào)用的執(zhí)行過程,函數(shù)的聲明與使用,華中師范大學(xué)物理系,20,嵌套調(diào)用,函數(shù)的聲明與使用,main 調(diào)fun1() 結(jié)束,fun1() 調(diào)fun2() 返回,fun2() 返回,華中師范大學(xué)物理系,21,例3-6 輸入兩個整數(shù),求平方和。,#include void main(void) int a,b; int fun1(int x,int y); cinab; couta、b的平方和: fun1(a,b)endl; ,函數(shù)的聲明與使用,int fun1(int x,in

9、t y) int fun2(int m); return (fun2(x)+fun2(y); int fun2(int m) return (m*m); 運行結(jié)果: 3 4 a、b的平方和:25,華中師范大學(xué)物理系,23,遞歸調(diào)用,函數(shù)直接或間接地調(diào)用自身,稱為遞歸調(diào)用。 遞歸過程的兩個階段: 遞推: 4!=43! 3!=32! 2!=21! 1!=10! 0!=1 未知 已知 回歸: 4!=43!=243!=32!=62!=21!=21!=10!=10!=1 未知 已知,函數(shù)的聲明與使用,華中師范大學(xué)物理系,24,例3-8 求n!,分析:計算n!的公式如下: 這是一個遞歸形式的公式,應(yīng)該用遞

10、歸函數(shù)實現(xiàn)。,函數(shù)的聲明與使用,源程序: #include 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); ,void main() long fac(int n); int n; long y; coutn; y=fac(n); coutn!=yendl; 運行結(jié)果: Enter a positive integer:8 8!=40320,華中師范大學(xué)物理系,27,函數(shù)的參數(shù)傳遞機制 傳遞參數(shù)值,在函數(shù)被調(diào)用時才分配形參的存儲單元。

11、 實參可以是常量、變量或表達式。 實參類型必須與形參相符。 傳遞時是傳遞參數(shù)值,即單向傳遞。,函數(shù)的聲明與使用,華中師范大學(xué)物理系,28,函數(shù)的參數(shù)傳遞機制 參數(shù)值傳遞舉例,函數(shù)的聲明與使用,華中師范大學(xué)物理系,29,例3-11 輸入兩 整數(shù)交換后輸出,#include 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; ,函數(shù)的聲明與使用,void Swap(int a, int b) int t; t=a; a=b; b=t;

12、運行結(jié)果: x=5 y=10 x=5 y=10,華中師范大學(xué)物理系,31,函數(shù)的參數(shù)傳遞 用引用做形參,引用( 聲明一個引用時,必須同時對它進行初始化,使它指向一個已存在的對象。 一旦一個引用被初始化后,就不能改為指向其它對象。 引用可以作為形參 void swap(int,華中師范大學(xué)物理系,35,例3-13 引用調(diào)用舉例,#include #include void fiddle(int in1, int ,函數(shù)的聲明與使用,void fiddle(int in1, int 運行結(jié)果: The values are 7 12 The values are 107 112 The value

13、s are 7 112,華中師范大學(xué)物理系,37,內(nèi)聯(lián)函數(shù)聲明與使用,聲明時使用關(guān)鍵字 inline。 編譯時在調(diào)用處用函數(shù)體進行替換,節(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)用之前。 對內(nèi)聯(lián)函數(shù)不能進行異常接口聲明。,內(nèi)聯(lián)函數(shù),華中師范大學(xué)物理系,38,例3-14 內(nèi)聯(lián)函數(shù)應(yīng)用舉例,#include inline double CalArea(double radius) return 3.14*radius*radius; int main() double r(3.0); double area;

14、 area=CalArea(r); coutareaendl; return 0; ,內(nèi)聯(lián)函數(shù),華中師范大學(xué)物理系,39,缺省形參值的作用,函數(shù)在聲明時可以預(yù)先給出默認的形參值,調(diào)用時如給出實參,則采用實參值,否則采用預(yù)先給出的默認形參值。 例如:,int add(int x=5,int y=6) return x+y; ,void main(void) add(10,20); /10+20 add(10); /10+6 add(); /5+6 ,帶缺省形參值的函數(shù),華中師范大學(xué)物理系,40,缺省形參值的說明次序,缺省形參值必須從右向左順序聲明,并且在缺省形參值的右面不能有非缺省形參值的參數(shù)。

15、因為調(diào)用時實參取代形參是從左向右的順序。 例: int add(int x,int y=5,int z=6); /正確 int add(int x=1,int y=5,int z); /錯誤 int add(int x=1,int y,int z=6); /錯誤,帶缺省形參值的函數(shù),華中師范大學(xué)物理系,41,缺省形參值與函數(shù)的調(diào)用位置,調(diào)用出現(xiàn)在函數(shù)體實現(xiàn)之前時,缺省形參值必須在函數(shù)原形中給出;而當(dāng)調(diào)用出現(xiàn)在函數(shù)體實現(xiàn)之后時,缺省形參值需在函數(shù)實現(xiàn)時給出。 例:,int add(int x=5,int y=6); void main(void) add(); /調(diào)用在實現(xiàn)前 int add(i

16、nt x,int y) return x+y; ,int add(int x=5,int y=6) return x+y; void main(void) add(); /調(diào)用在實現(xiàn)后 ,帶缺省形參值的函數(shù),華中師范大學(xué)物理系,42,缺省形參值的作用域,在相同的作用域內(nèi),缺省形參值的說明應(yīng)保持唯一,但如果在不同的作用域內(nèi),允許說明不同的缺省形參。 例: int add(int x=1,int y=2); void main(void) int add(int x=3,int y=4); add(); /使用局部缺省形參值(實現(xiàn)3+4) void fun(void) . add(); /使用全局

17、缺省形參值(實現(xiàn)1+2) ,帶缺省形參值的函數(shù),華中師范大學(xué)物理系,43,例3-15帶缺省形參值的函數(shù)舉例,#include #include int get_volume(int length, int width = 2, int height = 3); int main() int x = 10, y = 12, z = 15; cout Some box data is ; cout get_volume(x, y, z) endl; cout Some box data is ; cout get_volume(x, y) endl; cout Some box data is ;

18、 cout get_volume(x) endl; cout Some box data is ; cout get_volume(x, 7) endl; cout Some box data is ; cout get_volume(5, 5, 5) endl; return 0; ,帶缺省形參值的函數(shù),int get_volume(int length, int width, int height) coutsetw(5)length setw(5)widthsetw(5)height ; return length * width * height; 運行結(jié)果: Some box dat

19、a is 10 12 15 1800 Some box data is 10 12 3 360 Some box data is 10 2 3 60 Some box data is 10 7 3 210 Some box data is 5 5 5 125,華中師范大學(xué)物理系,45,重載函數(shù)的聲明,C+允許功能相近的函數(shù)在相同的作用域內(nèi)以相同函數(shù)名聲明,從而形成重載。方便使用,便于記憶。 例:,函 數(shù) 重 載,華中師范大學(xué)物理系,46,注意事項,不要將不同功能的函數(shù)聲明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果的誤解、混淆。這樣不好:,函 數(shù) 重 載,重載函數(shù)的形參必須不同: 個數(shù)不同或類型不同。 編譯程

20、序?qū)⒏鶕?jù)實參和形參的類型及個數(shù)的最佳匹配來選擇調(diào)用哪一個函數(shù)。,華中師范大學(xué)物理系,47,例3-16重載函數(shù)應(yīng)用舉例,編寫三個名為add的重載函數(shù),分別實現(xiàn)兩整數(shù)相加、兩實數(shù)相加和兩個復(fù)數(shù)相加的功能。 #include struct complex double real; 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, comp

21、lex c2); coutmn; coutinteger m+n=add(m,n)endl;,coutxy; coutc1.realc1.imaginary; coutc2.realc2.imaginary; c3=add(c1,c2); coutcomplex number ( c1.real , c1.imaginary )+(c2.real, c2.imaginary)=(c3.real, c3.imaginary)n; ,int add(int m, int n) return m+n; double add(double x, double y) return x+y; comple

22、x add(complex c1, complex c2) complex c; c.real=c1.real+c2.real; c.imaginary=c1.imaginary+c2.imaginary; return c; ,運行結(jié)果: Enter two integer: 3 5 integer 3+5=8 Enter two real number: 2.3 5.8 real number 2.3+5.8= 8.1 Enter the first complex number: 12.3 45.6 Enter the second complex number: 56.7 67.8 c

23、omplex number (12.3,45.6)+(56.7,67.8)= (69,113.4),華中師范大學(xué)物理系,52,函數(shù)模板的聲明,函數(shù)模板可以用來創(chuàng)建一個通用功能的函數(shù),以支持多種不同形參,進一步簡化重載函數(shù)的函數(shù)體設(shè)計。 聲明方法: template 函數(shù)聲明,函 數(shù) 模 板,華中師范大學(xué)物理系,53,例3-17 求絕對值函數(shù)的模板,#include template T abs(T x) return x0?-x:x; void main() int n=-5; double d=-5.5; coutabs(n)endl; coutabs(d)endl; ,函 數(shù) 模 板,運行

24、結(jié)果: 5 5.5 分析 編譯器從調(diào)用abs()時實參的類型,推導(dǎo)出函數(shù)模板的類型參數(shù)。例如,對于調(diào)用表達式abs(n),由于實參n為int型,所以推導(dǎo)出模板中類型參數(shù)T為int。 當(dāng)類型參數(shù)的含義確定后,編譯器將以函數(shù)模板為樣板,生成一個函數(shù):int abs(int x) return x0?-x:x; ,華中師范大學(xué)物理系,55,C+系統(tǒng)函數(shù),C+的系統(tǒng)庫中提供了幾百個函數(shù)可供程序員使用。 例如:求平方根函數(shù)(sprt)、求絕對值函數(shù)(abs)等。 使用系統(tǒng)函數(shù)時要包含相應(yīng)的頭文件。 例如:math.h,使用C+系統(tǒng)函數(shù),華中師范大學(xué)物理系,56,例3-18系統(tǒng)函數(shù)應(yīng)用舉例,題目: 從鍵盤

25、輸入一個角度值,求出該角度的正弦值、余弦值和正切值。 分析: 系統(tǒng)函數(shù)中提供了求正弦值、余弦值和正切值的函數(shù):sin()、cos()、tan(),函數(shù)的說明在頭文件math.h中。,使用C+系統(tǒng)函數(shù),#include #include const double pi(3.14159265); void main() double a,b; cina; b=a*pi/180; coutsin(a)=sin(b)endl; coutcos(a)=cos(b)endl; couttan(a)=tan(b)endl; ,運行結(jié)果: 30 sin(30)=0.5 cos(30)=0.866025 tan

26、(30)=0.57735,華中師范大學(xué)物理系,59,查找系統(tǒng)函數(shù)的使用說明,查編譯系統(tǒng)的庫函數(shù)手冊 查聯(lián)機幫助VC+6.0聯(lián)機幫助的使用方法: help/Contents-(“活動子集”欄)Visual C+ Documentation - Visual C+ Documentation -Using Visual C+ - Visual C+ Programmers Guide - Run-Time Library Reference -Run Time Routines by Category - Run Time Routines by Category,使用C+系統(tǒng)函數(shù),華中師范大學(xué)物理系,60,作 業(yè),復(fù)習(xí)第三章,預(yù)習(xí)第四章 3-2, 3-8, 3-11, 3-13, 3-15 學(xué)習(xí)使用聯(lián)機幫助系統(tǒng)查找系統(tǒng)函數(shù) 實驗三,華中師范大學(xué)物理系,62,例3-9,用遞歸法計算從n個人中選擇k個人組成一個委員會的不同組合數(shù)。 分析: 由n個人里選k個人的組合數(shù) =由n-1個人里選k個人的組合數(shù) +由n-1個人里選k-1個人的組合數(shù) 當(dāng)n=k或k=0時,組合數(shù)為1,函數(shù)的聲明與使用,#include void main() int n,k; int comm(int n, in

溫馨提示

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

評論

0/150

提交評論