版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 函數(shù) 本章的學習重點函數(shù)的分類函數(shù)的定義函數(shù)的調(diào)用與聲明函數(shù)的實參與形參局部變量和全局變量函數(shù)的嵌套調(diào)用 8.1 函數(shù)的定義 函數(shù)是C語言的基本組成單位,它是模塊化程序設計的主要構成單元。模塊單元是指實現(xiàn)某一功能的程序段,通常以函數(shù)形式實現(xiàn)。 8.1.1 函數(shù)的分類 1按照定義類型劃分:主函數(shù)、庫函數(shù)和用戶自定義函數(shù)。主函數(shù):主函數(shù)的調(diào)用名稱為main(),它是C語言中最主要的函數(shù),在C語言中具有唯一性。庫函數(shù):庫函數(shù)通常由開發(fā)編譯系統(tǒng)的人員編寫,并加以封裝后嵌入到C語言編譯系統(tǒng)中。用戶自定義函數(shù):用戶自定義函數(shù)是由用戶定義,用于完成某些特定功能的程序段,通常也將用戶自定義函數(shù)稱為子函
2、數(shù)。2按照是否能夠返回值劃分按照能不能返回數(shù)值分為返回值類型函數(shù)和無返回類型函數(shù)。 8.1.1 函數(shù)的分類 返回值類型函數(shù):返回值類型函數(shù)在定義時應指定返回值的類型。例如:int max()程序段無返回類型函數(shù):無返回類型函數(shù)在定義時應在函數(shù)名前面標注void說明符,以說明該函數(shù)為無返回類型。 3按照函數(shù)是否帶參數(shù)劃分 按照函數(shù)是否帶有參數(shù)分為有參函數(shù)和無參函數(shù)。有參函數(shù):函數(shù)定義和調(diào)用時時含有輸入?yún)?shù)的函數(shù)。無參函數(shù):函數(shù)定義和調(diào)用時都不帶參數(shù)的函數(shù)類型。 8.1.2 函數(shù)的定義 函數(shù)定義的一般表達形式為:類型說明符 函數(shù)名(形參表列)程序體 函數(shù)構成的程序結構如下:函數(shù)名1( 參數(shù)表列)程
3、序體1 8.1.2 函數(shù)的定義 1無返回值函數(shù)定義無返回值類型的函數(shù)定義使用void作函數(shù)類型說明符。例如:void test()printf(“This is a function testn”);2返回值函數(shù)定義帶有返回值的函數(shù)定義時類型說明符可以使用除void以外的任何數(shù)據(jù)類型。函數(shù)使用return語句返回數(shù)值。例如:01int Sum( )0203int i=0, sum=0;04while(ib)04return a;05else06return b;07函數(shù)max判斷兩個整型數(shù)值a和b的大小,并返回較大的一個。 8.2 函數(shù)的調(diào)用與聲明 函數(shù)定義后,通過被調(diào)用來執(zhí)行。通常情況下,在
4、調(diào)用函數(shù)時,應先對函數(shù)進行聲明。 8.2.1 函數(shù)的調(diào)用 函數(shù)在定義之后,可以由它本身或其他函數(shù)體調(diào)用。函數(shù)調(diào)用的一般表達形式為:函數(shù)名(實參表列)其中函數(shù)名就是函數(shù)定義的函數(shù)名稱,在這里,函數(shù)稱為被調(diào)函數(shù)。范例8.1 SubFuncCalcMaxVal.c 設計一個返回int類型的函數(shù)max,功能是計算主調(diào)函數(shù)中兩個變量的大小,返回較大的一個,當兩個數(shù)相同時,打印數(shù)據(jù)相同的信息。范例分析:1子函數(shù)max的定義2函數(shù)頭3形參 8.2.1 函數(shù)的調(diào)用 4函數(shù)調(diào)用語句 5程序的入口6程序的執(zhí)行 自定義函數(shù)可以在程序中被多次調(diào)用,使用不同的實參,返回結果也有所不同。由于函數(shù)具有很好的模塊管理功能以及
5、支持反復調(diào)用功能,因此函數(shù)被廣泛用于程序中實際問題的解決。 實訓8.1計算數(shù)學分段函數(shù) 數(shù)學分段函數(shù)P(m, n)由兩部分組成,當mn時,P(m, n)的值為 ,當m=n時,P(m, n)的值為0。編寫程序,鍵盤輸入m和n的值,使用子函數(shù)計算階乘,調(diào)用該函數(shù),實現(xiàn)對數(shù)學函數(shù) 的計算。1需求分析:需求1:計算分段數(shù)學函數(shù)的值需求2:設計程序子函數(shù)factorial,用于計算階乘。2技術應用對于需求1,使用ifelse分支語句實現(xiàn)分段數(shù)學函數(shù)的計算。對于需求2,設計名為factorial的子函數(shù),該函數(shù)含有一個形參,返回值類型為double,避免因為返回值數(shù)值過大導致數(shù)值溢出。 源程序:SubFu
6、ncCalcPartsFunction.c 8.2.2 函數(shù)的聲明 1函數(shù)聲明的一般形式 函數(shù)聲明應該放在調(diào)用函數(shù)處的前面,其一般表達形式為:類型標識符 函數(shù)名(類型標識符1 形參名1, 類型標識符2 形參名2,);也可以省略形參名,只保留類型標識符:類型標識符 函數(shù)名(類型標識符1, 類型標識符2,);例如:int min(int a, int b);或者int min(int, int); 8.2.2 函數(shù)的聲明 2函數(shù)聲明的位置函數(shù)聲明的作用是告訴編譯系統(tǒng)有一個已經(jīng)定義好的子函數(shù)可以調(diào)用,因此,通常將函數(shù)聲明放在函數(shù)的頭部,而將函數(shù)定義放在調(diào)用函數(shù)位置之后。例如:int callback
7、_test(int a, int b);/函數(shù)聲明void main()/主函數(shù)a = callback_test(x, y);/函數(shù)調(diào)用語句int callback_test(int a, int b)/函數(shù)的定義函數(shù)體8.2.2 函數(shù)的聲明 范例8.2 CalcOverTurnSeqNum.c 計算數(shù)列M = 1-2+3-+(n-1)-n。設計一個函數(shù),命名為OverTurnSeqNum,函數(shù)的功能是計算M的值,其中n由形參傳入。3多文件系統(tǒng)的函數(shù)聲明當需要調(diào)用的函數(shù)與本身的函數(shù)不在一個文件中時,必須使用函數(shù)聲明,以保證程序編譯時能夠找到該函數(shù),并使程序正確運行。 實訓8.2近似計算圓周率
8、pi 編寫程序,利用公式 計算圓周率pi,定義子函數(shù)計算pi,并將該子函數(shù)保存于單獨的文件中,在主函數(shù)中輸出計算所得的pi的值。輸入n的值以確定pi的精度。1需求分析:需求1:計算的值需求2:通過調(diào)用數(shù)學庫函數(shù)sqrt計算pi的值需求3:輸入n的值確定pi的精度需求4:定義的子函數(shù)在一個單獨的文件中需求5:聲明子函數(shù),并定義在declare.h文件。2技術應用對需求1,定義子函數(shù)Calc_pi(double n),計算公式的值。對需求2,子函數(shù)Calc_pi(double n)中調(diào)用sqrt函數(shù)。對需求3,主函數(shù)中輸入n的值,以確定pi的精度。對需求4,將子函數(shù)定義在單獨的文件中,命名為Cal
9、c_pi.c。對需求5,新建文件,命名為declare.h,將子函數(shù)Calc_pi(double n)的聲明放到改文件中,在主函數(shù)所屬文件中包含該頭文件。 8.2.3 函數(shù)的參數(shù) 1函數(shù)的形參形參僅出現(xiàn)在被調(diào)函數(shù)中,類似于函數(shù)內(nèi)定義的變量,在函數(shù)體內(nèi)任何位置都可以使用。但形參只能用于本函數(shù)體內(nèi),不能用于其他函數(shù)。2函數(shù)的實參實參僅出現(xiàn)在主調(diào)函數(shù)中。通常,實參是能夠計算為數(shù)值的變量或表達式,也可以是指針、數(shù)組名和函數(shù)等。3函數(shù)調(diào)用時的實參與形參關系函數(shù)調(diào)用時,主調(diào)函數(shù)將實參的值傳遞給被調(diào)函數(shù)的形參,從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。8.2.3 函數(shù)的參數(shù) 函數(shù)調(diào)用時實參和形參之間的值傳遞過程
10、如下圖: 范例8.3 ExchangeTwoValueInSubFunc.c 設計一個函數(shù),命名為ExchangeValue,函數(shù)的作用是交換由主調(diào)函數(shù)輸入的兩個變量的值,并在主調(diào)函數(shù)中輸出函數(shù)調(diào)用前后兩個變量的值,函數(shù)定義類型為void類型。 8.2.3 函數(shù)的參數(shù) 范例8.3 ExchangeValue()函數(shù)調(diào)用時m和n以及a和b的內(nèi)存結構變化圖:8.3 局部變量與全局變量 局部變量的作用域僅限在函數(shù)內(nèi)部,即變量的定義和使用都只能在函數(shù)內(nèi)進行。如下面程序中所示:01char test1(char c)0203int a, b;040506int test2(int m, int n)07
11、08int x, y;091011void main()1213char w=A, v;14int f1 = 10, f2 = 12, res=0;15v = test1(w);16res = test2(f1, f2);1718int next = 0;19next = v + res;202122 形參c,變量a和b的作用域,僅用于函數(shù)test1()內(nèi)部。形參m和n,變量x和y的作用域,僅用于函數(shù)test2()內(nèi)部。變量w、vf1、f2和res的作用域,僅用于函數(shù)main()內(nèi)部。變量next的作用域8.3 局部變量與全局變量 范例8.4 PartVariable.c 定義一個函數(shù)int
12、cal(int m, int n),在函數(shù)內(nèi)部定義內(nèi)部變量mn和nm,計算m和n之間的差。 8.3.2 全局變量 要引用其他文件的全局變量,需要對全局變量進行聲明,聲明全局變量的一般表達形式為:extern 類型標識符 變量名 1全局變量的定義和聲明全局變量可以定義在程序的前面,也可以定義在程序中間,當定義在程序前面時,可以不對其聲明而直接使用,但當定義在程序中間時,必須進行變量的聲明。 范例8.4 OutVariable.c函數(shù)使用全局變量時,應該將該全局變量的定義放在函數(shù)前面,否則,就要先聲明該全局變量,然后才能在函數(shù)內(nèi)使用。在一個自定義函數(shù)內(nèi)對兩個全局變量進行自增運算,其中一個全局變量在
13、函數(shù)后面定義,使用前先聲明該變量。 8.3.2 全局變量 2全局變量的作用域全局變量可以被任何函數(shù)使用,在每個函數(shù)中修改這類變量都會引起該變量值的變化,并對其他函數(shù)使用該變量產(chǎn)生影響。范例8.5 OutVariableControl.c 交換兩個變量的值在C語言中經(jīng)常用到,但在范例8.3中并沒有在子函數(shù)中實現(xiàn)變量值的交換。設計一個子函數(shù)exchange(),在這個函數(shù)內(nèi)交換兩個全局變量的值。3全局變量的命名當全局變量與局部變量的名字相同時,在局部變量作用域內(nèi),全局變量將不起作用。8.4 函數(shù)的嵌套調(diào)用和遞歸 C語言允許在一個函數(shù)中調(diào)用另一個函數(shù)。這種方式稱為函數(shù)的嵌套調(diào)用。如圖所示為函數(shù)嵌套調(diào)
14、用示意圖。范例8.6 ReCallbackFunc.c 判斷三個數(shù)中的最大值有很多方法,使用嵌套函數(shù)調(diào)用也是其中一種方法,設計兩個函數(shù),實現(xiàn)求三個數(shù)的最大值,并使用嵌套函數(shù)調(diào)用實現(xiàn)。 實訓8.3漢諾塔程序設計 漢諾塔游戲又稱為圓盤游戲,玩法是有三個柱子A、B和C,其中柱子A上按由大到小穿插著n個中間含孔的圓盤,要求借助柱子B,將這n個圓盤移動到柱子C上,每次只能移動一個盤子,并且任何時候都不能出現(xiàn)大盤在上,小盤在下的情況,編寫程序,實現(xiàn)移動n個盤子的漢諾塔移動方法程序設計。1需求分析:需求1:移動一個盤子時的移動方法需求2:移動n個盤子時的移動方法2技術應用對于需求1,當僅需要移動一個盤子時,就是要將該盤子從A移動到C,方法為AC。對于需求2,當有n個盤子需要移動時,先考慮如何將上面n-1個盤子移動到B,如果有方法能夠將上面n-1個盤子借住C移動到B,則最下面一個盤子可以按照需求1的方法將盤子移動到C,然后再借助同樣的方法將B上的n-1個盤子借住A移動到C。源代碼:Hanoi.c 8.5 數(shù)組作函數(shù)參數(shù) 范例8.7 CheckArrayCompnent.c 有一個字符數(shù)組,其中各元素可能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年洛陽市公安機關招聘警務輔助人員501人考試備考題庫附答案
- 2025年國家能源投資集團有限責任公司高校畢業(yè)生直招900考前自測高頻考點模擬試題附答案
- 2025年甘肅省平?jīng)鍪谐缧趴h人民法院招聘筆試備考題庫附答案
- 2026年西安雁塔區(qū)第十五幼兒園教師招聘筆試備考試題及答案解析
- 2026廣東惠州市龍門縣衛(wèi)生健康局招募鄉(xiāng)村醫(yī)生5人筆試參考題庫及答案解析
- 2026江蘇南京市鼓樓區(qū)城市管理局招聘道路停車收費員1人筆試參考題庫及答案解析
- 2026中國科學院辦公廳人員招聘1人筆試模擬試題及答案解析
- 2026上海市臨床檢驗中心招聘筆試參考題庫及答案解析
- 2026云南紅河州開遠市興遠開發(fā)投資集團有限公司招聘1人筆試備考題庫及答案解析
- 2026云南曲靖經(jīng)濟技術開發(fā)區(qū)黨政辦公室招聘城鎮(zhèn)公益性崗位工作人員筆試模擬試題及答案解析
- 中建三局2024年項目經(jīng)理思維導圖
- 小區(qū)道閘管理辦法
- DB42-T 2391-2025 全域國土綜合整治項目實施方案編制指南
- DB3301∕T 0419-2023 嬰幼兒成長驛站管理與服務規(guī)范
- 老年醫(yī)院重點??平ㄔO方案
- 2025年江蘇省蘇州市初二(上)英語期末模擬卷(二)含答案
- 規(guī)培中醫(yī)病例討論流程規(guī)范
- 銀行解封協(xié)議書模板
- 小學生必讀書試題及答案
- 超星爾雅學習通《學術規(guī)范與學術倫理(華東師范大學)》2025章節(jié)測試附答案
- (完整版)現(xiàn)用九年級化學電子版教材(下冊)
評論
0/150
提交評論