版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章函數(shù)C++語(yǔ)言程序設(shè)計(jì)第1頁(yè)2本章主要內(nèi)容函數(shù)定義和調(diào)用函數(shù)間參數(shù)傳遞內(nèi)聯(lián)函數(shù)帶默認(rèn)形參值函數(shù)函數(shù)重載C++系統(tǒng)函數(shù)小結(jié)第2頁(yè)函數(shù)定義函數(shù)是面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)功效抽象。
假如函數(shù)A調(diào)用了函數(shù)B,則約定把A稱為主調(diào)函數(shù),B稱為被調(diào)函數(shù)。如圖所表示:
第3頁(yè)4函數(shù)定義函數(shù)定義語(yǔ)法形式類型標(biāo)識(shí)符函數(shù)名(形參列表){
語(yǔ)句序列}函數(shù)申明與使用是被初始化內(nèi)部變量,壽命和可見性僅限于函數(shù)內(nèi)部若無返回值,寫void第4頁(yè)5函數(shù)定義形式參數(shù)表<type1>name1,<type2>name2,...,<typen>namen函數(shù)返回值由return語(yǔ)句給出,格式:return表示式;比如:return0;無返回值函數(shù)(void類型),無須寫return語(yǔ)句,也可寫成:return;函數(shù)申明與使用第5頁(yè)比如:intmax(intx,inty)
//函數(shù)首部
{intz;if(x>y)z=x;//函數(shù)體
elsez=y;returnz;}
voidprint_star(intn)
//無返回值
{ inti; for(i=1;i<=n;i++) cout<<'*'; cout<<endl;}
voidprint_message(void)
//無形參和返回值
{ cout<<"WelcometoC++programming!"<<endl;}第6頁(yè)7函數(shù)申明函數(shù)申明又稱為函數(shù)原型,就是在主函數(shù)中書寫函數(shù)申明語(yǔ)句,表明要調(diào)用被調(diào)函數(shù)。
類型函數(shù)名(形參列表);
說明:
1.假如被調(diào)函數(shù)在主調(diào)函數(shù)之前定義,能夠無須申明。
2.假如被調(diào)函數(shù)將要被多個(gè)函數(shù)調(diào)用,則能夠把函數(shù)申明語(yǔ)句寫在程序開始處。
3.函數(shù)申明時(shí)能夠省略形參名字,不過形參類型不能省略。函數(shù)申明與使用第7頁(yè)函數(shù)調(diào)用C++語(yǔ)言函數(shù)調(diào)用,是把實(shí)際參數(shù)值賦給行參。調(diào)用形式:
函數(shù)名(實(shí)參列表);
說明:
1.括號(hào)內(nèi)為實(shí)參。實(shí)參即實(shí)際參數(shù),表示傳遞給被調(diào)函數(shù)一些必要數(shù)據(jù),實(shí)參之間用逗號(hào)隔開。
2.假如被調(diào)函數(shù)有返回值,則函數(shù)調(diào)用表示式值就是返回值。函數(shù)申明與使用第8頁(yè)函數(shù)調(diào)用---參數(shù)傳遞實(shí)參加形參個(gè)數(shù)相等,類型盡可能保持一致。實(shí)參向形參傳遞數(shù)據(jù)時(shí),從左向右,一一對(duì)應(yīng)。實(shí)參1實(shí)參2形參1形參2函數(shù)申明與使用第9頁(yè)例:在主函數(shù)中調(diào)用其它函數(shù).#include<iostream>usingnamespacestd;voidprint_star(intn){inti;for(i=1;i<=n;i++) cout<<'*';cout<<endl;}voidprint_message(void){cout<<"WelcometoC++programming!"<<endl;}intmain(){print_star(30);
print_message();
print_star(30);return0;}運(yùn)行結(jié)果:******************************WelcometoC++programming!******************************第10頁(yè)函數(shù)嵌套調(diào)用嵌套調(diào)用函數(shù)能夠嵌套調(diào)用,但不允許嵌套定義。定義函數(shù)A在執(zhí)行時(shí)調(diào)用了函數(shù)B,函數(shù)B在執(zhí)行時(shí)調(diào)用了函數(shù)C,這種現(xiàn)象稱為嵌套調(diào)用。執(zhí)行過程:….B();….….C();….….….….函數(shù)A函數(shù)B函數(shù)C第11頁(yè)例:函數(shù)嵌套調(diào)用。#include<iostream>usingnamespacestd;voidf1(void);voidf2(void);intmain(){cout<<"Iaminmain."<<endl;f1();cout<<"Iwillfinish."<<endl;return0;}voidf1(void){cout<<"NowIaminf1."<<endl;
f2();cout<<"HereIambackinf1."<<endl;}voidf2(){cout<<"NowIaminf2."<<endl;}
第12頁(yè)函數(shù)遞歸調(diào)用定義在函數(shù)函數(shù)體內(nèi)又出現(xiàn)直接或間接調(diào)用本身語(yǔ)句,即函數(shù)在執(zhí)行過程中調(diào)用自己現(xiàn)象,稱為遞歸調(diào)用。第13頁(yè)例:遞歸調(diào)用計(jì)算n!
#include<iostream>intmain(){
longfac(intn);
//函數(shù)申明
intn;longs;cin>>n;
s=fac(n);
//函數(shù)調(diào)用
cout<<n<<"!="<<s<<endl;return0;}longfac(intn)
//函數(shù)定義
{longs;if(n==1)s=1;else
s=n*fac(n-1);
//遞歸調(diào)用
returns;//函數(shù)返回值
}第14頁(yè)15遞歸過程兩個(gè)階段:遞推:
4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=1未知已知回歸:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知已知當(dāng)n=4時(shí),執(zhí)行過程:…..S=4*fac(3)…..S=3*fac(2)…..S=2*fac(1)…..S=1fac(4)fac(3)Fac(2)fac(1)第15頁(yè)16函數(shù)參數(shù)傳遞
——值傳遞定義:調(diào)用時(shí)把實(shí)參值從左至右,一一傳遞給各個(gè)形參。形參值發(fā)生改變,對(duì)實(shí)參毫無影響。說明:(1)在函數(shù)被調(diào)用時(shí)才分配形參存放單元。(2)實(shí)參能夠是常量、變量或表示式。(3)實(shí)參類型必須與形參相符。(4)傳遞時(shí)是傳遞參數(shù)值,即單向傳遞。函數(shù)申明與使用第16頁(yè)17例:交換兩個(gè)整型變量值(失敗)#include<iostream>usingnamespacestd;voidswap(inta,intb){ intt=a; a=b; b=t;}函數(shù)申明與使用第17頁(yè)intmain(){ intx=5,y=10; cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y); cout<<"x="<<x<<"y="<<y<<endl; return0;}運(yùn)行結(jié)果: x=5y=10 x=5y=1018第18頁(yè)19函數(shù)參數(shù)傳遞
——引用傳遞引用:引用是一個(gè)特殊類型變量,能夠被認(rèn)為是另一個(gè)變量別名。引用(&)是標(biāo)識(shí)符別名,比如:inti,j;
int&ri=i;
//建立一個(gè)int型引用ri,并將其初始化為變量i一個(gè)別名
j=10;
ri=j;
//相當(dāng)于i=j;申明一個(gè)引用時(shí),必須同時(shí)對(duì)它進(jìn)行初始化,使它指向一個(gè)已存在對(duì)象。一旦一個(gè)引用被初始化后,就不能改為指向其它對(duì)象。引用能夠作為形參
voidswap(int&a,int&b){...}函數(shù)申明與使用第19頁(yè)20例:交換兩個(gè)整型變量值(成功)#include<iostream>usingnamespacestd;voidswap(int&a,int&b){ intt=a; a=b; b=t;}intmain(){ intx=5,y=10; cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y); cout<<"x="<<x<<"y="<<y<<endl; return0;}函數(shù)申明與使用運(yùn)行結(jié)果:x=5y=10x=10y=5第20頁(yè)21內(nèi)聯(lián)函數(shù)申明與使用申明時(shí)使用關(guān)鍵字inline。形式:
inline類型函數(shù)名(形參列表){
變量申明語(yǔ)句執(zhí)行語(yǔ)句
}內(nèi)聯(lián)函數(shù)第21頁(yè)內(nèi)聯(lián)函數(shù)主要是為了處理程序運(yùn)行效率,本質(zhì)上利用空間換取時(shí)間。使用內(nèi)聯(lián)函數(shù)應(yīng)注意:
1)僅適合語(yǔ)句特少語(yǔ)句;
2)內(nèi)聯(lián)函數(shù)必須先定義后使用;
3)內(nèi)聯(lián)函數(shù)中不能含有結(jié)構(gòu)控制語(yǔ)句,如switch和while等,如有上述語(yǔ)句,編譯時(shí)將自動(dòng)轉(zhuǎn)換為普通函數(shù)處理。內(nèi)聯(lián)函數(shù)申明與使用內(nèi)聯(lián)函數(shù)第22頁(yè)23例:內(nèi)聯(lián)函數(shù)應(yīng)用舉例#include<iostream>usingnamespacestd;constdoublePI=3.14159;inlinedoublecalArea(doubleradius){ returnPI*radius*radius;}//內(nèi)聯(lián)函數(shù),計(jì)算圓面積intmain(){ doubler=3.0;
doublearea=calArea(r);
//調(diào)用內(nèi)聯(lián)函數(shù),編譯時(shí)此處被替換為函數(shù)體語(yǔ)句 cout<<area<<endl; return0;}內(nèi)聯(lián)函數(shù)第23頁(yè)24默認(rèn)形參值作用函數(shù)在定義時(shí)能夠預(yù)先定義一個(gè)默認(rèn)形參值。在函數(shù)調(diào)用時(shí),假如給出實(shí)參,則用實(shí)參初始化形參;假如沒有給出實(shí)參,就用預(yù)先給定默認(rèn)值。例:帶默認(rèn)形參值函數(shù)申明與定義。intadd(inta=5,intb=9)
//形參a與b有默認(rèn)值{returna+b;}
//兩數(shù)相加voidmain(){add(15,20);//用實(shí)參初始化形參
add(15);//形參a用15,b用默認(rèn)值9
add();//a、b都用默認(rèn)值
}帶缺省形參值函數(shù)第24頁(yè)25默認(rèn)形參值說明次序有默認(rèn)參數(shù)形參必須在形參列表最終,也就是說缺省形參值右面不能有沒有缺省值參數(shù)。因?yàn)檎{(diào)用時(shí)實(shí)參加形參結(jié)合是從左向右次序。例:intadd(intx,inty=5,intz=6);//正確intadd(intx=1,inty=5,intz);//錯(cuò)誤intadd(intx=1,inty,intz=6);//錯(cuò)誤帶缺省形參值函數(shù)第25頁(yè)26缺省形參值與函數(shù)調(diào)用位置假如一個(gè)函數(shù)有原型申明,且原型申明在定義之前,則缺省形參值必須在函數(shù)原型申明中給出;而假如只有函數(shù)定義,或函數(shù)定義在前,則缺省形參值需在函數(shù)定義中給出。intadd(intx=5,inty=6);//原型申明在前intmain(){add();}intadd(intx,inty){//此處不能再指定缺省值returnx+y;}intadd(intx=5,inty=6){//只有定義,沒有原型申明returnx+y;}intmain(){add();}帶缺省形參值函數(shù)第26頁(yè)27重載函數(shù)申明C++允許功效相近函數(shù)在相同作用域內(nèi)以相同函數(shù)名申明,從而形成重載。方便使用,便于記憶。例:形參類型不一樣intadd(intx,inty);floatadd(floatx,floaty);形參個(gè)數(shù)不一樣intadd(intx,inty);intadd(intx,inty,intz);
函數(shù)重載第27頁(yè)28注意事項(xiàng)不要將不一樣功效函數(shù)申明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果誤解、混同。這么不好:intadd(intx,inty);intadd(inta,intb);編譯器不以形參名來區(qū)分intadd(intx,inty);voidadd(intx,inty);編譯器不以返回值來區(qū)分intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}
函數(shù)重載重載函數(shù)形參必須不一樣:個(gè)數(shù)不一樣或類型不一樣。編譯程序?qū)⒁罁?jù)實(shí)參和形參類型及個(gè)數(shù)最正確匹配來選擇調(diào)用哪一個(gè)函數(shù)。第28頁(yè)C++允許多個(gè)函數(shù)同名,而用一個(gè)函數(shù)命名技術(shù)來判斷應(yīng)調(diào)用函數(shù)。比如:
intmax(intx,inty);
doublemax(doublex,doubley);
charmax(charx,chary);
intmax(intx,inty,intz);
此時(shí),如有
inta=3,b=5;
floatx=3.14,y=7.96;
charc1=‘A’,c2=‘b’;
max(a,b+b);
//調(diào)用intmax(int,int);
max(2*x,x*y);
//調(diào)用doublemax(double,double)
max(c1,c2);
//調(diào)用charmax(char,char);
max(a,a-b,a+b);//調(diào)用intmax(int,int,int);第29頁(yè)30C++系統(tǒng)函數(shù)C++系統(tǒng)庫(kù)中提供了幾百個(gè)函數(shù)可供程序員使用。比如:求平方根函數(shù)(sprt)、求絕對(duì)值函數(shù)(abs)等。使用系統(tǒng)函數(shù)時(shí)要包含對(duì)應(yīng)頭文件。比如:cmath或math.h使用C++系統(tǒng)函數(shù)第30頁(yè)31例3-17系統(tǒng)函數(shù)應(yīng)用舉例題目:從鍵盤輸入一個(gè)角度值,求出該角度正弦值、余弦值和正切值。分析:系統(tǒng)函數(shù)中提供了求正弦值、余弦值和正切值函數(shù):sin()、cos()、tan(),函數(shù)說明在頭文件cmath中。使用C++系統(tǒng)函數(shù)第31頁(yè)#include
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧現(xiàn)代服務(wù)職業(yè)技術(shù)學(xué)院《人體解剖學(xué)局解》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘭州大學(xué)《定向運(yùn)動(dòng)與素質(zhì)拓展》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西工業(yè)貿(mào)易職業(yè)技術(shù)學(xué)院《學(xué)術(shù)寫作與文獻(xiàn)檢索》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林醫(yī)藥學(xué)院《市政工程識(shí)圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南水利水電職業(yè)技術(shù)學(xué)院《金融風(fēng)險(xiǎn)管理(實(shí)驗(yàn))》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶藝術(shù)工程職業(yè)學(xué)院《計(jì)算機(jī)輔助產(chǎn)品設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶化工職業(yè)學(xué)院《大學(xué)生創(chuàng)新創(chuàng)業(yè)意識(shí)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中央美術(shù)學(xué)院《古典園林建筑構(gòu)造》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江農(nóng)林大學(xué)《工程圖學(xué)綜合訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州商貿(mào)旅游職業(yè)學(xué)院《建筑工程計(jì)量與計(jì)價(jià)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 福建省廈門市2023-2024學(xué)年高二上學(xué)期期末考試語(yǔ)文試題(解析版)
- 課文背書統(tǒng)計(jì)表
- 三年級(jí)語(yǔ)文下冊(cè)教案-14 蜜蜂3-部編版
- 蘇教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)全冊(cè)教案
- DB51T2939-2022 彩燈(自貢)制作工藝通用規(guī)范
- 押金收據(jù)條(通用版)
- 藥理治療中樞神經(jīng)系統(tǒng)退行性疾病藥.pptx
- 強(qiáng)三基反三違除隱患促安全百日專項(xiàng)行動(dòng)實(shí)施方案
- 新人教版七年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)專項(xiàng)訓(xùn)練大全
- 標(biāo)準(zhǔn)預(yù)防--ppt課件
- 壓力管道氬電聯(lián)焊作業(yè)指導(dǎo)書
評(píng)論
0/150
提交評(píng)論