計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:函數(shù)_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:函數(shù)_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:函數(shù)_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:函數(shù)_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件:函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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)介

函數(shù)本章內(nèi)容第一節(jié)函數(shù)的概念第二節(jié)函數(shù)的定義第三節(jié)函數(shù)的調(diào)用第四節(jié)函數(shù)的聲明第五節(jié)參數(shù)傳遞第六節(jié)嵌套調(diào)用和遞歸調(diào)用第七節(jié)函數(shù)重載和函數(shù)模板(擴(kuò)展)第八節(jié)變量的作用域和生存期(擴(kuò)展)第一節(jié)函數(shù)的概念一、函數(shù)的概念一個(gè)C++源程序由一個(gè)main函數(shù)和若干個(gè)函數(shù)組成,主函數(shù)main有且只能有一個(gè)。編寫函數(shù)的目的在于:使程序簡(jiǎn)潔明了,代碼可重用性。二、函數(shù)的分類系統(tǒng)函數(shù)內(nèi)置函數(shù):數(shù)學(xué)函數(shù)、字符串函數(shù)、類型轉(zhuǎn)換函數(shù)等標(biāo)準(zhǔn)庫(kù)函數(shù):C++標(biāo)準(zhǔn)庫(kù)提供的一組函數(shù)用戶自定義函數(shù)是程序員為了完成特定功能編寫的函數(shù)。用戶自定義函數(shù)第二節(jié)函數(shù)的定義一、函數(shù)的定義返回值類型函數(shù)名(形參列表){

函數(shù)體語(yǔ)句

return表達(dá)式}1、返回值類型返回值類型就是函數(shù)返回值的數(shù)據(jù)類型。2、函數(shù)名編寫函數(shù)需要確定函數(shù)名,函數(shù)名應(yīng)遵循標(biāo)識(shí)符的命名規(guī)則。參數(shù)定義時(shí)要指明參數(shù)類型和參數(shù)名稱;參數(shù)之間用逗號(hào)分隔;函數(shù)也可以沒(méi)有參數(shù),但括號(hào)不能省略。

例如:intfun(inta,intb) 3、形參列表只有函數(shù)被調(diào)用時(shí),形參才被分配內(nèi)存單元,數(shù)據(jù)傳遞給形參供函數(shù)處理。函數(shù)調(diào)用結(jié)束,形參就被釋放。形參列表的格式為:類型1參數(shù)名1,類型2參數(shù)名2,類型3參數(shù)名3,…4、函數(shù)體語(yǔ)句函數(shù)體是一組能完成特定功能的語(yǔ)句序列的集合。5、return表達(dá)式函數(shù)通過(guò)return語(yǔ)句返回一個(gè)值給調(diào)用它的函數(shù)。return后面的表達(dá)式的類型和返回值類型一致。一個(gè)函數(shù)可以有1個(gè)以上return語(yǔ)句。函數(shù)中沒(méi)有return語(yǔ)句,表示無(wú)返回值;返回值類型應(yīng)用void定義,表示為空類型。二、函數(shù)定義的常見(jiàn)樣式第三節(jié)函數(shù)的調(diào)用用戶自定義函數(shù)并不能夠獨(dú)立執(zhí)行,必須通過(guò)主函數(shù)main或者其它函數(shù)的調(diào)用才能引發(fā)函數(shù)的執(zhí)行。函數(shù)調(diào)用的一般形式為:

函數(shù)名(實(shí)參列表)一、實(shí)參列表實(shí)參可以是常量、變量、表達(dá)式、指針,實(shí)參必須有確定的值。

在調(diào)用函數(shù)時(shí),函數(shù)名后面括號(hào)中的表達(dá)式稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。實(shí)參與形參的個(gè)數(shù)、類型、次序要一一對(duì)應(yīng)。函數(shù)調(diào)用時(shí),將實(shí)參的值賦給形參變量。實(shí)參和形參占用不同的存儲(chǔ)單元,名字可以相同,也可以不同。二、函數(shù)調(diào)用的形式調(diào)用沒(méi)有返回值的函數(shù)(返回值類型為void,沒(méi)有return語(yǔ)句),函數(shù)調(diào)用以語(yǔ)句的形式出現(xiàn),語(yǔ)句后面有分號(hào)。1、函數(shù)語(yǔ)句例9-2:調(diào)用有參無(wú)返的函數(shù)fun2。#include<iostream>usingnamespacestd;//定義函數(shù)fun2,有參無(wú)返voidfun2(inta,intb) { doublec; c=1.0*a/b; cout<<c<<endl; }//主函數(shù)main()intmain() { intx,y; cin>>x>>y; fun2(x,y); //以語(yǔ)句形式調(diào)用函數(shù)fun2,將實(shí)參x、y依次賦給形參a、b return0;}調(diào)用有返回值的函數(shù),函數(shù)調(diào)用一般出現(xiàn)在表達(dá)式中。2、函數(shù)表達(dá)式例9-3:調(diào)用有參有返的函數(shù)fun1。#include<iostream>usingnamespacestd;//定義函數(shù)fun1,有參有返doublefun1(inta,intb){ doublec; c=1.0*a/b; returnc;}//主函數(shù)main()intmain(){ intx,y; doublez; cin>>x>>y; z=fun1(x,y); //函數(shù)調(diào)用出現(xiàn)在賦值表達(dá)式中

cout<<z<<endl; return0;}函數(shù)調(diào)用與返回的過(guò)程第四節(jié)函數(shù)的聲明

使用函數(shù)前首先需要對(duì)函數(shù)原型進(jìn)行聲明。函數(shù)聲明的作用就是告訴編譯器:函數(shù)的名稱、類型和形參。函數(shù)聲明的形式為:

返回值類型函數(shù)名(形參列表);函數(shù)原型聲明的原則如下:如果函數(shù)定義在先,調(diào)用在后,則無(wú)需函數(shù)聲明。如果函數(shù)定義在后,調(diào)用在先,則必須事先聲明函數(shù)原型,避免發(fā)生編譯錯(cuò)誤。#include<iostream>usingnamespacestd;doublefun1(inta,intb); //函數(shù)聲明,語(yǔ)句后面有分號(hào)//主函數(shù)main()intmain(){ intx,y; doublez; cin>>x>>y; z=fun1(x,y); cout<<z<<endl; return0;}//定義函數(shù)fun1doublefun1(inta,intb){ doublec; c=1.0*a/b; returnc;}例9-4:調(diào)用有參有返的函數(shù)fun1。函數(shù)定義在后,調(diào)用在前。第五節(jié)參數(shù)傳遞函數(shù)的調(diào)用實(shí)質(zhì)就是實(shí)參傳遞給形參的過(guò)程。實(shí)參與形參的傳遞方式分為三類:傳值調(diào)用傳址調(diào)用引用調(diào)用一、傳值調(diào)用把實(shí)參表達(dá)式的值傳送給對(duì)應(yīng)的形參變量的傳遞方式,稱為傳值調(diào)用。函數(shù)調(diào)用時(shí),系統(tǒng)為形參分配存儲(chǔ)單元,將實(shí)參的值傳遞給形參;在函數(shù)體中的操作都是在形參的存儲(chǔ)單元中進(jìn)行,對(duì)形參的任何改變都與實(shí)參無(wú)關(guān)。當(dāng)函數(shù)調(diào)用結(jié)束,釋放形參所占用的存儲(chǔ)單元,返回主調(diào)函數(shù)。傳值調(diào)用的特點(diǎn)是實(shí)參向形參的單向傳遞。例9-5:閱讀程序,分析運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;intfun(inta);//函數(shù)聲明//主函數(shù)intmain(){inta,result;cin>>a;cout<<"函數(shù)調(diào)用前,a的值="<<a<<endl;result=fun(a);//實(shí)參acout<<"函數(shù)調(diào)用后,a的值="<<a<<endl;return0;}//定義函數(shù)intfun(inta)//形參a{a=2*a;//形參a的值發(fā)生改變

returna;//返回結(jié)果}二、傳址調(diào)用數(shù)組作為參數(shù)傳遞時(shí),默認(rèn)傳遞方式是傳址調(diào)用。形參數(shù)組和實(shí)參數(shù)組使用相同的內(nèi)存空間,在被調(diào)函數(shù)中對(duì)形參數(shù)組的任何修改都會(huì)影響對(duì)應(yīng)實(shí)參數(shù)組的內(nèi)容。形參數(shù)組的寫法:類型形參數(shù)組名[]

例如:voidsort(inta[])

實(shí)參數(shù)組的寫法:實(shí)參數(shù)組名

例如:sort(a);#include<iostream>usingnamespacestd;voidsort(inta[]);intmain(){ inta[10],i,j,t; for(i=0;i<10;i++) //輸入10個(gè)整數(shù)

cin>>a[i]; sort(a); //調(diào)用函數(shù)sort() for(i=0;i<10;i++) //輸出排序結(jié)果

cout<<a[i]<<""; return0;}voidsort(inta[]) //sort()函數(shù),冒泡排序法降序排序{ inti,j,t; for(i=0;i<9;i++) //冒泡排序,循環(huán)9次

{ for(j=0;j<9-i;j++) //一趟冒泡排序

{ if(a[j]<a[j+1]) //兩兩比較大小

{ t=a[j];a[j]=a[j+1];a[j+1]=t;//交換

} } }}例9-6:對(duì)含有10個(gè)整數(shù)的整型數(shù)組a,從大到小進(jìn)行排序。在主函數(shù)main()中輸入輸出數(shù)組元素,在sort()函數(shù)中用冒泡排序法對(duì)數(shù)組元素進(jìn)行降序排序,數(shù)組作為函數(shù)參數(shù)進(jìn)行傳遞調(diào)用。三、引用調(diào)用引用調(diào)用時(shí),形參是引用變量,實(shí)參只能是變量名。引用參數(shù)傳遞的特點(diǎn)是實(shí)參和形參公用內(nèi)存單元,形參的改變直接影響對(duì)應(yīng)實(shí)參的內(nèi)容。引用變量是變量的另一個(gè)別名,它們兩個(gè)共享同一個(gè)內(nèi)存地址,只是名字不同而已。語(yǔ)法格式:

數(shù)據(jù)類型&別名=原名 例如:

inta=10; //a是整型變量

int&b=a; //b是a的別名例9-7:輸入兩個(gè)整數(shù),交換兩個(gè)整數(shù)的值。例如:輸入2和3,輸出3和2。#include<iostream>usingnamespacestd;voidSwap(int&x,int&y)//交換數(shù)值函數(shù),形參是引用變量{intt=x;x=y;y=t;}intmain(){inta,b;cin>>a>>b;Swap(a,b);//引用調(diào)用交換數(shù)值函數(shù)

cout<<a<<""<<b<<endl;return0;}第六節(jié)嵌套調(diào)用和遞歸調(diào)用一、嵌套調(diào)用在一個(gè)函數(shù)中調(diào)用其它函數(shù)稱為函數(shù)嵌套。除了main()函數(shù),其它的函數(shù)是獨(dú)立平行的,函數(shù)之間可以互相調(diào)用。比如主函數(shù)調(diào)用sct函數(shù),sct函數(shù)再調(diào)用gcd函數(shù),這便形成函數(shù)的嵌套調(diào)用。引用調(diào)用#include<iostream>usingnamespacestd;intgcd(intm,intn);intsct(intm,intn);intmain(){ intm,n; cin>>m>>n; cout<<"最大公約數(shù)="<<gcd(m,n)<<endl; cout<<"最小公倍數(shù)="<<sct(m,n)<<endl; return0;}//定義函數(shù)gcd,求最大公約數(shù)intgcd(intm,intn){ inti,max; max=m>n?m:n; for(i=max;i>0;i--) if(m%i==0&&n%i==0) returni;}//定義函數(shù)sct,求最小公倍數(shù)intsct(intm,intn){ returnm*n/gcd(m,n);}例9-8:求正整數(shù)m和n的最大公約數(shù)和最小公倍數(shù)。二、遞歸調(diào)用函數(shù)直接或間接的調(diào)用自身,稱為遞歸調(diào)用。例9-9:用遞歸函數(shù)求n!。計(jì)算階乘是遞歸調(diào)用的經(jīng)典示例。分析:階乘的計(jì)算公式如下

n!=1(n=0或n=1) n!=n*(n-1)!(n>1)#include<iostream>usingnamespacestd;intfact(intn);intmain(){ intn; cin>>n; cout<<fact(n)<<endl; return0;}//定義fact函數(shù)intfact(intn){ if(n==1||n==0) return1; else returnn*fact(n-1); //fact函數(shù)中又調(diào)用fact函數(shù)}第七節(jié)函數(shù)重載和函數(shù)模板一、函數(shù)重載函數(shù)重載是函數(shù)的一種特殊情況。即定義函數(shù)名相同但形參列表(形參個(gè)數(shù)或形參類型)不同的多個(gè)函數(shù),這些函數(shù)稱為重載函數(shù)。常用來(lái)處理功能類似但數(shù)據(jù)類型不同的問(wèn)題。#include<iostream>usingnamespacestd;intmax(inta,intb) //重載函數(shù){ returna>b?a:b;}doublemax(doublea,doubleb) //重載函數(shù){ returna>b?a:b;}charmax(chara,charb) //重載函數(shù){ returna>b?a:b;}//主函數(shù)intmain(){ inta,b; doublex,y; charc1,c2; cin>>a>>b; cout<<"整數(shù)比較,最大值是"<<max(a,b)<<endl; cin>>x>>y; cout<<"浮點(diǎn)數(shù)比較,最大值是"<<max(x,y)<<endl; cin>>c1>>c2; cout<<"字符比較,最大值是"<<max(c1,c2)<<endl; return0;}例9-10:編寫三個(gè)名為max的函數(shù),分別判斷兩個(gè)整數(shù)的大小、兩個(gè)浮點(diǎn)數(shù)的大小和兩個(gè)字符的大小。二、函數(shù)模板函數(shù)模板是創(chuàng)建一個(gè)抽象通用的函數(shù),函數(shù)類型和形參的類型不具體指定,用一個(gè)虛擬類型來(lái)代表。凡是函數(shù)體相同的函數(shù)都可以調(diào)用這個(gè)函數(shù)模板,系統(tǒng)會(huì)根據(jù)實(shí)參的類型來(lái)取代模板中的虛擬類型,從而實(shí)現(xiàn)不同函數(shù)的功能。其中template和typename是關(guān)鍵字。類型參數(shù)和函數(shù)類型是一個(gè)虛擬類型,可以是任何一個(gè)合法的標(biāo)識(shí)符。在調(diào)用函數(shù)模板時(shí)指定具體的類型,從而創(chuàng)建對(duì)應(yīng)的函數(shù)。函模模板的定義形式為:

template<typenameT>

返回值類型函數(shù)名(形參列表) {

函數(shù)體 }例9-11:定義一個(gè)函數(shù)模板,求兩個(gè)數(shù)據(jù)的最大值。#include<iostream>usingnamespacestd;//定義模板函數(shù)template<typenameT> TMax(Ta,Tb){ returna>b?a:b;}//主函數(shù)intmain(){ inta,b; doublex,y; charc1,c2; cin>>a>>b; cout<<"整數(shù)比較,最大值是"<<Max(a,b)<<endl; cin>>x>>y; cout<<"浮點(diǎn)數(shù)比較,最大值是"<<Max(x,y)<<endl; cin>>c1>>c2; cout<<"字符比較,最大值是"<<Max(c1,c2)<<endl; return0;}第八節(jié)變量的作用域和生存期一、變量的作用域局部變量是指在一個(gè)函數(shù)內(nèi)部定義的變量,在函數(shù)之外是不可訪問(wèn)的。變量的作用域就是變量的作用范圍,變量可分為局部變量和全局變量。全局變量是指在所有函數(shù)外部定義的變量,在其作用域內(nèi)的所有函數(shù)都可以訪問(wèn)。例如下面程序段,展示了不同定義位置的變量的作用域。inta; //a是全局變量intfun(intb) //形參b是局部變量{ returna*b;}intmain(){ a=10; //在主函數(shù)中為全局變量a賦值

intc=20; //c是局部變量

cout<<fun(

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論