




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八章第八章 函數(shù)函數(shù)8.1 概述概述8.2 函數(shù)定義的一般形式函數(shù)定義的一般形式8.3 函數(shù)參數(shù)和函數(shù)的值函數(shù)參數(shù)和函數(shù)的值8.4 函數(shù)的調(diào)用函數(shù)的調(diào)用8.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用8.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用8.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)8.8 局部變量和全局變量局部變量和全局變量8.9 變量的存儲(chǔ)類別變量的存儲(chǔ)類別8.10 內(nèi)部函數(shù)和外部函數(shù)內(nèi)部函數(shù)和外部函數(shù)8.5 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用main( )調(diào)用函數(shù)調(diào)用函數(shù)a終了終了a函數(shù)函數(shù)b函數(shù)函數(shù)調(diào)用函數(shù)調(diào)用函數(shù)b函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)函數(shù)定義不可嵌套,但可以嵌套調(diào)用函數(shù)例例 求三個(gè)數(shù)中最大數(shù)
2、和最小數(shù)的差值求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c); printf(Max-Min=%dn,d); int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); int max(int x,int y,int z) int
3、r; r=xy?x:y; return(rz?r:z); int min(int x,int y,int z) int r; r=xy?x:y; return(rz?r:z); main( )調(diào)用函數(shù)dif輸出終了dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)例例8.6用弦截法求方程用弦截法求方程x3-5x2+16x-80=0的根。的根。方法如下方法如下:(1) 取兩個(gè)不同點(diǎn)取兩個(gè)不同點(diǎn)x1,x2,如果如果f(x1)和和f(x2)符號(hào)相符號(hào)相反反,那么那么(x1,x2)區(qū)間內(nèi)必有一個(gè)根。如果區(qū)間內(nèi)必有一個(gè)根。如果f(x1)與與f(x2)同符號(hào)同符號(hào),則應(yīng)改變則應(yīng)改變x1,x2,直到
4、直到f(x1)、f(x2)異號(hào)為止。注意異號(hào)為止。注意x1、x2的值不應(yīng)差太大的值不應(yīng)差太大,以保以保證證(x1,x2)區(qū)間內(nèi)只有一個(gè)根。區(qū)間內(nèi)只有一個(gè)根。(2) 連接連接f(x1)和和f(x2)兩點(diǎn)兩點(diǎn),此線此線(即弦即弦)交交x軸于軸于x,見(jiàn)圖見(jiàn)圖8.6。x點(diǎn)坐標(biāo)可用下式求出點(diǎn)坐標(biāo)可用下式求出:x=x1f(x2)-x2f(x1)f(x2)-f(x1)再?gòu)脑購(gòu)膞求出求出f(x).(3) 若若f(x)與與f(x1)同符號(hào)同符號(hào),則根必在則根必在(x,x2)區(qū)間內(nèi)區(qū)間內(nèi),此時(shí)此時(shí)將將x作為新的作為新的x1。如果。如果f(x)與與f(x2)同符號(hào)同符號(hào),則表示根在則表示根在(x1,x)區(qū)間內(nèi)區(qū)間內(nèi)
5、,將將x作為新的作為新的x2。圖圖8.6圖圖8.7(4) 重復(fù)步驟重復(fù)步驟 (2) 和和 (3) , 直到直到 f(x) 為止為止, 為一為一個(gè)很小的數(shù)個(gè)很小的數(shù), 例如例如 10-6. 此時(shí)認(rèn)為此時(shí)認(rèn)為 f(x)0.根據(jù)上述思根據(jù)上述思路畫(huà)出路畫(huà)出N-S流程圖流程圖,見(jiàn)圖見(jiàn)圖8.7。分別用幾個(gè)函數(shù)來(lái)實(shí)現(xiàn)各部分功能分別用幾個(gè)函數(shù)來(lái)實(shí)現(xiàn)各部分功能:(1) 用函數(shù)用函數(shù)f(x)來(lái)求來(lái)求x的函數(shù)的函數(shù): x3-5x2+16x-80(2) 用函數(shù)用函數(shù)xpoint (x1,x2)來(lái)求來(lái)求f(x1)和和f(x2)的連線與的連線與x軸的交點(diǎn)軸的交點(diǎn)x的坐標(biāo)。的坐標(biāo)。(3) 用函數(shù)用函數(shù)root (x1,x
6、2)來(lái)求來(lái)求(x1,x2)區(qū)間的那個(gè)實(shí)根。區(qū)間的那個(gè)實(shí)根。顯然顯然,執(zhí)行執(zhí)行root函數(shù)過(guò)程中要用到函數(shù)函數(shù)過(guò)程中要用到函數(shù)xpoint,而執(zhí)行而執(zhí)行xpoint函數(shù)過(guò)程中要用到函數(shù)過(guò)程中要用到f函數(shù)。函數(shù)。請(qǐng)讀者先分析下面的程序。請(qǐng)讀者先分析下面的程序。 #include #include * 定義定義f函數(shù),以實(shí)現(xiàn)函數(shù),以實(shí)現(xiàn)f(x)x3-5x2+16x-80 * float f(float x) float y; y(x50)*x160)*x800; returny);); *定義定義xpoint函數(shù),求出弦與函數(shù),求出弦與x軸交點(diǎn)軸交點(diǎn) */ float xpoint(float x1
7、,float x2) float y; y=(x1*fx2)x2*fx1)()(fx2)fx1);); returny);); /*定義定義root函數(shù),求近似根函數(shù),求近似根 * float rootfloat x1,float x2) int i; float x,y,y1; y1fx1);); do xxpointx1,x2);); yfx);); ify*y10) fx與與fx1同符號(hào)同符號(hào) * y1y; x1x; else x2x; whilefabsy)00001);); returnx);); void main()() /*主函數(shù)主函數(shù)*/ float x1,x2,f1,f2,
8、x; do printf(input x1,x2:n);); scanf(“f,f”,x1,x2);); f1fx1);); f2fx2);); whilef1*f20);); xrootx1,x2);); printf( root of equation is84f,x);); 運(yùn)行情況如下:運(yùn)行情況如下:input x1,x2:2,6 root of equation is50000從程序可以看到:從程序可以看到:(1) 在定義函數(shù)時(shí),函數(shù)名為在定義函數(shù)時(shí),函數(shù)名為f、xpoint、root的的3個(gè)函數(shù)是互相個(gè)函數(shù)是互相獨(dú)立的,并不互相從屬。這獨(dú)立的,并不互相從屬。這3個(gè)函數(shù)均定為實(shí)型。個(gè)
9、函數(shù)均定為實(shí)型。(2) 3個(gè)函數(shù)的定義均出現(xiàn)在個(gè)函數(shù)的定義均出現(xiàn)在main函數(shù)之前,因此在函數(shù)之前,因此在main函數(shù)中函數(shù)中不必對(duì)這不必對(duì)這3個(gè)函數(shù)作類型說(shuō)明。個(gè)函數(shù)作類型說(shuō)明。(3) 程序從程序從main函數(shù)開(kāi)始執(zhí)行。先執(zhí)行一個(gè)函數(shù)開(kāi)始執(zhí)行。先執(zhí)行一個(gè)do-while循環(huán),作用循環(huán),作用是:輸入是:輸入x1和和x2,判別,判別fx1和和fx2是否異號(hào),如果不是異是否異號(hào),如果不是異號(hào)則重新輸入號(hào)則重新輸入x1和和x2,直到滿足,直到滿足fx1與與fx2異號(hào)為止。然異號(hào)為止。然后用函數(shù)調(diào)用后用函數(shù)調(diào)用rootx1,x2求根求根x。調(diào)用。調(diào)用root函數(shù)過(guò)程中,要函數(shù)過(guò)程中,要調(diào)用調(diào)用xpoi
10、nt函數(shù)來(lái)求函數(shù)來(lái)求fx1與與fx2連線的交點(diǎn)連線的交點(diǎn)x。在調(diào)用。在調(diào)用xpoint函數(shù)過(guò)程中要用到函數(shù)函數(shù)過(guò)程中要用到函數(shù)f來(lái)求來(lái)求x1和和x2的相應(yīng)的函數(shù)值的相應(yīng)的函數(shù)值fx1和和fx2)。這就是函數(shù)的嵌套調(diào)用。見(jiàn)圖)。這就是函數(shù)的嵌套調(diào)用。見(jiàn)圖8.8。圖圖8.8(4) 在在root函數(shù)中要用到求絕對(duì)值的函數(shù)函數(shù)中要用到求絕對(duì)值的函數(shù)fabs,它是,它是對(duì)實(shí)型數(shù)求絕對(duì)值的標(biāo)準(zhǔn)函數(shù)。它屬于數(shù)學(xué)函數(shù)庫(kù),對(duì)實(shí)型數(shù)求絕對(duì)值的標(biāo)準(zhǔn)函數(shù)。它屬于數(shù)學(xué)函數(shù)庫(kù),故在文件開(kāi)頭用故在文件開(kāi)頭用include即把使用數(shù)即把使用數(shù)學(xué)庫(kù)函數(shù)時(shí)所需用到的有關(guān)信息包含進(jìn)來(lái)。學(xué)庫(kù)函數(shù)時(shí)所需用到的有關(guān)信息包含進(jìn)來(lái)。函數(shù)直接
11、或間接的調(diào)用自身函數(shù)直接或間接的調(diào)用自身 叫函數(shù)的遞歸調(diào)用叫函數(shù)的遞歸調(diào)用f( )調(diào)調(diào)f調(diào)調(diào)f2調(diào)調(diào)f1f1( )f2( )int f(int x) int y,z; z=f(y); . return(2*z);int f1(int x) int y,z; z=f2(y); . return(2*z);int f2(int t) int a,c; c=f1(a); . return(3+c);8.6 函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用闡明闡明C編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)編譯系統(tǒng)對(duì)遞歸函數(shù)的自調(diào)用次數(shù)沒(méi)有限制沒(méi)有限制每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配每調(diào)用函數(shù)一次,在內(nèi)存堆棧區(qū)分配空間,用于存放函數(shù)
12、變量、返回值空間,用于存放函數(shù)變量、返回值等信息,所以遞歸次數(shù)過(guò)多,可能等信息,所以遞歸次數(shù)過(guò)多,可能引起堆棧溢出引起堆棧溢出例例 求求n的階乘的階乘) 1()!1() 1 , 0(1!nnnnn/*ch7_8.c*/#include int fac(int n) int f; if(n0) printf(n%cn,getone,putone); void hanoi(int n,char one,char two,char three) if(n=1) move(one,three); else hanoi(n-1,one,three,two);move(one,three);hanoi(n
13、-1,two,one,three); void main() int m; printf(Input the number of disks:); scanf(%d,&m); printf(The steps to moving %3d disks:n,m); hanoi(m,A,B,C);8.7 數(shù)組作為函數(shù)參數(shù)數(shù)組作為函數(shù)參數(shù)數(shù)組元素作函數(shù)實(shí)參數(shù)組元素作函數(shù)實(shí)參 值傳遞值傳遞數(shù)組名做函數(shù)參數(shù)數(shù)組名做函數(shù)參數(shù) 地址傳遞!地址傳遞!例例8.10 兩個(gè)數(shù)組大小比較兩個(gè)數(shù)組大小比較a a和和b b為有為有1010個(gè)元素的整型數(shù)組個(gè)元素的整型數(shù)組比較兩數(shù)組對(duì)應(yīng)元素比較兩數(shù)組對(duì)應(yīng)元素變量變量n
14、,m,kn,m,k記錄記錄aibi, ai=bi,aibi, ai=bi,aibiaik,nk,認(rèn)為數(shù)組認(rèn)為數(shù)組abab 若若nk,nk,認(rèn)為數(shù)組認(rèn)為數(shù)組abab 若若n=k,n=k,認(rèn)為數(shù)組認(rèn)為數(shù)組a=ba=b 數(shù)組元素作函數(shù)實(shí)參數(shù)組元素作函數(shù)實(shí)參 值傳遞值傳遞432105a562312107688432105b212343986654n=0m=0k=0in=0m=0k=1in=0m=1k=1in=1m=1k=1in=1m=1k=2in=2m=1k=2in=3m=1k=2#include void main() int a10,b10,i,n=0,m=0,k=0; printf(Enter
15、array a:n); for(i=0;i10;i+)scanf(%d,&ai); printf(Enter array b:n); for(i=0;i10;i+)scanf(%d,&bi); for(i=0;iy) flag=1; else if(xy) flag=-1; else flag=0; return(flag); 數(shù)組名作函數(shù)參數(shù)數(shù)組名作函數(shù)參數(shù) 地址傳遞地址傳遞 在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型應(yīng)一致且類型應(yīng)一致 形參數(shù)組大小形參數(shù)組大小(多維數(shù)組第一維多維數(shù)組第一維)可不可不指定指定 形參數(shù)組名是地址變量形參數(shù)組名是地址
16、變量例例 求學(xué)生的平均成績(jī)求學(xué)生的平均成績(jī) #include float average(int stu10, int n); void main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &scorei); av=average(score,10); printf(Average is:%.2f, av); float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ )
17、total += stui; av = total/n; return av; 實(shí)參用數(shù)組名實(shí)參用數(shù)組名形參用數(shù)組定義形參用數(shù)組定義, int stu .2109score562312.88stu例例 數(shù)組元素與數(shù)組元素與 數(shù)組名數(shù)組名 作函數(shù)參數(shù)比較作函數(shù)參數(shù)比較12a調(diào)用前調(diào)用前a0a112a調(diào)用調(diào)用a0a112xy21xy交換交換12a前往前往#include void swap2(int x,int y) int z; z=x; x=y; y=z;main() int a2=1,2; swap2(a0,a1); printf(a0=%dna1=%dn,a0,a1);值傳遞值傳遞12a調(diào)用前調(diào)用前12ax調(diào)用調(diào)用21ax交換交換21a前往前往#include void swap2(int x) int z; z=x0; x0=x1; x1=z;main() int a2=1,2; swap2(a); printf(a0=%dna1=%dn,a0,a1);地址傳遞地址傳遞例例 數(shù)組元素與數(shù)組元素與 數(shù)組名數(shù)組名 作函數(shù)參數(shù)比較作函數(shù)參數(shù)比較例例 數(shù)組排序數(shù)組排序-選擇法排序選擇法排序void sort(int array,int n) int i,j,k,t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蒸汽供氣合同范本
- 單位返聘合同范本
- 農(nóng)村工程改建合同范本
- 農(nóng)村住房貸款買賣合同范本
- 買賣股份合同范本
- 單位購(gòu)買服裝購(gòu)買合同范本
- 勞動(dòng)仲裁聘用合同范本
- 出售廢鋼 廢鐵合同范本
- 勞務(wù)分包項(xiàng)目合同范本
- 中介甲乙丙方合同范本
- Unit 4 Time to celebrate 教學(xué)設(shè)計(jì)-2024-2025學(xué)年外研版英語(yǔ)七年級(jí)上冊(cè)
- 健康檔案模板
- 筋膜刀的臨床應(yīng)用
- DB32-T 4790-2024建筑施工特種作業(yè)人員安全操作技能考核標(biāo)準(zhǔn)
- 2022年安徽阜陽(yáng)太和縣人民醫(yī)院本科及以上學(xué)歷招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2024-2030年中國(guó)反芻動(dòng)物飼料行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 護(hù)理團(tuán)體標(biāo)準(zhǔn)解讀-成人氧氣吸入療法護(hù)理
- 幼兒園大班《識(shí)字卡》課件
- 2024-2030全球與中國(guó)寵物醫(yī)院市場(chǎng)現(xiàn)狀及未來(lái)發(fā)展趨勢(shì)
- 《研學(xué)旅行課程設(shè)計(jì)》課件-2認(rèn)識(shí)研學(xué)旅行的參與方
- 安全警示教育的會(huì)議記錄內(nèi)容
評(píng)論
0/150
提交評(píng)論