c語言程序設計與項目實踐第8章_第1頁
c語言程序設計與項目實踐第8章_第2頁
c語言程序設計與項目實踐第8章_第3頁
c語言程序設計與項目實踐第8章_第4頁
c語言程序設計與項目實踐第8章_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第八章函數(shù),本章學習重點函數(shù)的分類函數(shù)的定義函數(shù)的調用和宣言函數(shù)的實際參與形參照局部變量和全局變量的嵌套調用,8.1函數(shù)的定義,函數(shù)是習語言的基本構成單位,是模塊計程儀編程的主要組成部分。 模塊化用戶針織面料是實現(xiàn)某種功能的程序段,通常作為函數(shù)來實現(xiàn)。8.1.1函數(shù)的分類,按定義的類型分為:主函數(shù)、庫函數(shù)、用戶定義函數(shù)。 主函數(shù):主函數(shù)的調用名為main (),是習語言中最主要的函數(shù),在習語言中是唯一的。 庫函數(shù):庫函數(shù)通常由編譯系統(tǒng)開發(fā)者制作、封裝并嵌入習語言編譯系統(tǒng)中。 用戶定義函數(shù):用戶定義函數(shù)是用戶定義執(zhí)行特定功能的程序段,用戶定義函數(shù)通常也稱為子函數(shù)。 2根據(jù)是否會返還值,可以分為返

2、還值型函數(shù)和沒有返還值的型函數(shù)。8.1.1函數(shù)的分類,返還值類型函數(shù):返還值類型函數(shù)在定義時需要指定返還值的類型。 例如,int max ()段沒有返回類型函數(shù)。 必須在函數(shù)名稱前面加上void指定符,以指示沒有返回類型函數(shù)。 根據(jù)三個函數(shù)是否有參數(shù),根據(jù)函數(shù)是否有參數(shù)來區(qū)分它們。 引用函數(shù):函數(shù)的定義和調用始終具有包含輸入?yún)?shù)的函數(shù)。 無參數(shù)函數(shù):函數(shù)的定義和調用中無參數(shù)的函數(shù)類型。8.1.2函數(shù)的定義,函數(shù)定義的一般表現(xiàn)形式是:類型指定符函數(shù)名(形狀參照表列)計程儀程序體函數(shù)構成的程序計程儀結構,函數(shù)名1 (參數(shù)表列)程序體1,8.1.2函數(shù)的定義,作為無返還值函數(shù)定義返還值型的函數(shù)定義函

3、數(shù)類型指定符使用void。 例如,void test () printf (“thisisafunctiontestn”); 2返還值函數(shù)在定義包含返還值的函數(shù)定義時,可以使用void以外的數(shù)據(jù)類型。 函數(shù)使用return語句返回數(shù)值。 例如,01i nt sum () 0.2定0.3 int I=0、sum=0; 0.4威利(i10 ) 0.5 0.6和; 0.7 0.8回復和; 0.9,8.1.2函數(shù)的定義,3引數(shù)函數(shù)的定義,在使用函數(shù)時有時需要函數(shù)以外的變量和數(shù)值,在這種情況下需要使用函數(shù)的參數(shù)傳達到函數(shù)的體內(nèi)。 例如,01intmax (入口a,入口b ) 0.2 03if (ab )

4、 0.4返回a; 0.5電子0.6返回b; max 0.7函數(shù)確定兩個整型數(shù)據(jù)a和b的大小,并返回較大的值。8.2函數(shù)的調用和宣言,通過函數(shù)定義后的調用來執(zhí)行。 通常,在調用函數(shù)時,必須首先聲明函數(shù)。8.2.1函數(shù)的調用,在定義之后,可以從其本身或其他函數(shù)本身進行調用。 函數(shù)調用的一般表現(xiàn)是,函數(shù)名(實參照表列)中函數(shù)名是函數(shù)定義的函數(shù)名,在此將函數(shù)稱為被調用函數(shù)。 示例8.1 SubFuncCalcMaxVal.c設計返回int類型的函數(shù)max,計算主調用函數(shù)的兩個變量的大小,并返回較大的一個。 兩個數(shù)相同時,數(shù)據(jù)打印相同的信息。 例分析: 1子函數(shù)max的定義2函數(shù)頭3形參照,8.2.1函

5、數(shù)的調用,4函數(shù)調用語句5 plum計程儀的入口6 plum的執(zhí)行自定義函數(shù)可以在plum中多次調用,使用不同的實際參數(shù),結果不同。 由于函數(shù)具有良好的模塊管理功能和反復調用功能,廣泛應用于解決堆計程儀中的實際問題。 實訓8.1計算數(shù)學分割函數(shù),數(shù)學分割函數(shù)P(m,n )由2個部分構成,mn時P(m,n )的值為0。 編制計程儀程序,在牛鼻子板上輸入m和n的值,使用子函數(shù)計算階乘,調用該函數(shù)實現(xiàn)數(shù)學函數(shù)的計算。 1需求分析:需求1 :計算分段數(shù)學函數(shù)的值需求2 :設計步驟子函數(shù)factorial,用于計算階乘。 2對技術應用需求1,使用ifelse分支語句實現(xiàn)分階段的數(shù)學函數(shù)計算。對于需求2,

6、設計一個名為factorial的子函數(shù)。 此函數(shù)包含一個返還值類型為double的波形參數(shù),用于防止返還值值太大而導致值向上溢出。 源計程儀列: SubFuncCalcPartsFunction.c,8.2.2函數(shù)的聲明,1函數(shù)聲明的一般形式函數(shù)聲明應該放在調用函數(shù)之前,其一般表示形式為:類型識別符函數(shù)名(類型識別符1形參數(shù)名1,類型識別符2形參數(shù)名2,); 也可以省略形狀參數(shù)名稱,僅保留類型標識符。 類型識別符函數(shù)名稱(類型識別符1、類型識別符2 ),例如int min(int a,int b )或int min(int,int )、8.2.2函數(shù)的聲明,兩個函數(shù)聲明的位置函數(shù)聲明的作用通常

7、將函數(shù)聲明布置在函數(shù)的開頭,因為編譯系統(tǒng)中定義的子函數(shù)被調用例如,函數(shù)調用語句int callback_test(int a,int b ) /關函數(shù)聲明字void main()/主函數(shù)a=callback_test(x,y) /函數(shù)調用語句int callback_test(int a,int b ) /函數(shù)的定義函數(shù)設計一個名為overturnsequen的函數(shù)。 函數(shù)的功能是計算m的值。 其中n是從形狀參數(shù)傳遞的。 3如果一個文件中不存在需要對多文件系統(tǒng)進行函數(shù)聲明調用的函數(shù)及其自身的函數(shù),則必須使用函數(shù)聲明在編譯pull計程儀柱時查找該函數(shù),以便正確執(zhí)行pull計程儀柱。實訓8.2對圓

8、周率pi進行近似計算,作成計程儀方案,用公式計算圓周率pi,定義子函數(shù)計算pi,將該子函數(shù)保存在單獨的文件中,將計算出的pi的值輸出到主函數(shù)。 要確定pi的精度,請輸入n的值。 1需求分析:需求1 :計算的值需求2 :通過調用數(shù)學庫函數(shù)sqrt計算pi的值需求3 :輸入n的值來確定pi的精確度需求4 :定義的子函數(shù)在另一個文件中聲明需求5 :子函數(shù)并在declare.h文件中定義。 2 .對于技術應用需求1,定義子函數(shù)calc _ pi (雙函數(shù)n ),計算等式的值。 對于需求2,從子函數(shù)calc _ pi (雙n )調用sqrt函數(shù)。 需求3通過在主函數(shù)中輸入n的值來確定pi的精確度。 在要

9、求4中,將子函數(shù)定義在單獨的文件中,并將其命名為Calc_pi.c。 在要求5中,將創(chuàng)建一個名為declare.h的新文件,將子函數(shù)Calc_pi(double n )的聲明放在更改文件中,并將標頭文件包含在主函數(shù)所屬的文件中。8.2.3函數(shù)的參數(shù)、1函數(shù)的波形參數(shù)僅出現(xiàn)在被調函數(shù)中,與在函數(shù)內(nèi)定義的變量類似,可以在函數(shù)內(nèi)的任何位置使用。 然而,形狀引用僅能夠用于本函數(shù)的體內(nèi),并且不能夠用于其它函數(shù)。 2函數(shù)的實參實參僅出現(xiàn)在基調函數(shù)中。 通常,實際參數(shù)是能夠作為數(shù)值計算的變量或公式,也可以是指針、數(shù)組名、函數(shù)等。 在調用3函數(shù)時的實參形參數(shù)函數(shù)調用時,主調函數(shù)將實參數(shù)的值傳遞給被調函數(shù)的形參

10、數(shù),實現(xiàn)從主調函數(shù)向被調函數(shù)的數(shù)據(jù)傳送。8.2.3函數(shù)的參數(shù)、函數(shù)調用時的實際參數(shù)和形狀參數(shù)之間的值傳遞過程如下圖所示:例8.3 ExchangeTwoValueInSubFunc.c設計了函數(shù),命名為ExchangeValue,函數(shù)的作用是8.2.3函數(shù)的參數(shù),例8.3 ExchangeValue ()函數(shù)調用時的m和n以及a和b的內(nèi)存結構的變化圖:8.3局部變量和全局變量,局部變量的范圍在函數(shù)內(nèi)被限定定,即變量的定義和使用在函數(shù)內(nèi)如以下計程儀程序所示,0.1信道測試1 (信道c ) 0.2 0.3 int a,b; 0.4 0.5 0.6互連測試2 (互連) 0.7 0.8互連x,y; 0

11、.9 1.0 1.1;主() 1.2 1.3 14int f1=10,f2=12,res=0; 15v=測試1 (w ) 1.6 RES=測試2 (f1,F(xiàn)2 ) 1.7 1.8下一個=0; 下一個1.9 : 2.0 2.1 2.2、形參照c、變量a和b的范圍僅用于函數(shù)test1 ()的內(nèi)部。形狀參數(shù)m和n、變量x和y的范圍僅在函數(shù)test2()內(nèi)部使用。變量w、vf1、f2和res的范圍僅在函數(shù)main ()內(nèi)部使用。變量next的范圍、8.3局部變量和全局變量,例如8.4 PartVariable.c在函數(shù)內(nèi)部定義了函數(shù)int cal(int m,int n ),在函數(shù)內(nèi)部定義了內(nèi)部變量m

12、n和nm,并計算m和n之間的差。 要引用、8.3.2全局變量或其它文件中的全局變量,必須聲明全局變量。 聲明全局變量的一般表示法為: extern類型識別符變量名稱1全局變量的定義和聲明全局變量可以在程序計程儀之前定義、在程序計程儀程序的中間定義、在程序計程儀程序之前定義,但如果在程序計程儀程序的中間定義,則可以聲明變量如果示例8.4 OutVariable.c函數(shù)使用全局變量,則必須將全局變量的定義放在該函數(shù)之前。 否則,在函數(shù)中使用之前必須聲明全局變量。 在一個自定義函數(shù)中自增兩個全局變量,一個在函數(shù)之后定義,使用使用前聲明的變量。8.3.2全局變量、2全局變量的范圍全局變量可以使用任何函

13、數(shù),當在各函數(shù)中變更這些個的變量時,該變量的值發(fā)生變化,影響其他函數(shù)使用該變量。 示例8.5 OutVariableControl.c在習語言中經(jīng)常使用兩個變量的值交換,但在示例8.3中不能使用子函數(shù)交換變量的值。 設計子函數(shù)exchange ()并在此函數(shù)中交換兩個全局變量的值。 3全局變量的命名全局變量和局部變量的名稱相同時,全局變量在局部變量范圍內(nèi)不起作用。8.4函數(shù)的嵌套調用和遞歸,習語言可以用一個函數(shù)調用另一個函數(shù)。 此方法稱為函數(shù)的嵌套調用。 圖顯示了函數(shù)的嵌套調用的示意圖。 例如8.6 ReCallbackFunc.c確定三個數(shù)字中的最大值有很多種方法,并且使用嵌套函數(shù)調用也是其

14、中一種方法,它設計兩個函數(shù),確定三個數(shù)字的最大值,并且使用嵌套函數(shù)調用來實現(xiàn)。 漢諾塔男同性戀也稱為圓盤男同性戀,游戲方法有三個柱a、b和c,其中柱a從大到小通過n個中有孔的圓盤,通過柱b,要求將這n個圓盤移動到柱c,一次一個盤而且,在任何時候大盤子都不能出來,小碟子在下面的情況下,做成計程儀柱,實現(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.7checkarraycompcomponent.c有字

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論