




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章函數(shù)機(jī)制函數(shù)的引入-----目的學(xué)了“數(shù)據(jù)類型、常量、變量”,有了表達(dá)問題中各種數(shù)據(jù)的能力;學(xué)了“流程控制”,會(huì)針對(duì)各個(gè)問題,用正確的流程組合解決問題的步驟,從而形成解決問題的方法。學(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é)會(huì)調(diào)用函數(shù)哪些函數(shù)可調(diào)用?c++程序通??梢哉{(diào)用標(biāo)準(zhǔn)c++庫(kù)中的大量函數(shù)。這些函數(shù)完成一些基本的服務(wù),如輸入和輸出等,同時(shí)也為一些經(jīng)常使用的操作提供了高效的實(shí)現(xiàn)代碼。兩種形式:靜態(tài)庫(kù)(.lib)和動(dòng)態(tài)庫(kù)(.dll)庫(kù)函數(shù)常用的庫(kù)函數(shù)控制臺(tái)輸入輸出函數(shù),如getchar()、getline()字符串函數(shù),如strlen()、strcpy()數(shù)學(xué)函數(shù),如sqrt()、pow()隨機(jī)函數(shù),如srand()、rand()標(biāo)準(zhǔn)c++庫(kù)函數(shù)的詳細(xì)信息以及一些類定義均在其對(duì)應(yīng)的頭文件進(jìn)行了說明,以幫助程序員更好地使用標(biāo)準(zhǔn)c++庫(kù)。主要標(biāo)準(zhǔn)c++庫(kù)頭文件如下所示:<cmath>———用于計(jì)算常用的數(shù)學(xué)函數(shù)<iostream>---用于聲明處理標(biāo)準(zhǔn)流的iostreams對(duì)象<ctime>----用于在幾種不同的時(shí)間和日期格式間進(jìn)行轉(zhuǎn)換<fstream>---用于定義處理外部文件的幾個(gè)iostream模板類<iomapip>----用于聲明一個(gè)帶有參數(shù)的iostreams控制器
在我們現(xiàn)有的水平上,自編程序中若想使用標(biāo)準(zhǔn)的C++庫(kù)函數(shù),則只要包含相應(yīng)的頭文件即可。例:抽獎(jiǎng)程序。編程實(shí)現(xiàn):隨機(jī)生成一個(gè)0~99的整數(shù),然后從鍵盤輸入一個(gè)0~99之間的數(shù),如果兩數(shù)相等(概率為1%),就表示中獎(jiǎng)了。
intrand():返回一隨機(jī)數(shù)值,范圍在0至RAND_MAX間voidsrand(unsignedint):用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(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<<"請(qǐng)輸入一個(gè)0~99的整數(shù):"; cin>>mynum; if(mynum==num) cout<<"恭喜!您中獎(jiǎng)了!"<<endl; else cout<<"本次中獎(jiǎng)號(hào)碼為"<<num<<",謝謝您,歡迎下次光臨。"<<endl;}cstdlib頭文件中包含了提供了一些常用函數(shù)與符號(hào)常量的聲明。哪些函數(shù)可調(diào)用?GUI(GraphicUserInterface圖形用戶界面),一切都是畫出來的VCL可視化控件庫(kù)(VisualComponentLibrary)mfc微軟基礎(chǔ)類(MicrosoftFoundationClasses),實(shí)際上是微軟提供的,用于在C++環(huán)境下編寫windows應(yīng)用程序的一個(gè)框架和引擎VCL庫(kù)函數(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è)的圖形程序接口,是一個(gè)功能強(qiáng)大,調(diào)用方便的底層圖形庫(kù),它是一個(gè)跨平臺(tái)與何種操作系統(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)一在一個(gè)頭文件中聲明,代碼中需要使用這些函數(shù),只需通過“#include”語句包含這個(gè)頭文件,就可以讓編譯器找到函數(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)某個(gè)特定功能,當(dāng)我們調(diào)用它時(shí),我們一般需要給它一些數(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)于這個(gè)函數(shù)沒有返回結(jié)果。如:voidsrand(unsigned
int
);
srand(…);非void類型的函數(shù):函數(shù)必須返回一個(gè)值
如:
intmax(inta,intb)
c=max(a,b);終于明白了?5.2自定義函數(shù)自定義函數(shù)返回類型
函數(shù)名(函數(shù)參數(shù)定義){
函數(shù)體(return
結(jié)果;)}函數(shù)體用一對(duì){}包括;里面就是函數(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語句,我們可以控制一個(gè)函數(shù)在合適的位置返回,并可返回合適的值。int
max(inta,
intb){
if(a>b)
returna;
else
returnb;}return(a>b)?a:b;函數(shù)參數(shù)定義多個(gè)參數(shù)之間用逗號(hào)隔開,而不是分號(hào);最后不必以分號(hào)結(jié)束。
intmax(intx;int
y)//errorintmax(intx,inty;)//error注意:兩個(gè)或多個(gè)參數(shù)類型相同時(shí),并不能同時(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:已知五邊形的各條邊的長(zhǎng)度,計(jì)算其面積
計(jì)算多邊形面積,可將多邊形分解成若干個(gè)三角形abcdefgS1S2S3
xyz
計(jì)算三角形面積的公式如下:用前面所學(xué)的知識(shí)實(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;}如果定義一個(gè)函數(shù),專門求解已知三條邊長(zhǎng)時(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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 從容面對(duì):育嬰師試題及答案
- 提升人力資源管理能力的試題及答案解析
- 現(xiàn)代農(nóng)業(yè)技術(shù)培養(yǎng)方案(最終)
- 投資策略的選擇及應(yīng)用試題及答案
- 小學(xué)家長(zhǎng)會(huì)感恩教育
- 2024圖書管理員行業(yè)案例研究試題及答案
- 黑龍江林業(yè)職業(yè)技術(shù)學(xué)院《口腔解剖生理學(xué)綜合實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 如何通過禮儀提升客戶滿意度試題及答案
- 黑龍江省佳木斯市樺川縣2025年五下數(shù)學(xué)期末統(tǒng)考模擬試題含答案
- 黑龍江省哈九中2024-2025學(xué)年高三摸底(4月)調(diào)研測(cè)試物理試題含解析
- 物業(yè)公司章程模板
- 基于主成分-聚類分析的各地區(qū)火災(zāi)事故研究(附有SAS程序)
- 中國(guó)人工智能系列白皮書 - 大模型技術(shù)(2023 版)
- 精神科癥狀學(xué)理論知識(shí)考核試題
- 河湖水系連通演變過程
- 財(cái)務(wù)審計(jì)投標(biāo)方案(完整技術(shù)標(biāo))
- 圖 紙 會(huì) 審 簽 到 表
- 城鎮(zhèn)燃?xì)鈱I(yè)知識(shí)培訓(xùn)課件
- 腹內(nèi)壓的測(cè)定與腹內(nèi)高壓的處理
- 消毒產(chǎn)品生產(chǎn)企業(yè)衛(wèi)生管理規(guī)范
- 婦科PDCA循環(huán)在降低廣泛全宮切除術(shù)后尿潴留的發(fā)生率的應(yīng)用
評(píng)論
0/150
提交評(píng)論