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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

intrand():返回一隨機數(shù)值,范圍在0至RAND_MAX間voidsrand(unsignedint):用來設置rand()產生隨機數(shù)時的隨機數(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ù)可調用?GUI(GraphicUserInterface圖形用戶界面),一切都是畫出來的VCL可視化控件庫(VisualComponentLibrary)mfc微軟基礎類(MicrosoftFoundationClasses),實際上是微軟提供的,用于在C++環(huán)境下編寫windows應用程序的一個框架和引擎VCL庫函數(shù)視窗版的加法計算器voidCMyDlg::OnOK(){ //TODO:Addextravalidationhere UpdateData(true); m_he=m_js1+m_js2; UpdateData(false);}哪些函數(shù)可調用?API(ApplicationProgrammingInterface應用編程接口)程序員通過API來控制WindowsOpenGL:(OpenGraphicsLibrary)專業(yè)的圖形程序接口,是一個功能強大,調用方便的底層圖形庫,它是一個跨平臺與何種操作系統(tǒng)無關)三維圖形軟件包。OpenGL可以與VisualC++緊密接口。操作系統(tǒng)API函數(shù)調用者必須能“看得見”被調用者將被調用的函數(shù)定義寫在調用者前面intmax(intx,inty)//max函數(shù)定義{……}voidmain(){……c=max(a,b);//調用max函數(shù)

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

intmax(intx,inty);

//max函數(shù)聲明

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

……}注意:這種方式一定要有被調函數(shù)的定義存在!調用者必須能“看得見”被調用者使用頭文件,函數(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的指定次冪值}調用者必須傳遞正確的參數(shù)給被調用者函數(shù)的目的是實現(xiàn)某個特定功能,當我們調用它時,我們一般需要給它一些數(shù)據,這些數(shù)據可能是讓它直接處理,也可能是輔助它實現(xiàn)具體的功能。函數(shù)要不要外部傳給它數(shù)據,要什么類型的數(shù)據,要多少數(shù)據,由函數(shù)本身決定,而非調用者決定。參數(shù)是調用者給出去的,被調用者接來過使用的數(shù)據如何得到函數(shù)的運行結果?void類型的函數(shù):void是“無類型”之意,這就相當于這個函數(shù)沒有返回結果。如:voidsrand(unsigned

int

);

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

如:

intmax(inta,intb)

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

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

函數(shù)體(return

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

return

表達式;intmax(intx,inty){

intz;

if(x>=y)z=x;

elsez=y;

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

函數(shù)體中必須有return語句。main函數(shù)例外。表達式值的類型與函數(shù)類型最好一致。void型函數(shù):函數(shù)體中return語句可以不出現(xiàn)。若出現(xiàn),則不能帶表達式,且意味著程序需要在指定位置退出。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;}結合流程控制語句和return語句,我們可以控制一個函數(shù)在合適的位置返回,并可返回合適的值。int

max(inta,

intb){

if(a>b)

returna;

else

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

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ù),實現(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:已知五邊形的各條邊的長度,計算其面積

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

xyz

計算三角形面積的公式如下:用前面所學的知識實現(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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論