第7章 函數(shù)及其應(yīng)用
《第7章 函數(shù)及其應(yīng)用》由會員分享,可在線閱讀,更多相關(guān)《第7章 函數(shù)及其應(yīng)用(59頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第第7 7章章 函數(shù)及其應(yīng)用函數(shù)及其應(yīng)用第第7章章 函數(shù)及其應(yīng)用函數(shù)及其應(yīng)用學(xué)習(xí)目標(biāo)學(xué)習(xí)目標(biāo)掌握函數(shù)的編寫及調(diào)用方法,領(lǐng)會模塊化程序設(shè)計方法。掌握函數(shù)的編寫及調(diào)用方法,領(lǐng)會模塊化程序設(shè)計方法。學(xué)習(xí)內(nèi)容學(xué)習(xí)內(nèi)容函數(shù)的定義、調(diào)用及聲明,函數(shù)間參數(shù)的傳遞方法,模塊化程序設(shè)計函數(shù)的定義、調(diào)用及聲明,函數(shù)間參數(shù)的傳遞方法,模塊化程序設(shè)計方法。方法。下一頁下一頁返返 回回第第7章章 函數(shù)及其應(yīng)用函數(shù)及其應(yīng)用7.1 一個一個C程序?qū)嵗绦驅(qū)嵗?.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例7.5 本章小結(jié)本章小結(jié)7.6 實(shí)訓(xùn)實(shí)訓(xùn)上一頁上一頁返返
2、 回回7.1 一個一個C程序?qū)嵗绦驅(qū)嵗纠?-1】用調(diào)用函數(shù)的方式計算整數(shù)的階乘。用調(diào)用函數(shù)的方式計算整數(shù)的階乘?!境绦虼a程序代碼】#include stdio.hlong fac(int n)/*fac()是自定義函數(shù),用于計算是自定義函數(shù),用于計算n的階乘的階乘*/int i;long f=1;for(i=1;iy?x:y;return z;void main()int a,b,c,max;printf(enter a,b,c:);下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用scanf(%d,%d,%d,&a,&b,&c);max=mymax(mymax
3、(a,b),c);/*函數(shù)嵌套調(diào)用函數(shù)嵌套調(diào)用*/printf(max=%dnn,max);程序輸出結(jié)果為:程序輸出結(jié)果為:程序中函數(shù)程序中函數(shù)mymax()的功能是從兩個數(shù)中返回較大數(shù)。為了使用函數(shù)的功能是從兩個數(shù)中返回較大數(shù)。為了使用函數(shù)mymax()找出找出3個數(shù)中的最大數(shù),程序采用了個數(shù)中的最大數(shù),程序采用了2次調(diào)用,即先調(diào)用函數(shù)次調(diào)用,即先調(diào)用函數(shù)mymax()找出找出2個數(shù)中的大數(shù),然后再用這個大數(shù)和第個數(shù)中的大數(shù),然后再用這個大數(shù)和第3個數(shù)作實(shí)數(shù),調(diào)用函個數(shù)作實(shí)數(shù),調(diào)用函數(shù)數(shù)mymax()找出最大數(shù)。找出最大數(shù)。下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義
4、和調(diào)用7.2.3 函數(shù)的聲明函數(shù)的聲明函數(shù)的使用原則是先定義后使用,也就是說,函數(shù)的定義位置原則上函數(shù)的使用原則是先定義后使用,也就是說,函數(shù)的定義位置原則上應(yīng)出現(xiàn)在函數(shù)調(diào)用位置之前,例應(yīng)出現(xiàn)在函數(shù)調(diào)用位置之前,例7-1和例和例7-2遵循的就是這個原則。但遵循的就是這個原則。但是,如果在調(diào)用函數(shù)前對被調(diào)函數(shù)進(jìn)行聲明,那么調(diào)用函數(shù)和被調(diào)函是,如果在調(diào)用函數(shù)前對被調(diào)函數(shù)進(jìn)行聲明,那么調(diào)用函數(shù)和被調(diào)函數(shù)的位置就可以隨意安排。數(shù)的位置就可以隨意安排。函數(shù)聲明方法:函數(shù)聲明方法:函數(shù)值類型函數(shù)值類型 函數(shù)名函數(shù)名(形參列表形參列表);例例7-2中函數(shù)位置按以下形式安排,程序也能正常執(zhí)行。中函數(shù)位置按以下
5、形式安排,程序也能正常執(zhí)行。#include stdio.h#include math.hfloat area(float a,float b,float c);/*函數(shù)聲明函數(shù)聲明*/main()下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用float x,y,z,sf;printf(請輸入三邊請輸入三邊:);scanf(%f,%f,%f,&x,&y,&z);sf=area(x,y,z);/*調(diào)用函數(shù)調(diào)用函數(shù)*/printf(三邊為三邊為%5.2f,%5.2f,%5.2f的三角形面積等于的三角形面積等于%5.2fn,x,y,z,sf);float area(flo
6、at a,float b,float c)/*定義函數(shù)定義函數(shù)*/float h,s;h=0.5*(a+b+c);s=(sqrt(h*(h-a)*(h-b)*(h-c);return(s);下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用提示:提示:(1)函數(shù)聲明與函數(shù)定義的區(qū)別在于,函數(shù)聲明是通過語句來完成,)函數(shù)聲明與函數(shù)定義的區(qū)別在于,函數(shù)聲明是通過語句來完成,沒有函數(shù)體,作用類似于變量說明。沒有函數(shù)體,作用類似于變量說明。(2)當(dāng)函數(shù)值類型是默認(rèn)類型()當(dāng)函數(shù)值類型是默認(rèn)類型(int型)時,不論被調(diào)函數(shù)與調(diào)用函型)時,不論被調(diào)函數(shù)與調(diào)用函數(shù)位置如何安排,函數(shù)聲
7、明都可以忽略。但是能夠堅持函數(shù)聲明是一數(shù)位置如何安排,函數(shù)聲明都可以忽略。但是能夠堅持函數(shù)聲明是一個好的編程習(xí)慣。個好的編程習(xí)慣。下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用7.2.4 函數(shù)間的數(shù)據(jù)傳遞函數(shù)間的數(shù)據(jù)傳遞函數(shù)是用來實(shí)現(xiàn)具體功能的模塊,所以它必然要和程序中的其他模塊函數(shù)是用來實(shí)現(xiàn)具體功能的模塊,所以它必然要和程序中的其他模塊交換數(shù)據(jù)。一個函數(shù)可以從函數(shù)之外獲得數(shù)據(jù),并可以向其調(diào)用者返交換數(shù)據(jù)。一個函數(shù)可以從函數(shù)之外獲得數(shù)據(jù),并可以向其調(diào)用者返回數(shù)據(jù),這些數(shù)據(jù)主要是通過函數(shù)的參數(shù)和函數(shù)返回值來傳遞的?;財?shù)據(jù),這些數(shù)據(jù)主要是通過函數(shù)的參數(shù)和函數(shù)返回值來傳遞
8、的。C語言中,常見的參數(shù)傳遞方式有語言中,常見的參數(shù)傳遞方式有2種:值傳遞和地址傳遞。本節(jié)介紹種:值傳遞和地址傳遞。本節(jié)介紹值傳遞方式,地址傳遞將在第九章介紹。值傳遞方式,地址傳遞將在第九章介紹。值傳遞的特點(diǎn)是函數(shù)調(diào)用時實(shí)參僅僅將其值賦給形參。當(dāng)實(shí)參為變量值傳遞的特點(diǎn)是函數(shù)調(diào)用時實(shí)參僅僅將其值賦給形參。當(dāng)實(shí)參為變量時,實(shí)參變量和形參變量在存儲空間上是分開的,因此函數(shù)中對形參時,實(shí)參變量和形參變量在存儲空間上是分開的,因此函數(shù)中對形參變量值的任何修改都不會影響到相應(yīng)的實(shí)參變量,前面介紹的實(shí)例中變量值的任何修改都不會影響到相應(yīng)的實(shí)參變量,前面介紹的實(shí)例中均采用這種方式進(jìn)行參數(shù)傳遞。均采用這種方式進(jìn)
9、行參數(shù)傳遞。下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用【例例7-5】交換兩個變量的值。交換兩個變量的值?!境绦虼a程序代碼】#include stdio.hvoid swap(int x,int y);/*函數(shù)聲明函數(shù)聲明*/void main()int a=10,b=20;printf(a=%d,b=%dn,a,b);swap(a,b);printf(a=%d,b=%dnn,a,b);void swap(int x,int y)/*交換兩個參數(shù)變量的值交換兩個參數(shù)變量的值*/下一頁下一頁返返 回回上一頁上一頁上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用
10、int z;z=x;x=y;y=z;printf(x=%d,y=%dn,x,y);程序輸出結(jié)果為:程序輸出結(jié)果為:小測驗(yàn)小測驗(yàn)從程序輸出結(jié)果來看,函數(shù)從程序輸出結(jié)果來看,函數(shù)swap()并沒有完成交換兩個變量值的任務(wù),為什并沒有完成交換兩個變量值的任務(wù),為什么呢?么呢?提示:值傳遞方式的好處是減少了調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)依賴,增提示:值傳遞方式的好處是減少了調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)依賴,增強(qiáng)了函數(shù)自身的獨(dú)立性。強(qiáng)了函數(shù)自身的獨(dú)立性。返返 回回7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論一個變量在程序中的哪個函數(shù)中都能使用嗎?答案是否定的。一個變量在程序中的哪個函數(shù)中都能使用嗎?答案是否定
11、的。根據(jù)變量在程序中的使用范圍,可以將變量分為局部變量和全局變量。根據(jù)變量在程序中的使用范圍,可以將變量分為局部變量和全局變量。局部變量又稱為內(nèi)部變量,是指在函數(shù)內(nèi)部定義的變量,其有效范圍局部變量又稱為內(nèi)部變量,是指在函數(shù)內(nèi)部定義的變量,其有效范圍僅限于本函數(shù)內(nèi)部。僅限于本函數(shù)內(nèi)部。全局變量又稱為外部變量,是指在函數(shù)外部定義的變量。其有效范圍全局變量又稱為外部變量,是指在函數(shù)外部定義的變量。其有效范圍從定義變量的位置開始直到程序結(jié)束。從定義變量的位置開始直到程序結(jié)束?!纠?-6】局部變量和全局變量的使用。局部變量和全局變量的使用。#include stdio.hint x;/*定義定義x為全
12、局變量為全局變量*/int fun1(int x)/*形參形參x為局部變量為局部變量*/下一頁下一頁返返 回回7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論return x*x;int fun2(int y)int x;/*函數(shù)內(nèi)部定義函數(shù)內(nèi)部定義x為局部變量為局部變量*/x=y+5;return x*x;main()x=0;/*給全局變量給全局變量x賦值賦值*/printf(The result in fun1:%dn,fun1(5);printf(The result in fun2:%dn,fun2(5);printf(x=%dn,x);/*輸出全局變量輸出全局變量x*/下一頁下一頁返返 回回
13、上一頁上一頁7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論程序輸出結(jié)果為:程序輸出結(jié)果為:程序說明:程序說明:本例中有本例中有3個變量個變量x:一個是全局變量:一個是全局變量x,一個是函數(shù),一個是函數(shù)fun1()的形參的形參x,第第3個是在函數(shù)個是在函數(shù)fun2()中定義的局部變量中定義的局部變量x,它們,它們3個雖然同名卻是不個雖然同名卻是不同的對象。雖然全局變量的有效范圍是整個程序,但是在局部變量的同的對象。雖然全局變量的有效范圍是整個程序,但是在局部變量的作用范圍內(nèi),同名全局變量暫時不起作用。作用范圍內(nèi),同名全局變量暫時不起作用。提示提示:為了使程序清晰易讀,程序中不同用途的變量最好不要使用相
14、同的變量為了使程序清晰易讀,程序中不同用途的變量最好不要使用相同的變量名,以免造成混亂。名,以免造成混亂。下一頁下一頁返返 回回上一頁上一頁7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論程序中不論是形參程序中不論是形參x還是局部變量還是局部變量x,都是在函數(shù)執(zhí)行時為其分配存儲,都是在函數(shù)執(zhí)行時為其分配存儲單元,一旦函數(shù)執(zhí)行結(jié)束,所占內(nèi)存空間即刻釋放,也就是說它們的單元,一旦函數(shù)執(zhí)行結(jié)束,所占內(nèi)存空間即刻釋放,也就是說它們的生存期僅限于函數(shù)執(zhí)行期間,這種變量屬于動態(tài)存儲變量。生存期僅限于函數(shù)執(zhí)行期間,這種變量屬于動態(tài)存儲變量。【例例7-7】下面程序希望輸出下面程序希望輸出1n之間各數(shù)的階乘。之間各數(shù)的
15、階乘。#include stdio.hlong fun(int i)long f=1;/*定義定義f 為局部變量并賦初值為局部變量并賦初值1*/f=f*i;return f;下一頁下一頁返返 回回上一頁上一頁7.3 變量的進(jìn)一步討論變量的進(jìn)一步討論main()int n,m;printf(please enter n:);scanf(%d,&n);for(m=1;m0;i-)a+=sub2(i);/*函數(shù)調(diào)用函數(shù)調(diào)用*/return(a);int sub2(int n)/*函數(shù)定義函數(shù)定義*/return (n+1);程序分析:程序分析:程序中有程序中有3個函數(shù):個函數(shù):1個個main()函數(shù)
16、和函數(shù)和2個自定義函數(shù)。程序執(zhí)行時,主函數(shù)調(diào)個自定義函數(shù)。程序執(zhí)行時,主函數(shù)調(diào)用用sub1()函數(shù),函數(shù),sub1()函數(shù)又調(diào)用函數(shù)又調(diào)用sub2()函數(shù),函數(shù),sub2()函數(shù)執(zhí)行完后會返回函數(shù)執(zhí)行完后會返回sub1()函數(shù),函數(shù),sub1()函數(shù)會返回主函數(shù)。這種多層調(diào)用的關(guān)系稱為函數(shù)的嵌套調(diào)函數(shù)會返回主函數(shù)。這種多層調(diào)用的關(guān)系稱為函數(shù)的嵌套調(diào)用。用。圖圖7-1 是函數(shù)嵌套調(diào)用示意圖。是函數(shù)嵌套調(diào)用示意圖。小測驗(yàn)小測驗(yàn)寫出例寫出例7-8的輸出結(jié)果。的輸出結(jié)果。下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例【例例7-9】函數(shù)的遞歸調(diào)用。函數(shù)的遞歸調(diào)用。#include s
17、tdio.hint age(int n)int a;if (n=1)a=10;else a=age(n-1)+2;/*遞歸調(diào)用遞歸調(diào)用*/return(a);main()printf(age=%dn,age(5);下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例程序分析:程序分析:程序中主函數(shù)程序中主函數(shù)main()調(diào)用了函數(shù)調(diào)用了函數(shù)age(),而函數(shù),而函數(shù)age()在變量在變量n不等于不等于1時,又調(diào)用了時,又調(diào)用了age()函數(shù)自己,這種調(diào)用的關(guān)系就叫函數(shù)的遞歸調(diào)用。函數(shù)自己,這種調(diào)用的關(guān)系就叫函數(shù)的遞歸調(diào)用。圖圖7-2給出了給出了age()函數(shù)的遞歸過程。函數(shù)的遞歸
18、過程。【例例7-10】算術(shù)練習(xí)程序。讓計算機(jī)給小學(xué)生出算術(shù)練習(xí)程序。讓計算機(jī)給小學(xué)生出10道簡單的算術(shù)題道簡單的算術(shù)題(兩位整數(shù)范圍內(nèi),由隨機(jī)函數(shù)(兩位整數(shù)范圍內(nèi),由隨機(jī)函數(shù)rand()產(chǎn)生),學(xué)生輸入答案后,計產(chǎn)生),學(xué)生輸入答案后,計算機(jī)會自動判定是否正確,最后輸出學(xué)生的得分(每道題算機(jī)會自動判定是否正確,最后輸出學(xué)生的得分(每道題10分)。算分)。算術(shù)題有加、減、乘、除術(shù)題有加、減、乘、除4種。種。【編程思路編程思路】本題采用模塊化程序設(shè)計方法,本題采用模塊化程序設(shè)計方法,4種運(yùn)算在種運(yùn)算在4個子模塊(函數(shù))中完成,個子模塊(函數(shù))中完成,main()函數(shù)為主控程序,根據(jù)用戶的選擇,調(diào)用
19、相應(yīng)的子模塊,其模塊結(jié)函數(shù)為主控程序,根據(jù)用戶的選擇,調(diào)用相應(yīng)的子模塊,其模塊結(jié)構(gòu)如構(gòu)如圖圖7-3所示。所示。下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例【程序代碼程序代碼】#include stdio.h#include time.h#include stdlib.h void fun1();/*函數(shù)聲明函數(shù)聲明*/void fun2();/*函數(shù)聲明函數(shù)聲明*/void fun3();/*函數(shù)聲明函數(shù)聲明*/void fun4();/*函數(shù)聲明函數(shù)聲明*/main()/*主控函數(shù),顯示菜單主控函數(shù),顯示菜單*/int n;while(1)下一頁下一頁返返 回回上一頁上
20、一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例 printf(n=算術(shù)練習(xí)程序算術(shù)練習(xí)程序=n);printf(n 1.加加 法法 n);printf(n 2.減減 法法 n);printf(n 3.乘乘 法法 n);printf(n 4.除除 法法 n);printf(n 0.退退 出出 n);printf(n=n);下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例printf(請選擇請選擇(0-4):);scanf(%d,&n);switch (n)/*根據(jù)選擇調(diào)用相應(yīng)的函數(shù)根據(jù)選擇調(diào)用相應(yīng)的函數(shù)*/case 1:fun1();break;case 2:fun2();break;c
21、ase 3:fun3();break;case 4:fun4();break;case 0:exit(0);/*函數(shù)函數(shù)exit(0)用于正常退出程序用于正常退出程序*/void fun1()/*加法函數(shù)加法函數(shù)*/下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例 int i,a,b,m,k=0;for(i=0;i10;i+)a=10+rand()%90;b=10+rand()%90;printf(%d+%d=,a,b);scanf(%d,&m);if(m=(a+b)k+=10;printf(你的得分是你的得分是:%dn,k);void fun2()/*減法函數(shù)減法函數(shù)*/下
22、一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例 int i,a,b,m,k=0;for(i=0;i10;i+)a=10+rand()%90;b=10+rand()%90;printf(%d-%d=,a,b);scanf(%d,&m);if(m=(a-b)k+=10;printf(你的得分是你的得分是:%dn,k);下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例void fun3()/*乘法函數(shù)乘法函數(shù)*/int i,a,b,m,k=0;for(i=0;i10;i+)a=10+rand()%90;b=10+rand()%90;printf(%d*%d=,a,
23、b);scanf(%d,&m);if(m=(a*b)k+=10;printf(你的得分是你的得分是:%dn,k);下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例下一頁下一頁返返 回回上一頁上一頁void fun4()/*除法函數(shù)除法函數(shù)*/int i,a,b,m,k=0;for(i=0;i10;i+)a=10+rand()%90;b=10+rand()%90;printf(%d/%d=,a,b);scanf(%d,&m);if(m=(a/b)k+=10;printf(你的得分是你的得分是:%dn,k);上一頁上一頁7.4 函數(shù)應(yīng)用實(shí)例函數(shù)應(yīng)用實(shí)例程序執(zhí)行后的主界面為:程序執(zhí)
24、行后的主界面為:選擇選擇1,做加法練習(xí)時,執(zhí)行過程為:選擇,做加法練習(xí)時,執(zhí)行過程為:選擇3,做乘法練習(xí)時,執(zhí)行過程為:,做乘法練習(xí)時,執(zhí)行過程為:返返 回回7.5 本章小結(jié)本章小結(jié)下一頁下一頁返返 回回1.編程時使用函數(shù)的好處有以下幾個方面:編程時使用函數(shù)的好處有以下幾個方面:(1)程序結(jié)構(gòu)清晰,可讀性好。)程序結(jié)構(gòu)清晰,可讀性好。(2)減少重復(fù)編碼的工作量。)減少重復(fù)編碼的工作量。(3)可多人共同編制一個大程序,縮短程序設(shè)計周期,提高程序)可多人共同編制一個大程序,縮短程序設(shè)計周期,提高程序設(shè)計和調(diào)試的效率。設(shè)計和調(diào)試的效率??梢哉f掌握好函數(shù)是學(xué)好可以說掌握好函數(shù)是學(xué)好C語言的關(guān)鍵之一。語
25、言的關(guān)鍵之一。2.函數(shù)的使用原則是先定義后使用。函數(shù)的使用原則是先定義后使用。3.函數(shù)定義。根據(jù)實(shí)際問題確定函數(shù)首部,編寫函數(shù)體。函數(shù)定義。根據(jù)實(shí)際問題確定函數(shù)首部,編寫函數(shù)體。對初學(xué)者來說,定義函數(shù)時,如何設(shè)置形參是一個難點(diǎn)??梢赃@對初學(xué)者來說,定義函數(shù)時,如何設(shè)置形參是一個難點(diǎn)??梢赃@樣考慮:形參是虛擬變量,它要從調(diào)用函數(shù)中得值,那么該函數(shù)是樣考慮:形參是虛擬變量,它要從調(diào)用函數(shù)中得值,那么該函數(shù)是否需要從調(diào)用函數(shù)中接受數(shù)據(jù),需要接受幾個什么類型的數(shù)據(jù),以否需要從調(diào)用函數(shù)中接受數(shù)據(jù),需要接受幾個什么類型的數(shù)據(jù),以此來確定有沒有必要設(shè)置形參,設(shè)置幾個形參。此來確定有沒有必要設(shè)置形參,設(shè)置幾個
26、形參。例如,有函數(shù)首部為:例如,有函數(shù)首部為:float dis(float m1,float m2,float d)表示將從調(diào)用函數(shù)中接受表示將從調(diào)用函數(shù)中接受3個個float類型的數(shù)據(jù)。類型的數(shù)據(jù)。上一頁上一頁7.5 本章小結(jié)本章小結(jié)4.函數(shù)調(diào)用時,實(shí)參與形參的個數(shù)應(yīng)相同,類型應(yīng)一致。實(shí)參與形參函數(shù)調(diào)用時,實(shí)參與形參的個數(shù)應(yīng)相同,類型應(yīng)一致。實(shí)參與形參按順序?qū)?yīng)按順序?qū)?yīng),一一傳遞數(shù)據(jù)。一一傳遞數(shù)據(jù)。5.函數(shù)間數(shù)據(jù)傳遞方法有兩種:值傳遞和地址傳遞。當(dāng)實(shí)參為常量、函數(shù)間數(shù)據(jù)傳遞方法有兩種:值傳遞和地址傳遞。當(dāng)實(shí)參為常量、變量或表達(dá)式時均采用單向值傳遞,形參僅從實(shí)參得到值,形參值的變量或表達(dá)式
27、時均采用單向值傳遞,形參僅從實(shí)參得到值,形參值的變化對實(shí)參沒有影響。變化對實(shí)參沒有影響。6.函數(shù)聲明。原則上以下兩種情況可以不進(jìn)行函數(shù)聲明:函數(shù)聲明。原則上以下兩種情況可以不進(jìn)行函數(shù)聲明:(1)函數(shù)定義在前,調(diào)用函數(shù)在后。)函數(shù)定義在前,調(diào)用函數(shù)在后。(2)函數(shù)定義在后,但函數(shù)的類型是)函數(shù)定義在后,但函數(shù)的類型是int型。型。當(dāng)調(diào)用在前,被調(diào)函數(shù)定義在后,且被調(diào)函數(shù)的類型不是當(dāng)調(diào)用在前,被調(diào)函數(shù)定義在后,且被調(diào)函數(shù)的類型不是int型時,必型時,必須對被調(diào)函數(shù)進(jìn)行聲明。須對被調(diào)函數(shù)進(jìn)行聲明。7.函數(shù)可以嵌套調(diào)用和遞歸調(diào)用。函數(shù)可以嵌套調(diào)用和遞歸調(diào)用。8.變量。按照變量的作用范圍,變量分局部變量
28、和全局變量;按照變變量。按照變量的作用范圍,變量分局部變量和全局變量;按照變量的生存期,變量分靜態(tài)存儲變量和動態(tài)存儲變量。量的生存期,變量分靜態(tài)存儲變量和動態(tài)存儲變量。返返 回回7.6 實(shí)訓(xùn)實(shí)訓(xùn) 實(shí)訓(xùn)實(shí)訓(xùn)1 【實(shí)訓(xùn)內(nèi)容實(shí)訓(xùn)內(nèi)容】函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用【實(shí)訓(xùn)目的實(shí)訓(xùn)目的】掌握函數(shù)的定義和調(diào)用方法掌握函數(shù)的定義和調(diào)用方法【實(shí)訓(xùn)題目實(shí)訓(xùn)題目】(1)下面程序希望計算兩個數(shù)的平均值,寫出程序的預(yù)期結(jié)果,并)下面程序希望計算兩個數(shù)的平均值,寫出程序的預(yù)期結(jié)果,并上機(jī)驗(yàn)證。上機(jī)驗(yàn)證。#include stdio.hdouble average(int,int);/*函數(shù)聲明函數(shù)聲明*/main()
29、int a,b;double v;a=10;b=11;下一頁下一頁返返 回回7.6 實(shí)訓(xùn)實(shí)訓(xùn)v=average(a,b);/*函數(shù)調(diào)用函數(shù)調(diào)用*/printf(%lfn,v);double average(int x,int y)/*函數(shù)定義函數(shù)定義*/double z;z=(x+y)/2;return(z);(2)下面程序的功能是計算兩個圓的周長之差,請把程序補(bǔ)充完整,)下面程序的功能是計算兩個圓的周長之差,請把程序補(bǔ)充完整,并上機(jī)驗(yàn)證。并上機(jī)驗(yàn)證。#include stdio.h ;下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn)main()double r1,r2,len;r1=3.3
30、;r2=5.5;len=;printf(len=%lfn,len);double mylen(double r)double length;length=2*3.14159*r;下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn) 實(shí)訓(xùn)實(shí)訓(xùn)2 【實(shí)訓(xùn)內(nèi)容實(shí)訓(xùn)內(nèi)容】函數(shù)間數(shù)據(jù)的傳遞函數(shù)間數(shù)據(jù)的傳遞【實(shí)訓(xùn)目的實(shí)訓(xùn)目的】掌握單向值傳遞方法掌握單向值傳遞方法【實(shí)訓(xùn)題目實(shí)訓(xùn)題目】分析下面程序的輸出結(jié)果,并上機(jī)驗(yàn)證。分析下面程序的輸出結(jié)果,并上機(jī)驗(yàn)證。#include stdio.hint f(int x,int y,int cp,int dp)cp=x*x+y*y;dp=x+x-y*y;return(cp
31、);return(dp);下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn)main()int a=4,b=3,c=5,d=6;f(a,b,c,d);printf(%d%dn,c,d);下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn) 實(shí)訓(xùn)實(shí)訓(xùn)3 【實(shí)訓(xùn)內(nèi)容實(shí)訓(xùn)內(nèi)容】函數(shù)的編寫函數(shù)的編寫【實(shí)訓(xùn)目的實(shí)訓(xùn)目的】掌握函數(shù)的編寫方法掌握函數(shù)的編寫方法【實(shí)訓(xùn)題目實(shí)訓(xùn)題目】函數(shù)函數(shù)prime()是一個判斷整數(shù)是否為素數(shù)的函數(shù),調(diào)用是一個判斷整數(shù)是否為素數(shù)的函數(shù),調(diào)用該函數(shù)輸出該函數(shù)輸出1000以內(nèi)的素數(shù),要求輸出每行以內(nèi)的素數(shù),要求輸出每行10個數(shù)。主函數(shù)已經(jīng)給出,個數(shù)。主函數(shù)已經(jīng)給出,請編寫函數(shù)請編寫
32、函數(shù)prime()。int prime(int n)/*判斷參數(shù)判斷參數(shù)n是否為素數(shù)是否為素數(shù)*/void main()/*主函數(shù)主函數(shù)*/下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn)int n;int c=0;/*統(tǒng)計素數(shù)個數(shù)統(tǒng)計素數(shù)個數(shù),用以控制輸出格式用以控制輸出格式*/printf(1000之間的素數(shù)如下之間的素數(shù)如下:n);for(n=2;n=1000;n+)if(prime(n)=1)/*函數(shù)調(diào)用函數(shù)調(diào)用*/printf(%6d,n);c+;if(c%10=0)printf(n);/*每行輸出每行輸出10個素數(shù)個素數(shù)*/下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn) 實(shí)訓(xùn)
33、實(shí)訓(xùn)4 【實(shí)訓(xùn)內(nèi)容實(shí)訓(xùn)內(nèi)容】變量。變量?!緦?shí)訓(xùn)目的實(shí)訓(xùn)目的】掌握局部變量和靜態(tài)變量的特性。掌握局部變量和靜態(tài)變量的特性。【實(shí)訓(xùn)題目實(shí)訓(xùn)題目】分析下面程序的輸出結(jié)果,然后上機(jī)驗(yàn)證。分析下面程序的輸出結(jié)果,然后上機(jī)驗(yàn)證。程序一程序一#include stdio.h#include math.hvoid fun1();void fun2();void main()int x=1;下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn) fun1();printf(%dn,x);void fun1()int x=2;fun2();printf(%dn,x);void fun2()int x=3;printf
34、(%dn,x);下一頁下一頁返返 回回上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn)程序二程序二#include stdio.h#include math.hvoid fun();void main()fun();fun();fun();void fun()int x=0;x=x+1;printf(%dn,x);下一頁下一頁返返 回回上一頁上一頁上一頁上一頁7.6 實(shí)訓(xùn)實(shí)訓(xùn)程序三程序三#include stdio.h#include math.hvoid fun();void main()fun();fun();fun();返返 回回void fun()static int x=0;x=x+1;printf(%dn,x);圖圖7-1 函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用返返 回回圖圖7-2 age()函數(shù)的遞歸過程函數(shù)的遞歸過程返返 回回圖圖7-3 模塊化結(jié)構(gòu)示意模塊化結(jié)構(gòu)示意返返 回回
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案