C++程序設計第5章 函數(shù)_第1頁
C++程序設計第5章 函數(shù)_第2頁
C++程序設計第5章 函數(shù)_第3頁
C++程序設計第5章 函數(shù)_第4頁
C++程序設計第5章 函數(shù)_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第5章 函數(shù)目的與要求5.1 函數(shù)的定義和調(diào)用5.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.3 數(shù)組作函數(shù)參數(shù)(習題課)5.4 變量的存儲類型5.5 內(nèi)聯(lián)函數(shù)5.6 具有默認參數(shù)值的函數(shù)5.7 函數(shù)的重載本章小結(jié)編輯課件目的與要求 通過本章學習,應理解函數(shù)的概念,熟練掌握函數(shù)的定義和調(diào)用方法,理解函數(shù)調(diào)用時實參和形參間數(shù)據(jù)的傳遞方法。理解函數(shù)遞歸的概念,初步掌握遞歸的使用方法,理解變量的作用域和存儲類型的概念,了解內(nèi)聯(lián)函數(shù)與函數(shù)重載的概念。 編輯課件5.1 函數(shù)的定義和調(diào)用 5.1.1 函數(shù)的概念 函數(shù)概念:具備特定功能的獨立程序段。 函數(shù)包括標準函數(shù)和自定義函數(shù)。 【例5.1】 在主函數(shù)中調(diào)用標準函

2、數(shù)sin(x)與自定義函數(shù)f(x)。 通常將調(diào)用f(x)的函數(shù)(main())稱為主調(diào)函數(shù),而將f(x)稱為被調(diào)函數(shù)。例程編輯課件5.1.2 函數(shù)的定義 1函數(shù)的定義格式 函數(shù)定義的一般格式為: 類型() (1)類型 (2)函數(shù)名 (3)形參表: , (4)函數(shù)體:由一系列語句組成。 空函數(shù)的定義格式為: 類型(void) 編輯課件2.函數(shù)的形參 (1)函數(shù)可以沒有形參,則形成無參函數(shù)。在定義無參函數(shù)時,形參表應該寫成void。 無參函數(shù)的定義格式為: 類型(void) 【例5.2】 無參函數(shù)的實例。 (2)C+對形參的個數(shù)沒有限制。 (3)必須依次說明每一個參數(shù)的數(shù)據(jù)類型。 例程編輯課件5.

3、1.3 函數(shù)的調(diào)用 1函數(shù)調(diào)用格式 函數(shù)調(diào)用的一般格式為: () 其中,實參表的一般格式為: , 2函數(shù)的實參 (1)實參為能求值的表達式 (2)實參和形參的類型應兼容 3.函數(shù)的三種調(diào)用方式 (1)函數(shù)調(diào)用語句。函數(shù)調(diào)用語句的一般格式為: (實參表); 此時不要求函數(shù)有返回值,只要求函數(shù)完成一定的操作。編輯課件函數(shù)調(diào)用方式 (2)函數(shù)表達式 函數(shù)調(diào)用出現(xiàn)在一個表達式中,此時要求函數(shù)有確定的返回值以便參與表達式的運算。 (3)函數(shù)參數(shù) 函數(shù)調(diào)用作為一個函數(shù)的實參。 【例5.3.1】用自定義函數(shù)求三個整數(shù)的最大值。 4.函數(shù)返回語句return (1)格式: return ; 或:return

4、(); (2)作用: 返回表達式的值,結(jié)束函數(shù)執(zhí)行,并將控制轉(zhuǎn)移到調(diào)用函數(shù)的地方繼續(xù)執(zhí)行。例程編輯課件5.函數(shù)的原型說明 在C+程序中,當函數(shù)定義在前、函數(shù)調(diào)用在后時,程序能被正確編譯執(zhí)行。而當函數(shù)調(diào)用在前、函數(shù)定義在后時,則應在主調(diào)函數(shù)中增加對被調(diào)函數(shù)的原型說明。 (1)函數(shù)原型說明的格式: (); 或: (); (2)函數(shù)原型說明的作用: 告訴編譯程序,函數(shù)返回值的類型、參數(shù)個數(shù)和各參數(shù)類型。 【例5.3.2】用自定義函數(shù)求三個整數(shù)的最大值。例程編輯課件5.1.4 實參與形參的數(shù)據(jù)傳送 在C+中,實參和形參間數(shù)據(jù)傳送的方式有三種:值傳送、傳地址和引用傳送。先介紹值傳送方式。 值傳送過程:

5、(1)調(diào)用函數(shù)時,先為形參分配存儲單元,后將實參值傳遞給形參; (2)函數(shù)執(zhí)行過程中均為形參參與運算; (3)函數(shù)調(diào)用后,形參所對應的存儲單元被釋放,實參保持原來的值不變。 【例5.4】 定義變量交換函數(shù)swap(),將兩個整型變量交換數(shù)據(jù)后輸出。 例程編輯課件5.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.2.1 函數(shù)的嵌套調(diào)用 (1)函數(shù)不允許嵌套定義:即不允許在函數(shù)內(nèi)再定義函數(shù)。 (2)函數(shù)可以嵌套調(diào)用:即在被調(diào)用函數(shù)體內(nèi)又調(diào)用另一個函數(shù)。 【例5.5】 編寫C+程序,求組合數(shù) 的值。 main函數(shù)a函數(shù)b函數(shù)調(diào)用a函數(shù)調(diào)用b函數(shù)結(jié)束返回返回函數(shù)的嵌套調(diào)用例程編輯課件5.2.2 函數(shù)的遞歸調(diào)用 函數(shù)

6、遞歸調(diào)用定義:在函數(shù)體中出現(xiàn)直接或間接地調(diào)用該函數(shù)本身的調(diào)用關(guān)系稱為函數(shù)的遞歸調(diào)用。 1.直接遞歸:在函數(shù)f的定義過程中出現(xiàn)調(diào)用函數(shù)f。 2.間接遞歸: 在函數(shù)f1的定義過程中調(diào)用函數(shù)f2,而在函數(shù)f2的定義過程中又調(diào)用了f1函數(shù)。函數(shù)的直接遞歸調(diào)用f函數(shù)調(diào)用f函數(shù)f1函數(shù)f2函數(shù)調(diào)用f2函數(shù)調(diào)用f1函數(shù)函數(shù)的間接遞回調(diào)用編輯課件遞歸舉例 【例5.6】 用遞歸法求n!。 分析:用遞歸方法求n!的公式為: 1 n=0 n!= 1 n=1 n*(n-1)! n1 在利用遞歸求值時,必須注意三點: (1)遞歸公式: n*(n-1)! (2)遞歸結(jié)束條件: n=0或1 (3)遞歸約束條件: n0例程編

7、輯課件遞歸 3.遞歸兩個階段 (1)遞歸階段:將原問題不斷分解為新的子問題,逐漸從未知向已知推進,最終達到已知的條件,即遞歸結(jié)束條件,此時遞歸階段結(jié)束。 (2)回推階段:從已知的條件出發(fā),按照遞歸的逆方向,逐一求值回推,最后達到遞歸的開始處,結(jié)束回推階段,從而完成整個遞歸調(diào)用過程。 【例5.7】 用遞歸法求裴波那契數(shù)列的前20個數(shù),要求每行輸出4個數(shù)。 例程編輯課件5.3 數(shù)組作函數(shù)參數(shù)(習題課)5.3.1 數(shù)組元素作函數(shù)實參 傳送方式:值傳送。 【例5.8】定義顯示變量值函數(shù)print(),用數(shù)組元素作函數(shù)實參,輸出數(shù)組元素值。 【例5.9】定義判素數(shù)的函數(shù)prime(),用數(shù)組元素作函數(shù)實

8、參,判斷數(shù)組各元素值是否為素數(shù)。若不是素則清0。最后輸出數(shù)組中的素數(shù)。 例程例程編輯課件5.3.2 數(shù)組名作函數(shù)參數(shù) 1.一維數(shù)組作為函數(shù)參數(shù) (1)函數(shù)定義格式 (長度,) 函數(shù)體 說明:對于一維數(shù)組而言,函數(shù)定義中的數(shù)組長度可省略。 (2)函數(shù)調(diào)用格式 函數(shù)名(數(shù)組名,) 注意:實參數(shù)組名后不能加“”。編輯課件一維數(shù)組作為函數(shù)參數(shù) (3)實參與形參的傳送方式:傳地址 當數(shù)組作為函數(shù)參數(shù),在調(diào)用函數(shù)時,系統(tǒng)并沒有為形參數(shù)組重新分配內(nèi)存空間,而是將實參數(shù)組的首地址傳送給形參數(shù)組,使形參數(shù)組與實參數(shù)組占用相同的內(nèi)存空間,所以對形參數(shù)組的修改就是對實參數(shù)組的修改。這種參數(shù)的傳送方式稱為傳地址。 【

9、例5.10】編寫判素數(shù)的函數(shù),要求用數(shù)組作為函數(shù)參數(shù),函數(shù)功能是將數(shù)組中所有非素數(shù)的元素清0。在主函數(shù)中調(diào)用判素數(shù)的函數(shù),并輸出所有素數(shù)。 例程編輯課件一維數(shù)組作為函數(shù)參數(shù) (4)說明 用數(shù)組名作函數(shù)參數(shù)時,應該在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組;實參數(shù)組和形參數(shù)組的類型應一致;實參數(shù)組和形參數(shù)組的大小可以一致也可以不一致。 形參數(shù)組可不指定大小,在定義形參數(shù)組時,在數(shù)組名后面跟一個空的方括號,為了在被調(diào)函數(shù)中處理數(shù)組元素的需要,可以另設一個參數(shù),傳遞數(shù)組元素的個數(shù)。 編輯課件一維數(shù)組作為函數(shù)參數(shù) 【例5.11】編寫程序計算某班學生的平均成績、最高分,并對學生成績用擂臺法按升序排序。要求用函數(shù)

10、完成上述工作,編寫如下函數(shù): (1)求平均分的函數(shù)average(); (2)求最高分的函數(shù)maximin(); (3)對學生成績升序排序的函數(shù)sort(); 在主函數(shù)中定義一維數(shù)組并輸入10個學生的成績。調(diào)用上述函數(shù)計算并輸出班級的平均成績及最高分,并輸出排序后的學生成績。 例程編輯課件2.二維數(shù)組作為函數(shù)參數(shù) (1)函數(shù)定義格式 (行長度列長度,) 函數(shù)體 在函數(shù)定義時,可以明確指定二維數(shù)組的行數(shù)和列數(shù),也可以不指定行數(shù),但必須指定二維數(shù)組的列數(shù)。 (2)函數(shù)調(diào)用格式 函數(shù)名(數(shù)組名,) (3)參數(shù)傳送方式為傳地址。 【例5.12】 找出3行4列的二維數(shù)組中的最大值。 例程編輯課件5.4

11、變量的存儲類型5.4.1 作用域 作用域是變量在程序中可引用的區(qū)域。 1.塊作用域 (1)塊 塊是用花括號括起來的一部分程序。 (2)塊作用域 在塊內(nèi)說明的變量具有塊作用域,其作用域:從變量說明處到塊的結(jié)束處(即塊的右花括號處)。 【例5.13】塊作用域示例。 【例5.14】同名變量的作用域示例。 C+語言規(guī)定:當程序塊嵌套時,如果外層塊中的變量與內(nèi)層塊中的變量同名,則在內(nèi)層塊執(zhí)行時,外層塊中的同名變量不起作用,即局部優(yōu)先。 例程例程編輯課件作用域 2.文件作用域 在函數(shù)外定義的變量(或用extern說明的變量)具有文件作用域。其作用域:從函數(shù)外定義變量的位置開始到該源程序文件結(jié)束(可用ext

12、ern進行擴展)。 3.函數(shù)原型作用域 在函數(shù)原型的參數(shù)表中說明的變量具有函數(shù)原型作用。其作用域:從變量說明處開始到函數(shù)原型說明結(jié)束。 4.函數(shù)作用域 函數(shù)作用域是指在函數(shù)內(nèi)定義的標識符在其定義的函數(shù)內(nèi)均有效,即不論在函數(shù)內(nèi)的任一地方定義,均可以引用這種標識符。在C+語言中,只有標號與在函數(shù)開始處定義的變量具有函數(shù)作用域,可在整個函數(shù)內(nèi)引用。 編輯課件5.4.2 局部變量與全局變量 1.局部變量 在函數(shù)或塊內(nèi)定義的變量稱為局部變量,具有塊作用域。 2.全局變量 定義在函數(shù)外的變量稱為全局變量,具有文件作用域。 注意:當具有塊作用域的局部變量與具有文件作用域的全局變量同名時,與局部變量同名的全局

13、變量不起作用,即局部變量優(yōu)先。但與塊嵌套不同的是,在塊作用域內(nèi)可通過作用域運算符“:”來引用與局部變量同名的全局變量。 【例5.15】全局變量、局部變量與塊內(nèi)局部變量示例。 例程編輯課件5.4.3 動態(tài)與靜態(tài)變量 1存儲空間分類 (1) 程序區(qū):存放可執(zhí)行程序的程序代碼; (2)靜態(tài)存儲區(qū):存放靜態(tài)變量; (3)動態(tài)存儲區(qū):存放動態(tài)變量。 動態(tài)存儲區(qū):存放動態(tài)變量 靜態(tài)存儲區(qū):存放靜態(tài)變量 程序存儲區(qū):存放程序 C+程序占用的存儲空間 2.動態(tài)變量:在程序執(zhí)行過程中分配存儲空間的變量。 3.靜態(tài)變量:程序開始執(zhí)行時就分配存儲空間的變量 。編輯課件5.4.4 變量的存儲類型 1.自動類型(aut

14、o) 用自動類型關(guān)鍵詞auto說明的變量稱為自動變量。 (1)特性: 自動變量是動態(tài)局部變量,具有塊作用域,存放在動態(tài)存儲區(qū)。 (2)定義格式: auto ; 【例5.16】 使用自動變量的示例。 例程編輯課件2.寄存器類型( register ) 用寄存器類型關(guān)鍵詞register說明的變量稱為寄存器變量。 (1)特性: 寄存器變量是動態(tài)局部變量,具有塊作用域,存放在CPU的寄存器或動態(tài)存儲區(qū); (2)定義格式: register ; 【例5.17】 使用寄存器變量的示例。 例程編輯課件3.靜態(tài)類型(static ) 用靜態(tài)類型關(guān)鍵詞static說明的變量稱為靜態(tài)變量 。 定義格式: sta

15、tic ; (1)局部靜態(tài)變量 定義在函數(shù)內(nèi)的靜態(tài)變量稱為靜態(tài)局部變量?!纠?.18】用自動變量與靜態(tài)局部變量求三個整數(shù)的和。 (2)靜態(tài)全局變量 定義在函數(shù)外或用extern說明的靜態(tài)變量稱為靜態(tài)全局變量。 【例5.19】 找出兩個整數(shù)中較大的一個數(shù)。 例程例程編輯課件4.外部類型( extern ) 用外部類型關(guān)鍵詞extern說明的全局變量稱為外部變量 。 (1)特性: 外部變量為靜態(tài)全局變量; (2)定義格式: extern ; 【例5.20】 在同一文件中定義全局變量為外部變量的示例,求兩個整數(shù)的最大值。 【例5.21】將另一文件中的全局變量定義為本文件外部變量的示例,求兩個整數(shù)的最

16、大值。 例程例程編輯課件5.5 內(nèi)聯(lián)函數(shù) 所謂內(nèi)聯(lián)函數(shù),就是在編譯時把函數(shù)的函數(shù)體直接插入到調(diào)用處,而不是在執(zhí)行中發(fā)生調(diào)用函數(shù)時的控制轉(zhuǎn)移。這樣可以降低程序運行時間,提高了程序的執(zhí)行效率。 內(nèi)聯(lián)函數(shù)定義格式: inline () 【例5.22】 用內(nèi)聯(lián)函數(shù)實現(xiàn)求兩個整數(shù)的和。 說明: (1)內(nèi)聯(lián)函數(shù)的函數(shù)體內(nèi)一般不能含有循環(huán)、switch分支和復雜嵌套的if語句。 (2)內(nèi)聯(lián)函數(shù)的實質(zhì)是用存儲空間(使用更多的存儲空間)來換取執(zhí)行時間(減少執(zhí)行的時間),即可加速程序的執(zhí)行。例程編輯課件5.6 具有默認參數(shù)值的函數(shù) 在C+中定義函數(shù)時,允許給形參指定默認值,即形參表可寫成如下形 式: =, = 其

17、中表達式必須有確定的默認值。在調(diào)用函數(shù)時,若明確給出了實參的值,則使用相應實參的值;若沒有給出相應實參的值,則使用默認的值。 【例5.23】 編寫具有默認參數(shù)值的函數(shù)求三個整數(shù)的和。 (1)具有默認參數(shù)值函數(shù)應先定義后調(diào)用。 (2)在定義函數(shù)時,具有默認值的參數(shù)必須位于參數(shù)表的最右邊。 (3)函數(shù)調(diào)用時,若省略某個實參而使形參采用默認值,則其后的實參都應省略。 例程編輯課件5.7 函數(shù)的重載 同一個函數(shù)名或同一個運算符,根據(jù)不同的對象可以完成不同的功能和運算,這種特性稱為重載性。 所謂函數(shù)的重載是指用重名函數(shù)完成不同功能的函數(shù)運算。當然這種函數(shù)的定義必須符合函數(shù)重載的規(guī)定。 【例5.24】 重

18、載求和的函數(shù),分別求兩個整數(shù)、兩個實數(shù)和兩個雙精度實數(shù)的和。 注意: (1)定義的重載函數(shù)的形參必須不同,即:或者參數(shù)個數(shù)不同或者數(shù)據(jù)類型不同。 (2)如果函數(shù)名相同,形參的個數(shù)和類型均相同,但函數(shù)的返回值不同,則不能定義為重載函數(shù)。 例程編輯課件本章小結(jié) 1.函數(shù)的定義和調(diào)用 函數(shù)可分成系統(tǒng)提供的標準庫函數(shù)和用戶自定義函數(shù)。標準庫函數(shù)可以直接使用,而用戶自定義函數(shù)則必須先定義后使用。 (1)函數(shù)定義格式 類型 () 函數(shù)體 (2)函數(shù)調(diào)用格式 () 函數(shù)調(diào)用的方式通常有三種,即:函數(shù)調(diào)用語句、函數(shù)表達式、函數(shù)參數(shù)。 編輯課件2.實參和形參間數(shù)據(jù)的傳遞 (1)值傳送 當函數(shù)的形參為變量時,其實

19、參為常量、變量、數(shù)組元素與表達式。調(diào)用函數(shù)時,系統(tǒng)給形參分配存儲單元,并將實參的值傳遞給對應的形參;在函數(shù)執(zhí)行過程中均為形參參與運算;函數(shù)返回時,形參值的改變不影響實參,實參保持原來的值。 (2)傳地址 當函數(shù)的形參為數(shù)組時,其實參只能是相同類型的數(shù)組名(不能加“”號)。在C+中,規(guī)定數(shù)組名表示數(shù)組的首地址,因此在調(diào)用函數(shù)時,系統(tǒng)將實參數(shù)組的首地址傳遞給形參數(shù)組,使兩個數(shù)組占用相同的內(nèi)存空間。在執(zhí)行函數(shù)過程中,形參數(shù)組中各元素值的變化會使實參數(shù)組元素的值同時發(fā)生變化。 編輯課件3.函數(shù)的返回值 函數(shù)可用return語句返回一個值給主調(diào)函數(shù)。 return語句的格式是: return ; 或:

20、return (); 此時函數(shù)的類型應與與表達式的類型一致。當函數(shù)沒用return 語句返回值時,函數(shù)類型應為void。 編輯課件4.函數(shù)的原型說明 在C+程序中,當函數(shù)調(diào)用在前、函數(shù)定義在后時,則應在調(diào)用前增加對被調(diào)函數(shù)的原型說明。 函數(shù)原型說明的一般格式為: (); 或: (); 在函數(shù)原型說明中,可只寫形參的數(shù)據(jù)類型,而省略形參名。 編輯課件5.函數(shù)的嵌套調(diào)用和遞歸調(diào)用 (1)函數(shù)的嵌套調(diào)用 函數(shù)的嵌套調(diào)用是在調(diào)用一個函數(shù)的過程中,在該函數(shù)的函數(shù)體內(nèi)又調(diào)用另一個函數(shù)。 (2)函數(shù)的遞歸調(diào)用 函數(shù)的遞歸調(diào)用是在一個函數(shù)定義的函數(shù)體中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。 利用遞歸方法解決問題時

21、,必須注意三點:遞歸的公式、遞歸的結(jié)束條件、遞歸的限制條件。 編輯課件6.變量的作用域和存儲類型 (1)作用域 作用域是變量在程序中可引用的區(qū)域。作用域共分成塊、文件、函數(shù)原型、函數(shù)、類作用域五種。前四種作用域總結(jié)范圍如下: 塊作用域:從塊內(nèi)變量定義開始到塊結(jié)束。 文件作用域:從函數(shù)外變量定義開始到文件結(jié)束 (可用extern進行擴展)。 函數(shù)原型作用域:從原型變量定義開始到函數(shù)原型說明結(jié)束。 函數(shù)作用域:從函數(shù)開始到函數(shù)結(jié)束。編輯課件(2)局部與全局變量 局部變量是在函數(shù)內(nèi)部定義或在塊內(nèi)定義的變量。局部變量都具有塊作用域。 全局變量是在函數(shù)外定義的變量。全局變量具有文件作用域。 當局部變量與

22、全局變量同名時,局部變量優(yōu)先。 在塊作用域內(nèi)可通過作用域運算符“:”來引用與局部變量同名的全局變量。編輯課件(3)靜態(tài)與動態(tài)變量 動態(tài)變量是在程序的執(zhí)行過程中為其分配內(nèi)存的變量。 靜態(tài)變量是在程序開始執(zhí)行時就為其分配內(nèi)存,直到程序執(zhí)行結(jié)束時,才收回內(nèi)存的變量。編輯課件(4)C+存儲區(qū) C+程序在內(nèi)存中占用的存儲空間可以分為三個部分: 程序區(qū)、靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。 動態(tài)變量存儲在內(nèi)存中的動態(tài)存儲區(qū);靜態(tài)變量存儲在內(nèi)存中的靜態(tài)存儲區(qū)。 編輯課件(5)變量的存儲類型 在C+中,變量的存儲類型分為四種: 自動類型(auto)、寄存器類型(register)、靜態(tài)類型(static)、外部類型(ex

23、tern)。 自動類型、寄存器類型屬于動態(tài)存儲類型;靜態(tài)類型、外部類型屬于靜態(tài)存儲類型。 編輯課件變量存儲類型表 變量類型 全局、局部變量 作用域 靜、動態(tài)變量 存儲區(qū) 自動變量局部變量塊作用域動態(tài)變量動態(tài)存儲寄存器變量局部變量塊作用域動態(tài)變量CPU寄存器靜態(tài)局部變量局部變量塊作用域靜態(tài)變量靜態(tài)存儲區(qū)靜態(tài)全局變量全局變量文件作用域靜態(tài)變量靜態(tài)存儲區(qū)外部變量全局變量文件作用域靜態(tài)變量靜態(tài)存儲區(qū)編輯課件7.內(nèi)聯(lián)函數(shù) 在類型前加關(guān)鍵字inline定義的函數(shù)稱為內(nèi)聯(lián)函數(shù),定義格式為: inline () 函數(shù)體 內(nèi)聯(lián)函數(shù)的實質(zhì)就是在編譯時把函數(shù)的函數(shù)體直接插入到調(diào)用處。其目的是降低系統(tǒng)的開銷,提高程序

24、的執(zhí)行效率。 編輯課件8.具有默認參數(shù)值的函數(shù) 給形參指定默認值的函數(shù)稱為具有默認參數(shù)值的函數(shù)。 指定默認值的形參必須寫在形參表的右邊。 在調(diào)用函數(shù)時,若明確給出了實參的值,則使用相應實參的值;若沒有給出相應實參的值,則使用默認的值。 編輯課件9.函數(shù)的重載 一個函數(shù)名或一個運算符,根據(jù)不同的對象可以完成不同的功能和運算,這種特性稱為重載性。 函數(shù)的重載是指用重名函數(shù)完成不同功能的函數(shù)運算。 重載函數(shù)形參必須不同,即或者參數(shù)個數(shù)不同或者數(shù)據(jù)類型不同。編輯課件例5.1# include # include float f(float x) float y; y=5*x*x+3*x+1; retu

25、rn y; void main(void) float z1,z2,x=1; z1=sin(x); z2=f(x); coutsin(x)= z1endl; coutf(x)= z2endl;程序運行結(jié)果: sin(x)=0.841471 f(x)=9返回編輯課件例5.2 # include void print(void) couty) z=x; else z=y; return z;void main(void) int a,b,c,m; coutabc; coutmax(b,c)= max(b,c)endl; m=max(a,max(b,c); coutmax(a,b,c)= mendl

26、;程序執(zhí)行后,提示用戶輸入: Input a,b,c:9 8 5 max(b,c)=8 max(a,b,c)=9返回編輯課件例5.3.2# include void main(void) int a,b,c,m; int max(int x,int y); coutabc; coutmax(b,c)= max(b,c)endl; m=max(a,max(b,c); coutmax(a,b,c)= my) z=x; else z=y; return z;返回編輯課件例5.4#include void swap(int x,int y) int temp; temp=x; x=y; y=temp;

27、void main(void) int a=3,b=4; couta=atb=bendl; swap(a,b); couta=atb=bendl;執(zhí)行該程序后輸出: a=3b=4 a=3b=4 編輯課件例5.4說明3實參a4實參b3形參x44形參y3形參交換前形參交換后實參與形參的值傳送返回編輯課件例5.5(1)#include float fac(int k) /定義計算K階乘的函數(shù)fac() int i; float t=1.0; for (i=1;i=k;i+) t=t*i; return(t);float cmn(int m1,int n1)/定義計算組合數(shù)的函數(shù)cmn() float

28、 p; p=fac(m1)/(fac(n1)*fac(m1-n1);/調(diào)用求階乘函數(shù)fac() return(p);編輯課件例5.5(2)void main(void) float s; int m,n; coutmn; s=cmn(m,n);/調(diào)用計算組合數(shù)的函數(shù)cmn() coutcmn=sendl;程序執(zhí)行后提示: Input m,n:5 2 cmn=10返回編輯課件例5.6#include long int fac(int k) long int f; if (k=1 | k=0) f=1; else f=k*fac(k-1); return(f);void main(void) in

29、t n; long int t; coutn; t=fac(n); coutn!=tendl;程序執(zhí)行后提示: Input n: 5 5!=120返回編輯課件例5.7(1)#include #include long int fib(int n) long int f; if (n=1 | n=2) f=1; else f=fib(n-1)+fib(n-2); return(f);void main(void) int i; for (i=1;i=20;i+) coutsetw(10)fib(i); if (i%4=0) coutendl; coutendl;編輯課件例5.7(2)程序執(zhí)行后輸

30、出: 11 2 3 58 13 21 34 55 89 144 233 377 610 987 1597 2584 41816765返回編輯課件例5.8# include void print(int x) coutxt;void main(void) int a5 =3,7,9,12,92; for (int i=0 ;i5;i+) print(ai); 程序執(zhí)行后輸出: 3 7 91292返回編輯課件例5.9(1)#include #include int prime(int b) int i; for(i=2;i=sqrt(b);i+) if (b%i=0) return 0; retu

31、rn 1;編輯課件例5.9(2)void main(void) int i; int a10=2,3,4,5,6,7,8,9,10,11; for( i=0;i10;i+) if (prime(ai)=0) ai=0; for(i=0;i10;i+)if (ai!=0) coutait; coutendl;程序運行后輸出:235711 返回編輯課件例5.10#include #include void prime(int b10) int i,j; for(i=0;i10;i+) for(j=2;j=sqrt(bi);j+) if (bi%j=0) bi=0;void main(void) i

32、nt i; int a10=2,3,4,5,6,7,8,9,10,11; prime(a); for(i=0;i10;i+) if (ai!=0) coutait; coutendl;程序運行后輸出:235711 返回編輯課件例5.11(1)#include float average(float a,int n) float sum=0; for (int i=0;in;i+) sum+=ai; return sum/n;float maximin(float a,int n) float max=a0; for(int i=0;imax) max=ai; return max;編輯課件例5

33、.11(2)void sort(float a,int n) int i,j,k,t; for (i=0;in-1;i+) k=i; for (j=i+1;jaj) k=j; if (ki) t=ak;ak=ai;ai=t; 編輯課件例5.11(3)void main(void) float s10,ave,max; int i; coutinput 10 score:; for (i=0;isi; ave=average(s,10); max=maximin(s,10); sort(s,10); coutave=aveendl; coutmax=maxendl; coutsort:; for

34、 (i=0;i10;i+) coutsit; coutendl; 編輯課件例5.11(4)程序執(zhí)行后提示: Input 10 score:90 80 70 50 65 71 83 95 97 45 ave= 74.6 max=97 sort:45 50 65 7071 8083 9095 97 返回編輯課件例5.12(1)#include void inputarray(int array34) int i,j; coutInput array34:endl; for (i=0;i3;i+) for (j=0;jarrayij;編輯課件例5.12(2)int maxvalue(int arra

35、y 4,int n) /定義二維形參數(shù)組時, int i,j,max; /行長度可省略, max=array00; /但列長度不能省略 for (i=0;in;i+) for (j=0;jmax) max=arrayij; return max; 編輯課件例5.12(3)void main(void) int a34,m; inputarray(a);/實參為數(shù)組名a m=maxvalue(a,3);/實參為數(shù)組名a及行長度3 coutMax value is: mendl;程序執(zhí)行后提示: Input array34 1 538 67915 012779 2113980 Max value

36、is 80返回編輯課件例5.13#include void main(void) int i=1,j=2,k=3; coutitjtkendl; int a=4,b=5; k=a+b; coutatbtkendl; coutitjtkendl;程序執(zhí)行后輸出123459129返回編輯課件例5.14#include void main(void) int i=1,j=2,k=3; coutitjtkendl; int i=4,j=5; k=i+j; coutitjtkendl; coutitjtkendl;程序執(zhí)行后輸出 2 34 5 91 2 9返回編輯課件例5.15#include int

37、a=10;void main(void) int a=20; a=a+:a; int a=50;:a=:a+a; coutat:aendl;執(zhí)行程序后,其輸出結(jié)果為:30 60 返回編輯課件例5.16#include void main(void) int x=5,y=10; for (int k=1;k=2;k+) auto int m=0,n=0; m=m+1; n=n+x+y; coutm=mtn=nendl; 執(zhí)行程序后,其輸出結(jié)果為: m=1n=15 m=1n=15 返回編輯課件例5.17#include void main(void) int x=5,y=10; for (int

38、k=1;k=2;k+) register int m=0,n=0; m=m+1; n=n+x+y; coutm=mtn=nendl; 執(zhí)行程序后,其輸出結(jié)果為: m=1n=15 m=1n=15 返回編輯課件例5.18#include void f(int x,int y) int m=0; static int n=0; m=m+x+y; n=n+x+y; coutm=mtn=nendl;執(zhí)行程序后,其輸出結(jié)果為: m=15n=15 m=15n=30 m=15n=45 void main(void) int i=5,j=10,k; for (k=1;k=3;k+) f(i,j); 返回編輯課件例5.19#include static int a=6,b=5;int max(int x,int y) coutatby?x:y; void main(vo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論