合工大計(jì)算機(jī)學(xué)院 程序設(shè)計(jì) 04第四章 函數(shù).ppt
《合工大計(jì)算機(jī)學(xué)院 程序設(shè)計(jì) 04第四章 函數(shù).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《合工大計(jì)算機(jī)學(xué)院 程序設(shè)計(jì) 04第四章 函數(shù).ppt(29頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第四章函數(shù),函數(shù)的聲明與調(diào)用參數(shù)傳遞方式標(biāo)識(shí)符的作用域變量的生存期遞歸程序設(shè)計(jì)C+語(yǔ)言常用庫(kù)函數(shù),4.1C+語(yǔ)言的函數(shù)一、函數(shù)的建立與使用,函數(shù)的建立函數(shù)聲明:定義函數(shù)的名字、執(zhí)行的語(yǔ)句序列、傳遞和使用的數(shù)據(jù)參數(shù)、返回值等;函數(shù)的使用函數(shù)調(diào)用:指明函數(shù)去“做什么”;函數(shù)調(diào)用的控制流程:如右圖,函數(shù)調(diào)用程序(主調(diào)函數(shù)),調(diào)用F,調(diào)用F,被調(diào)用函數(shù)F,例1:,#includefloatmax(floatx,floaty)floatz;/求兩個(gè)數(shù)的最大值if(x=y)z=x;elsez=y;returnz;intmain()floati,j,k;/用戶輸入的三個(gè)數(shù)floattemp;/臨時(shí)最大者coutijk;/用戶輸入三個(gè)數(shù)/找出最大數(shù)存放在temp中temp=max(i,j);/main()是主調(diào)函數(shù),max()是被調(diào)函數(shù)temp=max(temp,k);/輸出找到的最大數(shù)coutThemaximumnumberistempjk;temp=max(i,j);temp=max(temp,k);cout=y)z=x;elsez=y;returnz;,floatmax(floatx,floaty);,函數(shù)原型:floatmax(floatx,floaty);floatmax(float,float);floatmax(floatt,floatk);,4.3參數(shù)傳遞,一、參數(shù)傳遞方式主調(diào)函數(shù)與被調(diào)函數(shù)的數(shù)據(jù)交換:由參數(shù)傳遞與返回值實(shí)現(xiàn)按值調(diào)用:?jiǎn)雾?xiàng)的參數(shù)傳遞按引用調(diào)用:雙向的參數(shù)傳遞二、按值調(diào)用(傳值,按拷貝調(diào)用)單向的,實(shí)際參數(shù)形式參數(shù),傳遞的是參數(shù)的值例:p91程序4.3.1#includecoutiisin;intsquare(intx)coutjisjn;/求一個(gè)整數(shù)的平方return0;x=x*x;returnx;intmain()inti,j;i=8;j=square(i);,8,64,64,64,三、缺省參數(shù),C+語(yǔ)言允許在函數(shù)原型或函數(shù)定義中為形式參數(shù)指定缺省值,具有缺省值的形式參數(shù)稱缺省形參用初值表達(dá)式定義缺省值缺省行參必須從右邊開(kāi)始定義intfunc(inta,floatb,intc=0);若在函數(shù)調(diào)用時(shí)指定了形式參數(shù)對(duì)應(yīng)的實(shí)際參數(shù),則形式參數(shù)使用實(shí)際參數(shù)的值,否則未指定相應(yīng)的實(shí)際參數(shù)則形式參數(shù)使用缺省值。,例2:,#include#include/給出函數(shù)原型doubledistance(doublex1,doubley1,doublex2=0,doubley2=0);intmain()cout(1,2)to(0,0)isdistance(1,2)n;cout(-1.5,2)to(1.5,-2)isdistance(-1.5,2,1.5,-2)n;return0;/計(jì)算兩點(diǎn)之間的距離doubledistance(doublex1,doubley1,doublex2,doubley2)doublex,y;x=x2-x1;y=y2-y1;returnsqrt(x*x)+(y*y);,4.4生存期與作用域一、變量的兩個(gè)性質(zhì),生存期:(從時(shí)間角度考慮)變量的生存期是指在程序運(yùn)行過(guò)程中變量占存儲(chǔ)空間的時(shí)限作用域:(從空間角度考慮)指在變量占用存儲(chǔ)空間的時(shí)間內(nèi)變量的名字能被引用的區(qū)域,即變量名作用的有效范圍。在變量的作用域中變量必然存在在變量的生存期中變量不一定有效,二、全局變量和局部變量,局部變量:在一個(gè)塊語(yǔ)句內(nèi)部定義的變量作用域:本塊語(yǔ)句中。塊語(yǔ)句嵌套時(shí),內(nèi)層的同名變量有效,而外層的同名變量被屏蔽。不同函數(shù)中使用同名變量,代表不同對(duì)象,互不相干例:voidfunc(intx)形式參數(shù)x的作用域inty=x+1;外層變量y的作用域inty=x+2;內(nèi)層變量y的作用域intz=x+3;內(nèi)層變量z的作用域y=y*y;z=z*z;coutx”y”z”n”;intz=x+4;外層變量z的作用域y=y+y;z=z+z;coutx”y”z”n”;,生存期:局部變量是當(dāng)程序的控制流程進(jìn)入定義該變量的塊語(yǔ)句時(shí),才為其分配一塊臨時(shí)的存儲(chǔ)空間,當(dāng)程序的控制流程退出該程序塊時(shí),臨時(shí)占用的存儲(chǔ)空間被釋放。初始化:無(wú)顯式初始化式,其初值是一個(gè)不確定的值。顯示初始化時(shí),每次流程進(jìn)入塊函數(shù)時(shí),分配內(nèi)存空間,都重新對(duì)局部變量初始化,2.全局變量:在函數(shù)之外定義的變量,作用域:從定義變量開(kāi)始到本源程序文件結(jié)束。生存期:全局變量在整個(gè)程序的運(yùn)行期中都存在初始化:無(wú)顯式初始化式,其初值會(huì)被清0。顯示初始化時(shí),對(duì)全局變量的初始化在編譯時(shí)一次完成。同名的全局變量與局部變量:在局部變量的作用域內(nèi),全局變量被屏蔽,直接使用該名字,用的是局部變量,但可用:作用域運(yùn)算符引用同名全局變量,例:,inty=8;voidfunc(intx)inty=x+1;:y=:y*y;couty”:y”n”;intmain()func(3);couty”n”;return0;,三、變量的存儲(chǔ)類別,1.存儲(chǔ)方式從生存期(時(shí)間)來(lái)分,有兩種存儲(chǔ)方式靜態(tài)存儲(chǔ)方式:在程序運(yùn)行期間占用固定存儲(chǔ)空間動(dòng)態(tài)存儲(chǔ)方式:運(yùn)行時(shí),根據(jù)需要?jiǎng)討B(tài)分配存儲(chǔ)空間內(nèi)存中,供用戶使用的存儲(chǔ)空間:變量的定義:數(shù)據(jù)存儲(chǔ)類別數(shù)據(jù)類型變量名(=初值);,程序區(qū),靜態(tài)存儲(chǔ)區(qū),動(dòng)態(tài)存儲(chǔ)區(qū),2.數(shù)據(jù)存儲(chǔ)類別,例:,#includevoidgrow()intage=30;age=age+1;coutMyageisagen;return;intmain()for(inti=1;i=3;i=i+1)grow();return0;age不是靜態(tài)變量的運(yùn)行結(jié)果:age是靜態(tài)局部變量的運(yùn)行結(jié)果:Myageis31Myageis31Myageis31Myageis32Myageis31Myageis33,static,4.5遞歸程序設(shè)計(jì),在函數(shù)定義中,一個(gè)函數(shù)直接或間接地調(diào)用自己,稱遞歸調(diào)用,這類函數(shù)為遞歸函數(shù)。1)直接遞歸2)間接遞歸f(intx)f1()f2()f(x-1);f2();f1();遞歸調(diào)用是無(wú)終止的自身調(diào)用,因此在遞歸函數(shù)中應(yīng)該用if語(yǔ)句或其它分支語(yǔ)句,判斷當(dāng)某些條件成立時(shí)結(jié)束遞歸調(diào)用,例:,/功能:使用遞歸程序計(jì)算Fibonacci序列。#includeintfibonacci(intn)intresult;if(n2)result=1;elseresult=fibonacci(n-1)+fibonacci(n-2);returnresult;intmain()intloop;/循環(huán)變量/輸出Fibonacci序列的前6個(gè)數(shù)for(loop=0;loop=5;loop=loop+1)coutfibonacci(loop);coutn;return0;,intfibonacci(intn)intresult,i,pre1,pre2;result=1;i=2;pre2=1;while(i=n)pre1=pre2;pre2=result;result=pre1+pre2;i+;returnresult;,設(shè)n為5,則有:F(5)=F(3)+F(4)=F(1)+F(2)+F(2)+F(3)=F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(2)=F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(0)+F(1)=1+1+1+1+1+1+1+1=8,分析如下:,例:梵塔問(wèn)題,盤(pán)按由小到大的順序標(biāo)上號(hào)碼1n。開(kāi)始時(shí)n個(gè)盤(pán)全套在A柱上,且小的放在大的上面,如圖4.6.1所示。游戲要求按下列規(guī)則將所有的盤(pán)從A柱移到C柱,在移動(dòng)過(guò)程中可以借助另一個(gè)B柱。規(guī)則1:每次只能移動(dòng)柱最上面的一個(gè)盤(pán);規(guī)則2:任何盤(pán)都不得放在比它小的盤(pán)上。ABC12n,遞歸思路:把A上的n個(gè)盤(pán)運(yùn)到C上先把n-1個(gè)盤(pán)從A搬到B,借助C把A上剩下的最大的一個(gè)盤(pán)搬到C再把n-1個(gè)盤(pán)從B搬到C,借助A當(dāng)n=1時(shí),直接從A搬到C即可,程序,#include/將disk_num個(gè)盤(pán)從from柱移到to柱,可以借助aux柱voidmove_tower(intdisk_num,charfrom,charto,charaux)if(disk_num=1)/僅有一個(gè)盤(pán)時(shí),直接從from柱移到to柱coutMovedisk1fromfromtoton;else/將disk_num-1個(gè)盤(pán)從from柱移到aux柱,借助于to柱move_tower(disk_num-1,from,aux,to);/將最下的盤(pán)從from柱移到to柱coutMovediskdisk_numfromfromtoton;/將disk_num-1個(gè)盤(pán)從aux柱移到to柱,借助于from柱move_tower(disk_num-1,aux,to,from);return;intmain()move_tower(4,A,C,B);return0;,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 合工大計(jì)算機(jī)學(xué)院 程序設(shè)計(jì) 04第四章 函數(shù) 合工大 計(jì)算機(jī) 學(xué)院 04 第四
鏈接地址:http://m.appdesigncorp.com/p-12720748.html