第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 變量的進一步討論變量的進一步討論7.4 函數(shù)應(yīng)用實例函數(shù)應(yīng)用實例7.5 本章小結(jié)本章小結(jié)7.6 實訓(xùn)實訓(xùn)上一頁上一頁返返
2、 回回7.1 一個一個C程序?qū)嵗绦驅(qū)嵗纠?-1】用調(diào)用函數(shù)的方式計算整數(shù)的階乘。用調(diào)用函數(shù)的方式計算整數(shù)的階乘。【程序代碼程序代碼】#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ù),調(diào)用函個數(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ù)進行聲明,那么調(diào)用函數(shù)和被調(diào)函是,如果在調(diào)用函數(shù)前對被調(diào)函數(shù)進行聲明,那么調(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ù)值類型是默認類型()當(dāng)函數(shù)值類型是默認類型(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ù)是用來實現(xiàn)具體功能的模塊,所以它必然要和程序中的其他模塊函數(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é)介紹值傳遞方式,地址傳遞將在第九章介紹。值傳遞方式,地址傳遞將在第九章介紹。值傳遞的特點是函數(shù)調(diào)用時實參僅僅將其值賦給形參。當(dāng)實參為變量值傳遞的特點是函數(shù)調(diào)用時實參僅僅將其值賦給形參。當(dāng)實參為變量時,實參變量和形參變量在存儲空間上是分開的,因此函數(shù)中對形參時,實參變量和形參變量在存儲空間上是分開的,因此函數(shù)中對形參變量值的任何修改都不會影響到相應(yīng)的實參變量,前面介紹的實例中變量值的任何修改都不會影響到相應(yīng)的實參變量,前面介紹的實例中均采用這種方式進行參數(shù)傳遞。均采用這種方式進
9、行參數(shù)傳遞。下一頁下一頁返返 回回上一頁上一頁7.2 函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用【例例7-5】交換兩個變量的值。交換兩個變量的值。【程序代碼程序代碼】#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é)果為:小測驗小測驗從程序輸出結(jié)果來看,函數(shù)從程序輸出結(jié)果來看,函數(shù)swap()并沒有完成交換兩個變量值的任務(wù),為什并沒有完成交換兩個變量值的任務(wù),為什么呢?么呢?提示:值傳遞方式的好處是減少了調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)依賴,增提示:值傳遞方式的好處是減少了調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)依賴,增強了函數(shù)自身的獨立性。強了函數(shù)自身的獨立性。返返 回回7.3 變量的進一步討論變量的進一步討論一個變量在程序中的哪個函數(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é)束。【例例7-6】局部變量和全局變量的使用。局部變量和全局變量的使用。#include stdio.hint x;/*定義定義x為全
12、局變量為全局變量*/int fun1(int x)/*形參形參x為局部變量為局部變量*/下一頁下一頁返返 回回7.3 變量的進一步討論變量的進一步討論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 變量的進一步討論變量的進一步討論程序輸出結(jié)果為:程序輸出結(jié)果為:程序說明:程序說明:本例中有本例中有3個變量個變量x:一個是全局變量:一個是全局變量x,一個是函數(shù),一個是函數(shù)fun1()的形參的形參x,第第3個是在函數(shù)個是在函數(shù)fun2()中定義的局部變量中定義的局部變量x,它們,它們3個雖然同名卻是不個雖然同名卻是不同的對象。雖然全局變量的有效范圍是整個程序,但是在局部變量的同的對象。雖然全局變量的有效范圍是整個程序,但是在局部變量的作用范圍內(nèi),同名全局變量暫時不起作用。作用范圍內(nèi),同名全局變量暫時不起作用。提示提示:為了使程序清晰易讀,程序中不同用途的變量最好不要使用相
14、同的變量為了使程序清晰易讀,程序中不同用途的變量最好不要使用相同的變量名,以免造成混亂。名,以免造成混亂。下一頁下一頁返返 回回上一頁上一頁7.3 變量的進一步討論變量的進一步討論程序中不論是形參程序中不論是形參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 變量的進一步討論變量的進一步討論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)用示意圖。小測驗小測驗寫出例寫出例7-8的輸出結(jié)果。的輸出結(jié)果。下一頁下一頁返返 回回上一頁上一頁7.4 函數(shù)應(yīng)用實例函數(shù)應(yīng)用實例【例例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ù)應(yīng)用實例程序分析:程序分析:程序中主函數(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、過程?!纠?-10】算術(shù)練習(xí)程序。讓計算機給小學(xué)生出算術(shù)練習(xí)程序。讓計算機給小學(xué)生出10道簡單的算術(shù)題道簡單的算術(shù)題(兩位整數(shù)范圍內(nèi),由隨機函數(shù)(兩位整數(shù)范圍內(nèi),由隨機函數(shù)rand()產(chǎn)生),學(xué)生輸入答案后,計產(chǎn)生),學(xué)生輸入答案后,計算機會自動判定是否正確,最后輸出學(xué)生的得分(每道題算機會自動判定是否正確,最后輸出學(xué)生的得分(每道題10分)。算分)。算術(shù)題有加、減、乘、除術(shù)題有加、減、乘、除4種。種?!揪幊趟悸肪幊趟悸贰勘绢}采用模塊化程序設(shè)計方法,本題采用模塊化程序設(shè)計方法,4種運算在種運算在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ù)應(yīng)用實例【程序代碼程序代碼】#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ù)應(yīng)用實例 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ù)應(yīng)用實例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ù)應(yīng)用實例 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ù)應(yīng)用實例 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ù)應(yīng)用實例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ù)應(yīng)用實例下一頁下一頁返返 回回上一頁上一頁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ù)應(yīng)用實例程序執(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ù)定義。根據(jù)實際問題確定函數(shù)首部,編寫函數(shù)體。對初學(xué)者來說,定義函數(shù)時,如何設(shè)置形參是一個難點。可以這對初學(xué)者來說,定義函數(shù)時,如何設(shè)置形參是一個難點??梢赃@樣考慮:形參是虛擬變量,它要從調(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ù)應(yīng)相同,類型應(yīng)一致。實參與形參函數(shù)調(diào)用時,實參與形參的個數(shù)應(yīng)相同,類型應(yīng)一致。實參與形參按順序?qū)?yīng)按順序?qū)?yīng),一一傳遞數(shù)據(jù)。一一傳遞數(shù)據(jù)。5.函數(shù)間數(shù)據(jù)傳遞方法有兩種:值傳遞和地址傳遞。當(dāng)實參為常量、函數(shù)間數(shù)據(jù)傳遞方法有兩種:值傳遞和地址傳遞。當(dāng)實參為常量、變量或表達式時均采用單向值傳遞,形參僅從實參得到值,形參值的變量或表達式
27、時均采用單向值傳遞,形參僅從實參得到值,形參值的變化對實參沒有影響。變化對實參沒有影響。6.函數(shù)聲明。原則上以下兩種情況可以不進行函數(shù)聲明:函數(shù)聲明。原則上以下兩種情況可以不進行函數(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ù)進行聲明。須對被調(diào)函數(shù)進行聲明。7.函數(shù)可以嵌套調(diào)用和遞歸調(diào)用。函數(shù)可以嵌套調(diào)用和遞歸調(diào)用。8.變量。按照變量的作用范圍,變量分局部變量
28、和全局變量;按照變變量。按照變量的作用范圍,變量分局部變量和全局變量;按照變量的生存期,變量分靜態(tài)存儲變量和動態(tài)存儲變量。量的生存期,變量分靜態(tài)存儲變量和動態(tài)存儲變量。返返 回回7.6 實訓(xùn)實訓(xùn) 實訓(xùn)實訓(xùn)1 【實訓(xùn)內(nèi)容實訓(xùn)內(nèi)容】函數(shù)的定義和調(diào)用函數(shù)的定義和調(diào)用【實訓(xùn)目的實訓(xùn)目的】掌握函數(shù)的定義和調(diào)用方法掌握函數(shù)的定義和調(diào)用方法【實訓(xùn)題目實訓(xùn)題目】(1)下面程序希望計算兩個數(shù)的平均值,寫出程序的預(yù)期結(jié)果,并)下面程序希望計算兩個數(shù)的平均值,寫出程序的預(yù)期結(jié)果,并上機驗證。上機驗證。#include stdio.hdouble average(int,int);/*函數(shù)聲明函數(shù)聲明*/main()
29、int a,b;double v;a=10;b=11;下一頁下一頁返返 回回7.6 實訓(xùn)實訓(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)下面程序的功能是計算兩個圓的周長之差,請把程序補充完整,)下面程序的功能是計算兩個圓的周長之差,請把程序補充完整,并上機驗證。并上機驗證。#include stdio.h ;下一頁下一頁返返 回回上一頁上一頁7.6 實訓(xùn)實訓(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 實訓(xùn)實訓(xùn) 實訓(xùn)實訓(xùn)2 【實訓(xùn)內(nèi)容實訓(xùn)內(nèi)容】函數(shù)間數(shù)據(jù)的傳遞函數(shù)間數(shù)據(jù)的傳遞【實訓(xùn)目的實訓(xùn)目的】掌握單向值傳遞方法掌握單向值傳遞方法【實訓(xùn)題目實訓(xùn)題目】分析下面程序的輸出結(jié)果,并上機驗證。分析下面程序的輸出結(jié)果,并上機驗證。#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 實訓(xùn)實訓(xùn)main()int a=4,b=3,c=5,d=6;f(a,b,c,d);printf(%d%dn,c,d);下一頁下一頁返返 回回上一頁上一頁7.6 實訓(xùn)實訓(xùn) 實訓(xùn)實訓(xùn)3 【實訓(xùn)內(nèi)容實訓(xùn)內(nèi)容】函數(shù)的編寫函數(shù)的編寫【實訓(xùn)目的實訓(xùn)目的】掌握函數(shù)的編寫方法掌握函數(shù)的編寫方法【實訓(xùn)題目實訓(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 實訓(xùn)實訓(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 實訓(xùn)實訓(xùn) 實訓(xùn)
33、實訓(xùn)4 【實訓(xùn)內(nèi)容實訓(xùn)內(nèi)容】變量。變量?!緦嵱?xùn)目的實訓(xùn)目的】掌握局部變量和靜態(tài)變量的特性。掌握局部變量和靜態(tài)變量的特性?!緦嵱?xùn)題目實訓(xùn)題目】分析下面程序的輸出結(jié)果,然后上機驗證。分析下面程序的輸出結(jié)果,然后上機驗證。程序一程序一#include stdio.h#include math.hvoid fun1();void fun2();void main()int x=1;下一頁下一頁返返 回回上一頁上一頁7.6 實訓(xùn)實訓(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 實訓(xùn)實訓(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 實訓(xùn)實訓(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(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 各種煤礦安全考試試題含答案