計(jì)算機(jī)二級(jí)C語(yǔ)言_第7章函數(shù)_第1頁(yè)
計(jì)算機(jī)二級(jí)C語(yǔ)言_第7章函數(shù)_第2頁(yè)
計(jì)算機(jī)二級(jí)C語(yǔ)言_第7章函數(shù)_第3頁(yè)
計(jì)算機(jī)二級(jí)C語(yǔ)言_第7章函數(shù)_第4頁(yè)
計(jì)算機(jī)二級(jí)C語(yǔ)言_第7章函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、該章的學(xué)習(xí)內(nèi)容學(xué)點(diǎn)什么哪學(xué)點(diǎn)什么哪? ?掌握函數(shù)原型掌握函數(shù)原型(prototype)及其,及其,函數(shù)函數(shù)定義定義和和函數(shù)原型函數(shù)原型說(shuō)明說(shuō)明的方法的方法及二者的區(qū)別。及二者的區(qū)別。掌握函數(shù)的掌握函數(shù)的參數(shù)傳遞參數(shù)傳遞方式與方式與函數(shù)函數(shù)調(diào)調(diào)用用方法。方法。 理解掌握變量的理解掌握變量的作用域作用域和和存儲(chǔ)存儲(chǔ)類類的概念。的概念。1.1.通過(guò)通過(guò)C語(yǔ)言的學(xué)習(xí),牢固樹(shù)立起語(yǔ)言的學(xué)習(xí),牢固樹(shù)立起的概念,的概念,及其使用規(guī)則及其使用規(guī)則 。 2.理解函數(shù)的理解函數(shù)的作用域作用域及其及其存儲(chǔ)類存儲(chǔ)類及其及其自動(dòng)自動(dòng)變量變量與與靜態(tài)局部變量靜態(tài)局部變量在應(yīng)用中的區(qū)別在應(yīng)用中的區(qū)別。*3.在實(shí)際應(yīng)用中,學(xué)

2、習(xí)和體會(huì)采用在實(shí)際應(yīng)用中,學(xué)習(xí)和體會(huì)采用(模塊化)解決問(wèn)題(模塊化)解決問(wèn)題 的思想的思想。本章的學(xué)習(xí)難點(diǎn)本章目錄 函數(shù)函數(shù) 1.1.函數(shù)有關(guān)概念及其分類函數(shù)有關(guān)概念及其分類 1.2.函數(shù)的定義函數(shù)的定義 1.3.函數(shù)的返回值函數(shù)的返回值 1.4.函數(shù)的調(diào)用與參數(shù)傳遞函數(shù)的調(diào)用與參數(shù)傳遞 1.5.函數(shù)原型的說(shuō)明函數(shù)原型的說(shuō)明 *宏定義宏定義 變量的作用域和存儲(chǔ)類變量的作用域和存儲(chǔ)類 *模塊化程序設(shè)計(jì)方法模塊化程序設(shè)計(jì)方法 *應(yīng)用設(shè)計(jì)實(shí)例應(yīng)用設(shè)計(jì)實(shí)例 多文件方式組織的程序多文件方式組織的程序 概 述 一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每一一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每一個(gè)模塊用

3、來(lái)實(shí)現(xiàn)一定的功能。所有的高級(jí)語(yǔ)言中都有子個(gè)模塊用來(lái)實(shí)現(xiàn)一定的功能。所有的高級(jí)語(yǔ)言中都有子程序這個(gè)概念程序這個(gè)概念, , 用子程序來(lái)實(shí)現(xiàn)模塊功能。用子程序來(lái)實(shí)現(xiàn)模塊功能。在語(yǔ)言中,在語(yǔ)言中,子程序的作用是由函數(shù)來(lái)完成的子程序的作用是由函數(shù)來(lái)完成的。一個(gè)程序可由一個(gè)。一個(gè)程序可由一個(gè)主函數(shù)和若干個(gè)函數(shù)構(gòu)成。由主函數(shù)調(diào)用其它函數(shù),其主函數(shù)和若干個(gè)函數(shù)構(gòu)成。由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)它函數(shù)也可以互相調(diào)用。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。函數(shù)調(diào)用任意多次。 程序設(shè)計(jì)中,常將一些常用的功能模塊程序設(shè)計(jì)中,常將一些常用的功能模塊編寫(xiě)成函數(shù),放在函數(shù)庫(kù)

4、中供公共選用。要善編寫(xiě)成函數(shù),放在函數(shù)庫(kù)中供公共選用。要善于用函數(shù),以減少重復(fù)編程的工作量。于用函數(shù),以減少重復(fù)編程的工作量。 C語(yǔ)言提倡把一個(gè)大問(wèn)題劃分成許多個(gè)小語(yǔ)言提倡把一個(gè)大問(wèn)題劃分成許多個(gè)小塊,每一小塊編制一個(gè)函數(shù)。這樣塊,每一小塊編制一個(gè)函數(shù)。這樣C程序是由程序是由許多小函數(shù)而不是由少量大函數(shù)構(gòu)成。許多小函數(shù)而不是由少量大函數(shù)構(gòu)成。這樣作這樣作的好處的好處: : 各部分充分獨(dú)立,任務(wù)單一,便于書(shū)各部分充分獨(dú)立,任務(wù)單一,便于書(shū)寫(xiě)和調(diào)試。寫(xiě)和調(diào)試。 有些小函數(shù)還可以作為構(gòu)件有些小函數(shù)還可以作為構(gòu)件, , 被別被別的程序利用。的程序利用。 概 述C程序工程源程序文件1源程序文件2源程序文

5、件3編譯預(yù)處理命令全局變量聲明函數(shù)1函數(shù)n函數(shù)首部函數(shù)體局部變量聲明執(zhí)行語(yǔ)句C程序的基本結(jié)構(gòu)mainabcdeifghegh程序中函數(shù)調(diào)用示意圖程序中函數(shù)調(diào)用示意圖基本思想:將一個(gè)大的程序按功能分割成一些小模塊.特點(diǎn):u各模塊相對(duì)獨(dú)立、功能單一、結(jié)構(gòu)清晰、接口簡(jiǎn)單u控制了程序設(shè)計(jì)的復(fù)雜性u(píng)提高元件的可靠性u(píng)縮短開(kāi)發(fā)周期u避免程序開(kāi)發(fā)的重復(fù)勞動(dòng)u易于維護(hù)和功能擴(kuò)充開(kāi)發(fā)方法: 自上向下,逐步分解,分而治之模塊化程序設(shè)計(jì)C是模塊化程序設(shè)計(jì)語(yǔ)言規(guī)則&必須有且只能有一個(gè)名為main的主函數(shù)&C程序的執(zhí)行總是從main函數(shù)開(kāi)始, 在main中結(jié)束。&函數(shù)不能嵌套定義,可以嵌套調(diào)用函數(shù)的基本概念(1 1)

6、工程:是由一個(gè)或工程:是由一個(gè)或多個(gè)多個(gè)C C程序源文件組成。一個(gè)源程序是程序源文件組成。一個(gè)源程序是由由一個(gè)或多個(gè)函數(shù)組成一個(gè)或多個(gè)函數(shù)組成。 一個(gè)源程序是一個(gè)一個(gè)源程序是一個(gè)編譯單位編譯單位,即以源,即以源程序?yàn)閱挝贿M(jìn)行編譯,而不是以函數(shù)為程序?yàn)閱挝贿M(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。其擴(kuò)展名為單位進(jìn)行編譯。其擴(kuò)展名為 .h或或 .c。(3)C程序的執(zhí)行從main()函數(shù)開(kāi)始。沒(méi)有main( )函數(shù)的程序,不能執(zhí)行。 調(diào)用其他函數(shù)后流程回到main函數(shù),在main函數(shù)結(jié)束整個(gè)程序運(yùn)行。 main函數(shù)是系統(tǒng)定義的。(4)主函數(shù)可以調(diào)用任意子函數(shù),而子函數(shù)不能調(diào)用主函數(shù)。 子函數(shù)的地位是平等

7、的,相互獨(dú)立,相互無(wú)從屬關(guān)系,可以相互調(diào)用。 子函數(shù)可以直接或間接地自己調(diào)用自己,即遞歸調(diào)用。(2 2)C語(yǔ)言程序源文件由語(yǔ)言程序源文件由組成組成的概念是的概念是C語(yǔ)言語(yǔ)言思想思想的體現(xiàn)。主函數(shù)的體現(xiàn)。主函數(shù):包括一個(gè)包括一個(gè)且僅有且僅有一個(gè)一個(gè)main()。其他函數(shù)。其他函數(shù):可以有,也可以沒(méi)可以有,也可以沒(méi)有,可以有一個(gè),也可以有多個(gè)。有,可以有一個(gè),也可以有多個(gè)。使用庫(kù)函數(shù)應(yīng)注意:1、函數(shù)功能2、函數(shù)參數(shù)的數(shù)目和順序,及各參數(shù)意義和類型3、函數(shù)返回值意義和類型4、需要使用的包含文件u標(biāo)準(zhǔn)函數(shù)(庫(kù)函數(shù)):由系統(tǒng)提供:printf、scanf、 getchar、putchar等 u用戶自定義

8、函數(shù):由用戶按需要寫(xiě)的函數(shù)。從用戶角度看:函數(shù)的分類(1)u 無(wú)參函數(shù):在調(diào)用無(wú)參函數(shù)時(shí),主調(diào)函數(shù)并不將數(shù)據(jù)送給被調(diào)函數(shù),一般用來(lái)執(zhí)行指定的一組操作。無(wú)參函數(shù)可以帶回或不帶回函數(shù)值,但一般以不帶回函數(shù)值居多。u有參函數(shù):在調(diào)用函數(shù)時(shí),在主調(diào)函數(shù)和被調(diào)函數(shù)之間有參數(shù)傳遞,也就是說(shuō)主調(diào)函數(shù)可以將數(shù)據(jù)傳給被調(diào)函數(shù)使用,被調(diào)用函數(shù)中的數(shù)據(jù)也可以帶回來(lái)供主調(diào)函數(shù)使用。從函數(shù)的形式看:max( int x ,int y).max().u有返回值函數(shù):此類函數(shù)被調(diào)用執(zhí)行完后將向調(diào)用者返回一個(gè)執(zhí)行結(jié)果,稱為函數(shù)返回值。必須在函數(shù)定義和函數(shù)說(shuō)明中明確返回值的類型。u無(wú)返回值函數(shù):此類函數(shù)用于完成某項(xiàng)特定的處理任

9、務(wù),執(zhí)行完成后不向調(diào)用者返回函數(shù)值??疹愋偷恼f(shuō)明符為“void”從函數(shù)的返回值形式看:int max() return 表達(dá)式;void max().函數(shù)的定義(1 1)傳統(tǒng)風(fēng)格函數(shù)定義:)傳統(tǒng)風(fēng)格函數(shù)定義: 函數(shù)名函數(shù)名( (形參形參表列表列) ) 形參說(shuō)明形參說(shuō)明 說(shuō)明部分說(shuō)明部分 語(yǔ)句語(yǔ)句 函數(shù)時(shí)的參數(shù)稱為行參;函數(shù)時(shí)的參數(shù)稱為實(shí)參。(2)函數(shù)的現(xiàn)代定義方式類型類型 函數(shù)名函數(shù)名 ( (形參說(shuō)明表列形參說(shuō)明表列) ) 說(shuō)明部分說(shuō)明部分 語(yǔ)句語(yǔ)句 1. 無(wú)參函數(shù)類型標(biāo)識(shí)符類型標(biāo)識(shí)符 函數(shù)名函數(shù)名( ) 說(shuō)明部分說(shuō)明部分 語(yǔ)句語(yǔ)句 類型標(biāo)識(shí)符: 表示返回值類型 Hello( ) printf

10、 (Hello,world n); 例如:定義一個(gè)函數(shù)說(shuō)明:這里,只把main改為Hello作為函數(shù)名,其余不變。Hello函數(shù)是一個(gè)無(wú)參函數(shù),當(dāng)被其它函數(shù)調(diào)用時(shí),輸出Hello world字符串。類型標(biāo)識(shí)符類型標(biāo)識(shí)符 函數(shù)名函數(shù)名(形參表列形參表列) 說(shuō)明部分說(shuō)明部分 語(yǔ)句語(yǔ)句 2. 有參函數(shù)例: 求二數(shù)之最大值 int max (int x, int y) int z; z=xy? x:y; return (z); 注意:注意:出現(xiàn)return, 語(yǔ)句,返回值一般與函數(shù)類型一致。合法標(biāo)識(shí)符函數(shù)返回值類型缺省int型無(wú)返回值void函數(shù)體函數(shù)類型 函數(shù)名(形參類型說(shuō)明表)說(shuō)明部分語(yǔ)句部分例

11、有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x,int y) int z; z=xy?x:y; return(z); 例 有參函數(shù)(現(xiàn)代風(fēng)格) int max(int x, y) int z; z=xy?x:y; return(z); 例 空函數(shù) dummy( ) 函數(shù)體為空例 無(wú)參函數(shù) printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); 3. 可以有“空函數(shù)” 類型說(shuō)明符類型說(shuō)明符 函數(shù)名()函數(shù)名() 例如:dummy() 調(diào)用此函數(shù)時(shí),什么工作也不做,沒(méi)有任何實(shí)際作用。在主調(diào)函數(shù)中寫(xiě)上“dummy();” 表明 “這里

12、要調(diào)用一個(gè)函數(shù)”, 而現(xiàn)在這個(gè)函數(shù)沒(méi)有起作用, 等以后擴(kuò)充函數(shù)功能時(shí)補(bǔ)充上。函數(shù)定義說(shuō)明(1) 一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源程序文件是一個(gè)編譯單位,即以源程序?yàn)閱挝贿M(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。(2) 一個(gè)程序由一個(gè)或多個(gè)源程序文件組成。對(duì)較大的程序,一般不希望全放在一個(gè)文件中,而將函數(shù)和其他內(nèi)容(如預(yù)定義)分別放在若干個(gè)源文件中,再由若干源文件組成一個(gè)C程序。這樣可以分別編寫(xiě)、分別編譯,提高調(diào)度效率。一個(gè)源文件可以為多個(gè)C程序公用。函數(shù)定義說(shuō)明(3) 程序的執(zhí)行從main函數(shù)開(kāi)始,調(diào)用其他函數(shù)后流程回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。main函數(shù)是系統(tǒng)

13、定義的。 (4) 所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是互相獨(dú)立的,一個(gè)函數(shù)并不從屬于另一函數(shù),即函數(shù)不能嵌套定義,函數(shù)間可以互相調(diào)用,但不能調(diào)用main函數(shù)。程序舉例1int max(int x1,int x2,int x3)int max; if (x1x2) max=x1;else max=x2; if (maxx3) max=x3; return(max); 編寫(xiě)函數(shù),求三個(gè)整型參數(shù)的最大值。 程序舉例2/ /* *定義函數(shù)的返回值類型,定義函數(shù)的返回值類型,函數(shù)名,形參函數(shù)名,形參* */ /*通過(guò)比較得到三個(gè)數(shù)通過(guò)比較得到三個(gè)數(shù)的最大值放到的最大值放到max中中*/ /* *返回運(yùn)算

14、結(jié)果返回運(yùn)算結(jié)果* */ /函數(shù)的返回值功能功能將中的結(jié)果值返回給。語(yǔ)句語(yǔ)句return(return(返回值表達(dá)式返回值表達(dá)式) )或或 return return 表達(dá)式表達(dá)式; ;或或 return;return;舉例舉例 (1) 函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的。return語(yǔ)句將被調(diào)用函數(shù)中的一個(gè)確定值帶回主調(diào)函數(shù)中去。如果需要從被調(diào)用函數(shù)帶回一個(gè)函數(shù)值(供主調(diào)函數(shù)使用),被調(diào)用函數(shù)中必須包含return語(yǔ)句。如果不需要從被調(diào)用函數(shù)帶回函數(shù)值,可以不要return語(yǔ)句。 一個(gè)函數(shù)中可以有一個(gè)以上的return語(yǔ)句,執(zhí)行到哪一個(gè)return語(yǔ)句,哪一個(gè)語(yǔ)句起作用。 re

15、turn語(yǔ)句后面的括弧也可以不要,如return z ; 它與 “return(z);”等價(jià)。說(shuō)明:例如,maxmax(int xint x,int yint y) int int ; z zx xy y?xyxy; returnreturn();(); 函數(shù)max可以改寫(xiě)如下:max(int x,int y) return(xy?x y);); (2)return后面的值可以是一個(gè)表達(dá)式 這樣的函數(shù)體更為簡(jiǎn)短,只用一個(gè)return語(yǔ)句就把求值和返回都解決了。(3) 函數(shù)值的類型。既然函數(shù)有返回值,這個(gè)值當(dāng)然應(yīng)屬于某一個(gè)確定的類型,應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型。語(yǔ)言規(guī)定,凡不加類型說(shuō)明的函

16、數(shù),一律自動(dòng)按整型處理。 在定義函數(shù)時(shí)對(duì)函數(shù)值說(shuō)明的類型一般應(yīng)該和return語(yǔ)句中的表達(dá)式類型一致。例如,例2中用隱含方式指定max函數(shù)值為整型,而變量也被指定為整型,通過(guò)return語(yǔ)句把的值作為max的函數(shù)值,由max帶回主調(diào)函數(shù)。的類型與max函數(shù)的類型是一致的,是正確的。(4)若無(wú)return語(yǔ)句,遇到函數(shù)結(jié)束的“”時(shí),自動(dòng)返回調(diào)用函數(shù) (5) 如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。即函數(shù)類型決定返回值的類型。 main() float a,b; int c; scanf(“ %f ,%f ,”&a,&b);max

17、(float x,float y); cmax(a,b); printf(Max is dn,c); max(float x,float y) float z ; /* z為實(shí)型變量 */ z=xy?x y; return(z); 運(yùn)行情況如下:1.5, 2.5Max is 2 printstar() printf(*);main() int a; a=printstar(); printf(%d,a);(6)無(wú)返回值的函數(shù)返回后帶回不確定值輸出:10void printstar() printf(*);main() int a; a=printstar(); printf(%d,a);編譯錯(cuò)

18、誤!程序舉例2 下面下面addadd函數(shù)的功能是求兩個(gè)參數(shù)的和,函數(shù)的功能是求兩個(gè)參數(shù)的和,并將和值返回調(diào)用函數(shù)。函數(shù)中的錯(cuò)誤并將和值返回調(diào)用函數(shù)。函數(shù)中的錯(cuò)誤是:是:void add(float a, float b) float c; c=a+b; return c;void add(float a, float b)float add(float a, float b)7.37.3函數(shù)的調(diào)用函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式為 函數(shù)名(實(shí)參表列)函數(shù)名(實(shí)參表列); 如果是調(diào)用無(wú)參函數(shù),則“實(shí)參表列”可以沒(méi)有,但括弧不能省略。如果實(shí)參表列包含多個(gè)實(shí)參,則各參數(shù)間用逗號(hào)隔開(kāi)。 實(shí)參與形參的個(gè)數(shù)應(yīng)

19、相等,類型應(yīng)一致。實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。函數(shù)調(diào)用方式 1. 1. 函數(shù)語(yǔ)句函數(shù)語(yǔ)句 把函數(shù)調(diào)用作為一個(gè)語(yǔ)句。如 hello();這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。 2. 2. 函數(shù)表達(dá)式函數(shù)表達(dá)式 函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。 例如:c2*max(a,b);函數(shù)max是表達(dá)式的一部分,它的值乘2再賦給c。 3. 3. 函數(shù)參數(shù)函數(shù)參數(shù) 函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。例如:m=max(a,max(b,c) ; 其中max(b,c)是一次函數(shù)調(diào)用,它的值作為max另一次調(diào)用的實(shí)參。m的值是a、b、c三者

20、最大的。又如:printf (“%d”, max (a,b);也是把max(a,b)作為printf函數(shù)的一個(gè)參數(shù)。調(diào)用函數(shù)的過(guò)程是: 為函數(shù)的所有形參分配內(nèi)存單元。計(jì)算各個(gè)實(shí)參表達(dá)式的值,一一對(duì)應(yīng)的賦值給相應(yīng)形參(若是無(wú)參函數(shù),上述過(guò)程不執(zhí)行)。 進(jìn)入函數(shù)體,執(zhí)行函數(shù)中的語(yǔ)句,實(shí)現(xiàn)函數(shù)的功能。執(zhí)行到return語(yǔ)句時(shí),計(jì)算return語(yǔ)句中表達(dá)式的值(若是無(wú)返回值函數(shù),本項(xiàng)不做),返回到主調(diào)函數(shù)。 釋放形參及本函數(shù)內(nèi)的局部變量所占內(nèi)存, 繼續(xù)執(zhí)行主調(diào)函數(shù)中的后繼語(yǔ)句。形式參數(shù)和實(shí)際參數(shù)形式參數(shù)和實(shí)際參數(shù) 在調(diào)用函數(shù)時(shí),大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)用函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。這就是前面提到的有參

21、函數(shù)。前面已提到:在定義函數(shù)時(shí)函數(shù)名后面括弧中的變量名稱為“形式參數(shù)”(簡(jiǎn)稱“形參”),在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括弧中的參數(shù)(可以是一個(gè)表達(dá)式)稱為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”)。 參數(shù)傳遞uC語(yǔ)言中,函數(shù)調(diào)用是值傳遞方式,即函數(shù)的實(shí)際參數(shù)和形式參數(shù)之間的數(shù)據(jù)傳遞方向是單向的,只能由實(shí)際參數(shù)傳遞給形式參數(shù),而不能由形式參數(shù)傳遞給實(shí)際參數(shù),是實(shí)際參數(shù)向形式參數(shù)單向賦值的關(guān)系。u在內(nèi)存中,形式參數(shù)與實(shí)際參數(shù)占用不同的內(nèi)存單元。當(dāng)調(diào)用函數(shù)時(shí),給形式參數(shù)分配內(nèi)存單元,將實(shí)際參數(shù)的值賦值給形式參數(shù),調(diào)用后,形式參數(shù)單元釋放,實(shí)際參數(shù)仍保留調(diào)用前的值,形式參數(shù)值的變化不影響實(shí)際參數(shù)。函數(shù)參數(shù)及

22、其傳遞方式調(diào)用結(jié)束:35a:b:例 5.6 交換兩個(gè)數(shù)#include main() int a=3,b=5; printf(“a=%d,tb=%dn,a,b); printf(swapped:n); swap(a,b); printf(“a=%d,tb=%dn,a,b);swap(int x,int y) int temp; temp=x; x=y; y=temp;35a:b:調(diào)用前:調(diào)用35x:y:35a:b:swap:temp35a:b:x:35y:353temp=x x=y y=temp程序舉例 mainmain()() int aint a,b b,c c; scanfscanf(d

23、 d,d d,a a,b b);); c cmaxmax(a a,b b);); printfprintf(“Max isMax isd d,c c);); maxmax(int xint x,int yint y) * * 定義有參函數(shù)定義有參函數(shù)max max * * int int ; z zx xy y?xyxy; returnreturn();(); 運(yùn)行情況如下:運(yùn)行情況如下: 7,8 Max is 8c=max(a,b);(main 函數(shù))(max 函數(shù))max(int x, int y) int z; z=xy?x:y; return(z); 程序舉例 說(shuō)明: 實(shí)參必須有確定的

24、值 形參必須指定類型 形參與實(shí)參類型一致,個(gè)數(shù)相同 若形參與實(shí)參類型不一致,自動(dòng)按形參類型轉(zhuǎn)換函數(shù)調(diào)用轉(zhuǎn)換 形參在函數(shù)被調(diào)用前不占內(nèi)存;函數(shù)調(diào)用時(shí)為形參分配內(nèi)存;調(diào)用結(jié)束,內(nèi)存釋放例 計(jì)算x的立方#include float cube(float x) return(x*x*x);main() float a, product; printf(Please input value of a:); scanf(%f,&a); product=cube(a); printf(”Cube of %.4f is %.4fn,a,product);xaproduct1.21.21.728程序舉例在一個(gè)函

25、數(shù)中調(diào)用另一函數(shù)(即被調(diào)用函數(shù))需要具備哪些條件呢? (1) 首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫(kù)函數(shù)或用戶自己定義的函數(shù))。 (2) 如果使用庫(kù)函數(shù),一般還應(yīng)該在本文件開(kāi)頭用 include 命令將調(diào)用有關(guān)庫(kù)函數(shù)時(shí)所需用到的信息“包含”到本文件中來(lái)。 例如,include 其中“stdio.h”是一個(gè)“頭文件”。在stdio.h文件中放了輸入輸出庫(kù)函數(shù)所用到的一些宏定義信息。如果不包含“stdio.h”文件中的信息,就無(wú)法使用輸入輸出庫(kù)中的函數(shù)。 (3) 如果使用用戶自己定義的函數(shù),而且該函數(shù)與調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個(gè)文件中,一般還應(yīng)該在主調(diào)函數(shù)中對(duì)被調(diào)用的函數(shù)作聲明聲明,即

26、向編譯系統(tǒng)聲明將要調(diào)用此函數(shù),并將有關(guān)信息通知編譯系統(tǒng)。 例:對(duì)被調(diào)用的函數(shù)作聲明。float add(float x, float y);*對(duì)被調(diào)用函數(shù)的聲明對(duì)被調(diào)用函數(shù)的聲明*main()() float a,b,c; scanf(f ,f,a,b);); cadd(a,b);); printf(sum isf,c););float add(float x,float y) /* 函數(shù)首部函數(shù)首部* float ; /* 函數(shù)體函數(shù)體 */ xy; return();(); 注意:對(duì)函數(shù)的“定義定義”和“聲明聲明”不是一回事。 “定義”是指對(duì)函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型、形參

27、及其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。 “聲明” 的作用則是把函數(shù)的名字、函數(shù)類型以及形參的類型、個(gè)數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)系統(tǒng)按此進(jìn)行對(duì)照檢查(例如函數(shù)名是否正確,實(shí)參與形參的類型和個(gè)數(shù)是否一致)。從程序中可以看到對(duì)函數(shù)的聲明與函數(shù)定義中的第1行(函數(shù)首部)基本上是相同的。因此可以簡(jiǎn)單地照寫(xiě)已定義的函數(shù)的首部,再加一個(gè)分號(hào),就成為了對(duì)函數(shù)的“聲明”。 其實(shí),在函數(shù)聲明中也可以不寫(xiě)形參名,而只寫(xiě)形參的類型。如:float add(float,float); 函數(shù)聲明又稱為函數(shù)原型函數(shù)原型(function prototype)。作用:主要是利用它在程序的編譯階段對(duì)調(diào)用函數(shù)的合法性進(jìn)行全面檢查。 函數(shù)原型的一般形式為 (1) 函數(shù)類型 函數(shù)名(參數(shù)類型1,參數(shù)類型2); (2) 函數(shù)類型 函數(shù)名(參數(shù)類型1 參數(shù)名1 , 參數(shù)類型2 參數(shù)名2);例如: (1)float add(float,float); (2)float add(float x,float y); 函數(shù)聲明 說(shuō)明: (1) 實(shí)際上,如

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論