C++語言教程:第五章 函數(shù)機(jī)制_第1頁
C++語言教程:第五章 函數(shù)機(jī)制_第2頁
C++語言教程:第五章 函數(shù)機(jī)制_第3頁
C++語言教程:第五章 函數(shù)機(jī)制_第4頁
C++語言教程:第五章 函數(shù)機(jī)制_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章函數(shù)機(jī)制函數(shù)的引入-----目的學(xué)了“數(shù)據(jù)類型、常量、變量”,有了表達(dá)問題中各種數(shù)據(jù)的能力;學(xué)了“流程控制”,會針對各個問題,用正確的流程組合解決問題的步驟,從而形成解決問題的方法。學(xué)習(xí)函數(shù),他山之石,可以攻玉:調(diào)用已有函數(shù)intmax(intx,inty);//函數(shù)聲明voidmain(){int

a,b,m;cin>>a>>b;m=max(a,b);//函數(shù)調(diào)用

cout<<m;}intmax(intx,inty)//函數(shù)定義{intz;

if(x>y)z=x;elsez=y;returnz;}函數(shù)調(diào)用的過程:參數(shù)傳遞這里:main稱為主調(diào)函數(shù),而max稱為被調(diào)函數(shù)函數(shù)組織通過在函數(shù)中進(jìn)行函數(shù)調(diào)用來擴(kuò)展運(yùn)行的規(guī)模,層層疊疊的函數(shù)構(gòu)成樹結(jié)構(gòu)main()fun2()fun1()fun3()fun1_1()fun2_1()fun2_2()

函數(shù)調(diào)用層次關(guān)系:樹結(jié)構(gòu)main()函數(shù),是程序執(zhí)行的入口,它可以調(diào)用其他函數(shù)。而其他一般函數(shù)既可以調(diào)用也可以被調(diào)用。函數(shù)嵌套調(diào)用的示意圖:

5.1學(xué)會調(diào)用函數(shù)哪些函數(shù)可調(diào)用?c++程序通??梢哉{(diào)用標(biāo)準(zhǔn)c++庫中的大量函數(shù)。這些函數(shù)完成一些基本的服務(wù),如輸入和輸出等,同時也為一些經(jīng)常使用的操作提供了高效的實(shí)現(xiàn)代碼。兩種形式:靜態(tài)庫(.lib)和動態(tài)庫(.dll)庫函數(shù)常用的庫函數(shù)控制臺輸入輸出函數(shù),如getchar()、getline()字符串函數(shù),如strlen()、strcpy()數(shù)學(xué)函數(shù),如sqrt()、pow()隨機(jī)函數(shù),如srand()、rand()標(biāo)準(zhǔn)c++庫函數(shù)的詳細(xì)信息以及一些類定義均在其對應(yīng)的頭文件進(jìn)行了說明,以幫助程序員更好地使用標(biāo)準(zhǔn)c++庫。主要標(biāo)準(zhǔn)c++庫頭文件如下所示:<cmath>———用于計(jì)算常用的數(shù)學(xué)函數(shù)<iostream>---用于聲明處理標(biāo)準(zhǔn)流的iostreams對象<ctime>----用于在幾種不同的時間和日期格式間進(jìn)行轉(zhuǎn)換<fstream>---用于定義處理外部文件的幾個iostream模板類<iomapip>----用于聲明一個帶有參數(shù)的iostreams控制器

在我們現(xiàn)有的水平上,自編程序中若想使用標(biāo)準(zhǔn)的C++庫函數(shù),則只要包含相應(yīng)的頭文件即可。例:抽獎程序。編程實(shí)現(xiàn):隨機(jī)生成一個0~99的整數(shù),然后從鍵盤輸入一個0~99之間的數(shù),如果兩數(shù)相等(概率為1%),就表示中獎了。

intrand():返回一隨機(jī)數(shù)值,范圍在0至RAND_MAX間voidsrand(unsignedint):用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時的隨機(jī)數(shù)種子。#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd;voidmain(){

srand((unsigned)time(NULL)); intx=rand(); intnum=(int)(99.0*x/(RAND_MAX)); intmynum; cout<<"請輸入一個0~99的整數(shù):"; cin>>mynum; if(mynum==num) cout<<"恭喜!您中獎了!"<<endl; else cout<<"本次中獎號碼為"<<num<<",謝謝您,歡迎下次光臨。"<<endl;}cstdlib頭文件中包含了提供了一些常用函數(shù)與符號常量的聲明。哪些函數(shù)可調(diào)用?GUI(GraphicUserInterface圖形用戶界面),一切都是畫出來的VCL可視化控件庫(VisualComponentLibrary)mfc微軟基礎(chǔ)類(MicrosoftFoundationClasses),實(shí)際上是微軟提供的,用于在C++環(huán)境下編寫windows應(yīng)用程序的一個框架和引擎VCL庫函數(shù)視窗版的加法計(jì)算器voidCMyDlg::OnOK(){ //TODO:Addextravalidationhere UpdateData(true); m_he=m_js1+m_js2; UpdateData(false);}哪些函數(shù)可調(diào)用?API(ApplicationProgrammingInterface應(yīng)用編程接口)程序員通過API來控制WindowsOpenGL:(OpenGraphicsLibrary)專業(yè)的圖形程序接口,是一個功能強(qiáng)大,調(diào)用方便的底層圖形庫,它是一個跨平臺與何種操作系統(tǒng)無關(guān))三維圖形軟件包。OpenGL可以與VisualC++緊密接口。操作系統(tǒng)API函數(shù)調(diào)用者必須能“看得見”被調(diào)用者將被調(diào)用的函數(shù)定義寫在調(diào)用者前面intmax(intx,inty)//max函數(shù)定義{……}voidmain(){……c=max(a,b);//調(diào)用max函數(shù)

……}調(diào)用者必須能“看得見”被調(diào)用者將被調(diào)用的函數(shù)聲明寫在當(dāng)前代碼前面intmax(intx,inty);//max函數(shù)聲明voidmain(){……

intmax(intx,inty);

//max函數(shù)聲明

c=max(a,b);//調(diào)用max函數(shù)

……}注意:這種方式一定要有被調(diào)函數(shù)的定義存在!調(diào)用者必須能“看得見”被調(diào)用者使用頭文件,函數(shù)可以統(tǒng)一在一個頭文件中聲明,代碼中需要使用這些函數(shù),只需通過“#include”語句包含這個頭文件,就可以讓編譯器找到函數(shù)。

#include<cmath>usingnamespacestd;void

main(){

inta=4,b,c;

b=sqrt(a);

//sqrt函數(shù)求a的平方根

c=pow(a,3);

//pow函數(shù)求a的指定次冪值}調(diào)用者必須傳遞正確的參數(shù)給被調(diào)用者函數(shù)的目的是實(shí)現(xiàn)某個特定功能,當(dāng)我們調(diào)用它時,我們一般需要給它一些數(shù)據(jù),這些數(shù)據(jù)可能是讓它直接處理,也可能是輔助它實(shí)現(xiàn)具體的功能。函數(shù)要不要外部傳給它數(shù)據(jù),要什么類型的數(shù)據(jù),要多少數(shù)據(jù),由函數(shù)本身決定,而非調(diào)用者決定。參數(shù)是調(diào)用者給出去的,被調(diào)用者接來過使用的數(shù)據(jù)如何得到函數(shù)的運(yùn)行結(jié)果?void類型的函數(shù):void是“無類型”之意,這就相當(dāng)于這個函數(shù)沒有返回結(jié)果。如:voidsrand(unsigned

int

);

srand(…);非void類型的函數(shù):函數(shù)必須返回一個值

如:

intmax(inta,intb)

c=max(a,b);終于明白了?5.2自定義函數(shù)自定義函數(shù)返回類型

函數(shù)名(函數(shù)參數(shù)定義){

函數(shù)體(return

結(jié)果;)}函數(shù)體用一對{}包括;里面就是函數(shù)用以實(shí)現(xiàn)功能的代碼。命名規(guī)則和變量命名一樣函數(shù)的返回值通過return語句來傳遞。return語句的一般格式為:

return

表達(dá)式;intmax(intx,inty){

intz;

if(x>=y)z=x;

elsez=y;

returnz;}返回類型非void型函數(shù):

函數(shù)體中必須有return語句。main函數(shù)例外。表達(dá)式值的類型與函數(shù)類型最好一致。void型函數(shù):函數(shù)體中return語句可以不出現(xiàn)。若出現(xiàn),則不能帶表達(dá)式,且意味著程序需要在指定位置退出。Notice:voidoutputStr();voidmain(){ outputStr();}voidoutputStr(){ cout<<"第1行"<<endl;

return; cout<<"第2行"<<endl; cout<<"第3行"<<endl;}voidoutputStr();voidmain(){ outputStr();}voidoutputStr(){ cout<<"第1行"<<endl; cout<<"第2行"<<endl; cout<<"第3行"<<endl;}結(jié)合流程控制語句和return語句,我們可以控制一個函數(shù)在合適的位置返回,并可返回合適的值。int

max(inta,

intb){

if(a>b)

returna;

else

returnb;}return(a>b)?a:b;函數(shù)參數(shù)定義多個參數(shù)之間用逗號隔開,而不是分號;最后不必以分號結(jié)束。

intmax(intx;int

y)//errorintmax(intx,inty;)//error注意:兩個或多個參數(shù)類型相同時,并不能同時聲明!

intmax(intx,y);//errorintmax(intx,inty){

intz;

if(x>=y)z=x;

elsez=y;

returnz;}例1:自定義函數(shù),實(shí)現(xiàn)求n!。并在主程序中利用其求1!+2!+3!+…+12!。intjiecheng(intn){

intjieguo=1;

for(inti=1;i<=n;i++) jieguo*=i;

returnjieguo;}voidmain(){ intsum=0;

for(inti=1;i<=12;i++) { sum+=jiecheng(i); } cout<<sum<<endl;}

例2:已知五邊形的各條邊的長度,計(jì)算其面積

計(jì)算多邊形面積,可將多邊形分解成若干個三角形abcdefgS1S2S3

xyz

計(jì)算三角形面積的公式如下:用前面所學(xué)的知識實(shí)現(xiàn):voidmain(){floata,b,c,d,e,f,g,p1,p2,p3,s1,s2,s3,s;cin>>a>>b>>c>>d>>e>>f>>g;p1=(a+b+c)/2;s1=sqrt(p1*(p1-a)*(p1-b)*(p1-c));p2=(c+d+e)/2;s2=sqrt(p2*(p2-c)*(p2-d)*(p2-e));p3=(e+f+g)/2;s3=sqrt(p3*(p3-e)*(p3-f)*(p3-g));s=s1+s2+s3;cout<<s<<endl;}如果定義一個函數(shù),專門求解已知三條邊長時,三角形的面積呢?floatarea(floatx,floaty,floatz){floatc=(x+y+z)/2;floats=sqrt(c*(c-x)*(c-y)*(c-z));returns;}在main函數(shù)中就可利用area

溫馨提示

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

評論

0/150

提交評論