




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 第5章 函數(shù)目的與要求5.1 函數(shù)的定義和調(diào)用5.2 函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.3 數(shù)組作函數(shù)參數(shù)(習(xí)題課)5.4 變量的存儲(chǔ)類型5.5 內(nèi)聯(lián)函數(shù)5.6 具有默認(rèn)參數(shù)值的函數(shù)5.7 函數(shù)的重載本章小結(jié)編輯課件目的與要求 通過本章學(xué)習(xí),應(yīng)理解函數(shù)的概念,熟練掌握函數(shù)的定義和調(diào)用方法,理解函數(shù)調(diào)用時(shí)實(shí)參和形參間數(shù)據(jù)的傳遞方法。理解函數(shù)遞歸的概念,初步掌握遞歸的使用方法,理解變量的作用域和存儲(chǔ)類型的概念,了解內(nèi)聯(lián)函數(shù)與函數(shù)重載的概念。 編輯課件5.1 函數(shù)的定義和調(diào)用 5.1.1 函數(shù)的概念 函數(shù)概念:具備特定功能的獨(dú)立程序段。 函數(shù)包括標(biāo)準(zhǔn)函數(shù)和自定義函數(shù)。 【例5.1】 在主函數(shù)中調(diào)用標(biāo)準(zhǔn)函
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ù)時(shí),形參表應(yīng)該寫成void。 無參函數(shù)的定義格式為: 類型(void) 【例5.2】 無參函數(shù)的實(shí)例。 (2)C+對(duì)形參的個(gè)數(shù)沒有限制。 (3)必須依次說明每一個(gè)參數(shù)的數(shù)據(jù)類型。 例程編輯課件5.
3、1.3 函數(shù)的調(diào)用 1函數(shù)調(diào)用格式 函數(shù)調(diào)用的一般格式為: () 其中,實(shí)參表的一般格式為: , 2函數(shù)的實(shí)參 (1)實(shí)參為能求值的表達(dá)式 (2)實(shí)參和形參的類型應(yīng)兼容 3.函數(shù)的三種調(diào)用方式 (1)函數(shù)調(diào)用語句。函數(shù)調(diào)用語句的一般格式為: (實(shí)參表); 此時(shí)不要求函數(shù)有返回值,只要求函數(shù)完成一定的操作。編輯課件函數(shù)調(diào)用方式 (2)函數(shù)表達(dá)式 函數(shù)調(diào)用出現(xiàn)在一個(gè)表達(dá)式中,此時(shí)要求函數(shù)有確定的返回值以便參與表達(dá)式的運(yùn)算。 (3)函數(shù)參數(shù) 函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。 【例5.3.1】用自定義函數(shù)求三個(gè)整數(shù)的最大值。 4.函數(shù)返回語句return (1)格式: return ; 或:return
4、(); (2)作用: 返回表達(dá)式的值,結(jié)束函數(shù)執(zhí)行,并將控制轉(zhuǎn)移到調(diào)用函數(shù)的地方繼續(xù)執(zhí)行。例程編輯課件5.函數(shù)的原型說明 在C+程序中,當(dāng)函數(shù)定義在前、函數(shù)調(diào)用在后時(shí),程序能被正確編譯執(zhí)行。而當(dāng)函數(shù)調(diào)用在前、函數(shù)定義在后時(shí),則應(yīng)在主調(diào)函數(shù)中增加對(duì)被調(diào)函數(shù)的原型說明。 (1)函數(shù)原型說明的格式: (); 或: (); (2)函數(shù)原型說明的作用: 告訴編譯程序,函數(shù)返回值的類型、參數(shù)個(gè)數(shù)和各參數(shù)類型。 【例5.3.2】用自定義函數(shù)求三個(gè)整數(shù)的最大值。例程編輯課件5.1.4 實(shí)參與形參的數(shù)據(jù)傳送 在C+中,實(shí)參和形參間數(shù)據(jù)傳送的方式有三種:值傳送、傳地址和引用傳送。先介紹值傳送方式。 值傳送過程:
5、(1)調(diào)用函數(shù)時(shí),先為形參分配存儲(chǔ)單元,后將實(shí)參值傳遞給形參; (2)函數(shù)執(zhí)行過程中均為形參參與運(yùn)算; (3)函數(shù)調(diào)用后,形參所對(duì)應(yīng)的存儲(chǔ)單元被釋放,實(shí)參保持原來的值不變。 【例5.4】 定義變量交換函數(shù)swap(),將兩個(gè)整型變量交換數(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)用另一個(gè)函數(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 在利用遞歸求值時(shí),必須注意三點(diǎn): (1)遞歸公式: n*(n-1)! (2)遞歸結(jié)束條件: n=0或1 (3)遞歸約束條件: n0例程編
7、輯課件遞歸 3.遞歸兩個(gè)階段 (1)遞歸階段:將原問題不斷分解為新的子問題,逐漸從未知向已知推進(jìn),最終達(dá)到已知的條件,即遞歸結(jié)束條件,此時(shí)遞歸階段結(jié)束。 (2)回推階段:從已知的條件出發(fā),按照遞歸的逆方向,逐一求值回推,最后達(dá)到遞歸的開始處,結(jié)束回推階段,從而完成整個(gè)遞歸調(diào)用過程。 【例5.7】 用遞歸法求裴波那契數(shù)列的前20個(gè)數(shù),要求每行輸出4個(gè)數(shù)。 例程編輯課件5.3 數(shù)組作函數(shù)參數(shù)(習(xí)題課)5.3.1 數(shù)組元素作函數(shù)實(shí)參 傳送方式:值傳送。 【例5.8】定義顯示變量值函數(shù)print(),用數(shù)組元素作函數(shù)實(shí)參,輸出數(shù)組元素值。 【例5.9】定義判素?cái)?shù)的函數(shù)prime(),用數(shù)組元素作函數(shù)實(shí)
8、參,判斷數(shù)組各元素值是否為素?cái)?shù)。若不是素則清0。最后輸出數(shù)組中的素?cái)?shù)。 例程例程編輯課件5.3.2 數(shù)組名作函數(shù)參數(shù) 1.一維數(shù)組作為函數(shù)參數(shù) (1)函數(shù)定義格式 (長度,) 函數(shù)體 說明:對(duì)于一維數(shù)組而言,函數(shù)定義中的數(shù)組長度可省略。 (2)函數(shù)調(diào)用格式 函數(shù)名(數(shù)組名,) 注意:實(shí)參數(shù)組名后不能加“”。編輯課件一維數(shù)組作為函數(shù)參數(shù) (3)實(shí)參與形參的傳送方式:傳地址 當(dāng)數(shù)組作為函數(shù)參數(shù),在調(diào)用函數(shù)時(shí),系統(tǒng)并沒有為形參數(shù)組重新分配內(nèi)存空間,而是將實(shí)參數(shù)組的首地址傳送給形參數(shù)組,使形參數(shù)組與實(shí)參數(shù)組占用相同的內(nèi)存空間,所以對(duì)形參數(shù)組的修改就是對(duì)實(shí)參數(shù)組的修改。這種參數(shù)的傳送方式稱為傳地址。 【
9、例5.10】編寫判素?cái)?shù)的函數(shù),要求用數(shù)組作為函數(shù)參數(shù),函數(shù)功能是將數(shù)組中所有非素?cái)?shù)的元素清0。在主函數(shù)中調(diào)用判素?cái)?shù)的函數(shù),并輸出所有素?cái)?shù)。 例程編輯課件一維數(shù)組作為函數(shù)參數(shù) (4)說明 用數(shù)組名作函數(shù)參數(shù)時(shí),應(yīng)該在主調(diào)函數(shù)和被調(diào)函數(shù)中分別定義數(shù)組;實(shí)參數(shù)組和形參數(shù)組的類型應(yīng)一致;實(shí)參數(shù)組和形參數(shù)組的大小可以一致也可以不一致。 形參數(shù)組可不指定大小,在定義形參數(shù)組時(shí),在數(shù)組名后面跟一個(gè)空的方括號(hào),為了在被調(diào)函數(shù)中處理數(shù)組元素的需要,可以另設(shè)一個(gè)參數(shù),傳遞數(shù)組元素的個(gè)數(shù)。 編輯課件一維數(shù)組作為函數(shù)參數(shù) 【例5.11】編寫程序計(jì)算某班學(xué)生的平均成績、最高分,并對(duì)學(xué)生成績用擂臺(tái)法按升序排序。要求用函數(shù)
10、完成上述工作,編寫如下函數(shù): (1)求平均分的函數(shù)average(); (2)求最高分的函數(shù)maximin(); (3)對(duì)學(xué)生成績升序排序的函數(shù)sort(); 在主函數(shù)中定義一維數(shù)組并輸入10個(gè)學(xué)生的成績。調(diào)用上述函數(shù)計(jì)算并輸出班級(jí)的平均成績及最高分,并輸出排序后的學(xué)生成績。 例程編輯課件2.二維數(shù)組作為函數(shù)參數(shù) (1)函數(shù)定義格式 (行長度列長度,) 函數(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、變量的存儲(chǔ)類型5.4.1 作用域 作用域是變量在程序中可引用的區(qū)域。 1.塊作用域 (1)塊 塊是用花括號(hào)括起來的一部分程序。 (2)塊作用域 在塊內(nèi)說明的變量具有塊作用域,其作用域:從變量說明處到塊的結(jié)束處(即塊的右花括號(hào)處)。 【例5.13】塊作用域示例。 【例5.14】同名變量的作用域示例。 C+語言規(guī)定:當(dāng)程序塊嵌套時(shí),如果外層塊中的變量與內(nèi)層塊中的變量同名,則在內(nèi)層塊執(zhí)行時(shí),外層塊中的同名變量不起作用,即局部優(yōu)先。 例程例程編輯課件作用域 2.文件作用域 在函數(shù)外定義的變量(或用extern說明的變量)具有文件作用域。其作用域:從函數(shù)外定義變量的位置開始到該源程序文件結(jié)束(可用ext
12、ern進(jìn)行擴(kuò)展)。 3.函數(shù)原型作用域 在函數(shù)原型的參數(shù)表中說明的變量具有函數(shù)原型作用。其作用域:從變量說明處開始到函數(shù)原型說明結(jié)束。 4.函數(shù)作用域 函數(shù)作用域是指在函數(shù)內(nèi)定義的標(biāo)識(shí)符在其定義的函數(shù)內(nèi)均有效,即不論在函數(shù)內(nèi)的任一地方定義,均可以引用這種標(biāo)識(shí)符。在C+語言中,只有標(biāo)號(hào)與在函數(shù)開始處定義的變量具有函數(shù)作用域,可在整個(gè)函數(shù)內(nèi)引用。 編輯課件5.4.2 局部變量與全局變量 1.局部變量 在函數(shù)或塊內(nèi)定義的變量稱為局部變量,具有塊作用域。 2.全局變量 定義在函數(shù)外的變量稱為全局變量,具有文件作用域。 注意:當(dāng)具有塊作用域的局部變量與具有文件作用域的全局變量同名時(shí),與局部變量同名的全局
13、變量不起作用,即局部變量優(yōu)先。但與塊嵌套不同的是,在塊作用域內(nèi)可通過作用域運(yùn)算符“:”來引用與局部變量同名的全局變量。 【例5.15】全局變量、局部變量與塊內(nèi)局部變量示例。 例程編輯課件5.4.3 動(dòng)態(tài)與靜態(tài)變量 1存儲(chǔ)空間分類 (1) 程序區(qū):存放可執(zhí)行程序的程序代碼; (2)靜態(tài)存儲(chǔ)區(qū):存放靜態(tài)變量; (3)動(dòng)態(tài)存儲(chǔ)區(qū):存放動(dòng)態(tài)變量。 動(dòng)態(tài)存儲(chǔ)區(qū):存放動(dòng)態(tài)變量 靜態(tài)存儲(chǔ)區(qū):存放靜態(tài)變量 程序存儲(chǔ)區(qū):存放程序 C+程序占用的存儲(chǔ)空間 2.動(dòng)態(tài)變量:在程序執(zhí)行過程中分配存儲(chǔ)空間的變量。 3.靜態(tài)變量:程序開始執(zhí)行時(shí)就分配存儲(chǔ)空間的變量 。編輯課件5.4.4 變量的存儲(chǔ)類型 1.自動(dòng)類型(aut
14、o) 用自動(dòng)類型關(guān)鍵詞auto說明的變量稱為自動(dòng)變量。 (1)特性: 自動(dòng)變量是動(dòng)態(tài)局部變量,具有塊作用域,存放在動(dòng)態(tài)存儲(chǔ)區(qū)。 (2)定義格式: auto ; 【例5.16】 使用自動(dòng)變量的示例。 例程編輯課件2.寄存器類型( register ) 用寄存器類型關(guān)鍵詞register說明的變量稱為寄存器變量。 (1)特性: 寄存器變量是動(dòng)態(tài)局部變量,具有塊作用域,存放在CPU的寄存器或動(dòng)態(tài)存儲(chǔ)區(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】用自動(dòng)變量與靜態(tài)局部變量求三個(gè)整數(shù)的和。 (2)靜態(tài)全局變量 定義在函數(shù)外或用extern說明的靜態(tài)變量稱為靜態(tài)全局變量。 【例5.19】 找出兩個(gè)整數(shù)中較大的一個(gè)數(shù)。 例程例程編輯課件4.外部類型( extern ) 用外部類型關(guān)鍵詞extern說明的全局變量稱為外部變量 。 (1)特性: 外部變量為靜態(tài)全局變量; (2)定義格式: extern ; 【例5.20】 在同一文件中定義全局變量為外部變量的示例,求兩個(gè)整數(shù)的最大值。 【例5.21】將另一文件中的全局變量定義為本文件外部變量的示例,求兩個(gè)整數(shù)的最
16、大值。 例程例程編輯課件5.5 內(nèi)聯(lián)函數(shù) 所謂內(nèi)聯(lián)函數(shù),就是在編譯時(shí)把函數(shù)的函數(shù)體直接插入到調(diào)用處,而不是在執(zhí)行中發(fā)生調(diào)用函數(shù)時(shí)的控制轉(zhuǎn)移。這樣可以降低程序運(yùn)行時(shí)間,提高了程序的執(zhí)行效率。 內(nèi)聯(lián)函數(shù)定義格式: inline () 【例5.22】 用內(nèi)聯(lián)函數(shù)實(shí)現(xiàn)求兩個(gè)整數(shù)的和。 說明: (1)內(nèi)聯(lián)函數(shù)的函數(shù)體內(nèi)一般不能含有循環(huán)、switch分支和復(fù)雜嵌套的if語句。 (2)內(nèi)聯(lián)函數(shù)的實(shí)質(zhì)是用存儲(chǔ)空間(使用更多的存儲(chǔ)空間)來換取執(zhí)行時(shí)間(減少執(zhí)行的時(shí)間),即可加速程序的執(zhí)行。例程編輯課件5.6 具有默認(rèn)參數(shù)值的函數(shù) 在C+中定義函數(shù)時(shí),允許給形參指定默認(rèn)值,即形參表可寫成如下形 式: =, = 其
17、中表達(dá)式必須有確定的默認(rèn)值。在調(diào)用函數(shù)時(shí),若明確給出了實(shí)參的值,則使用相應(yīng)實(shí)參的值;若沒有給出相應(yīng)實(shí)參的值,則使用默認(rèn)的值。 【例5.23】 編寫具有默認(rèn)參數(shù)值的函數(shù)求三個(gè)整數(shù)的和。 (1)具有默認(rèn)參數(shù)值函數(shù)應(yīng)先定義后調(diào)用。 (2)在定義函數(shù)時(shí),具有默認(rèn)值的參數(shù)必須位于參數(shù)表的最右邊。 (3)函數(shù)調(diào)用時(shí),若省略某個(gè)實(shí)參而使形參采用默認(rèn)值,則其后的實(shí)參都應(yīng)省略。 例程編輯課件5.7 函數(shù)的重載 同一個(gè)函數(shù)名或同一個(gè)運(yùn)算符,根據(jù)不同的對(duì)象可以完成不同的功能和運(yùn)算,這種特性稱為重載性。 所謂函數(shù)的重載是指用重名函數(shù)完成不同功能的函數(shù)運(yùn)算。當(dāng)然這種函數(shù)的定義必須符合函數(shù)重載的規(guī)定。 【例5.24】 重
18、載求和的函數(shù),分別求兩個(gè)整數(shù)、兩個(gè)實(shí)數(shù)和兩個(gè)雙精度實(shí)數(shù)的和。 注意: (1)定義的重載函數(shù)的形參必須不同,即:或者參數(shù)個(gè)數(shù)不同或者數(shù)據(jù)類型不同。 (2)如果函數(shù)名相同,形參的個(gè)數(shù)和類型均相同,但函數(shù)的返回值不同,則不能定義為重載函數(shù)。 例程編輯課件本章小結(jié) 1.函數(shù)的定義和調(diào)用 函數(shù)可分成系統(tǒng)提供的標(biāo)準(zhǔn)庫函數(shù)和用戶自定義函數(shù)。標(biāo)準(zhǔn)庫函數(shù)可以直接使用,而用戶自定義函數(shù)則必須先定義后使用。 (1)函數(shù)定義格式 類型 () 函數(shù)體 (2)函數(shù)調(diào)用格式 () 函數(shù)調(diào)用的方式通常有三種,即:函數(shù)調(diào)用語句、函數(shù)表達(dá)式、函數(shù)參數(shù)。 編輯課件2.實(shí)參和形參間數(shù)據(jù)的傳遞 (1)值傳送 當(dāng)函數(shù)的形參為變量時(shí),其實(shí)
19、參為常量、變量、數(shù)組元素與表達(dá)式。調(diào)用函數(shù)時(shí),系統(tǒng)給形參分配存儲(chǔ)單元,并將實(shí)參的值傳遞給對(duì)應(yīng)的形參;在函數(shù)執(zhí)行過程中均為形參參與運(yùn)算;函數(shù)返回時(shí),形參值的改變不影響實(shí)參,實(shí)參保持原來的值。 (2)傳地址 當(dāng)函數(shù)的形參為數(shù)組時(shí),其實(shí)參只能是相同類型的數(shù)組名(不能加“”號(hào))。在C+中,規(guī)定數(shù)組名表示數(shù)組的首地址,因此在調(diào)用函數(shù)時(shí),系統(tǒng)將實(shí)參數(shù)組的首地址傳遞給形參數(shù)組,使兩個(gè)數(shù)組占用相同的內(nèi)存空間。在執(zhí)行函數(shù)過程中,形參數(shù)組中各元素值的變化會(huì)使實(shí)參數(shù)組元素的值同時(shí)發(fā)生變化。 編輯課件3.函數(shù)的返回值 函數(shù)可用return語句返回一個(gè)值給主調(diào)函數(shù)。 return語句的格式是: return ; 或:
20、return (); 此時(shí)函數(shù)的類型應(yīng)與與表達(dá)式的類型一致。當(dāng)函數(shù)沒用return 語句返回值時(shí),函數(shù)類型應(yīng)為void。 編輯課件4.函數(shù)的原型說明 在C+程序中,當(dāng)函數(shù)調(diào)用在前、函數(shù)定義在后時(shí),則應(yīng)在調(diào)用前增加對(duì)被調(diào)函數(shù)的原型說明。 函數(shù)原型說明的一般格式為: (); 或: (); 在函數(shù)原型說明中,可只寫形參的數(shù)據(jù)類型,而省略形參名。 編輯課件5.函數(shù)的嵌套調(diào)用和遞歸調(diào)用 (1)函數(shù)的嵌套調(diào)用 函數(shù)的嵌套調(diào)用是在調(diào)用一個(gè)函數(shù)的過程中,在該函數(shù)的函數(shù)體內(nèi)又調(diào)用另一個(gè)函數(shù)。 (2)函數(shù)的遞歸調(diào)用 函數(shù)的遞歸調(diào)用是在一個(gè)函數(shù)定義的函數(shù)體中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。 利用遞歸方法解決問題時(shí)
21、,必須注意三點(diǎn):遞歸的公式、遞歸的結(jié)束條件、遞歸的限制條件。 編輯課件6.變量的作用域和存儲(chǔ)類型 (1)作用域 作用域是變量在程序中可引用的區(qū)域。作用域共分成塊、文件、函數(shù)原型、函數(shù)、類作用域五種。前四種作用域總結(jié)范圍如下: 塊作用域:從塊內(nèi)變量定義開始到塊結(jié)束。 文件作用域:從函數(shù)外變量定義開始到文件結(jié)束 (可用extern進(jìn)行擴(kuò)展)。 函數(shù)原型作用域:從原型變量定義開始到函數(shù)原型說明結(jié)束。 函數(shù)作用域:從函數(shù)開始到函數(shù)結(jié)束。編輯課件(2)局部與全局變量 局部變量是在函數(shù)內(nèi)部定義或在塊內(nèi)定義的變量。局部變量都具有塊作用域。 全局變量是在函數(shù)外定義的變量。全局變量具有文件作用域。 當(dāng)局部變量與
22、全局變量同名時(shí),局部變量優(yōu)先。 在塊作用域內(nèi)可通過作用域運(yùn)算符“:”來引用與局部變量同名的全局變量。編輯課件(3)靜態(tài)與動(dòng)態(tài)變量 動(dòng)態(tài)變量是在程序的執(zhí)行過程中為其分配內(nèi)存的變量。 靜態(tài)變量是在程序開始執(zhí)行時(shí)就為其分配內(nèi)存,直到程序執(zhí)行結(jié)束時(shí),才收回內(nèi)存的變量。編輯課件(4)C+存儲(chǔ)區(qū) C+程序在內(nèi)存中占用的存儲(chǔ)空間可以分為三個(gè)部分: 程序區(qū)、靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)。 動(dòng)態(tài)變量存儲(chǔ)在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū);靜態(tài)變量存儲(chǔ)在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū)。 編輯課件(5)變量的存儲(chǔ)類型 在C+中,變量的存儲(chǔ)類型分為四種: 自動(dòng)類型(auto)、寄存器類型(register)、靜態(tài)類型(static)、外部類型(ex
23、tern)。 自動(dòng)類型、寄存器類型屬于動(dòng)態(tài)存儲(chǔ)類型;靜態(tài)類型、外部類型屬于靜態(tài)存儲(chǔ)類型。 編輯課件變量存儲(chǔ)類型表 變量類型 全局、局部變量 作用域 靜、動(dòng)態(tài)變量 存儲(chǔ)區(qū) 自動(dòng)變量局部變量塊作用域動(dòng)態(tài)變量動(dòng)態(tài)存儲(chǔ)寄存器變量局部變量塊作用域動(dòng)態(tài)變量CPU寄存器靜態(tài)局部變量局部變量塊作用域靜態(tài)變量靜態(tài)存儲(chǔ)區(qū)靜態(tài)全局變量全局變量文件作用域靜態(tài)變量靜態(tài)存儲(chǔ)區(qū)外部變量全局變量文件作用域靜態(tài)變量靜態(tài)存儲(chǔ)區(qū)編輯課件7.內(nèi)聯(lián)函數(shù) 在類型前加關(guān)鍵字inline定義的函數(shù)稱為內(nèi)聯(lián)函數(shù),定義格式為: inline () 函數(shù)體 內(nèi)聯(lián)函數(shù)的實(shí)質(zhì)就是在編譯時(shí)把函數(shù)的函數(shù)體直接插入到調(diào)用處。其目的是降低系統(tǒng)的開銷,提高程序
24、的執(zhí)行效率。 編輯課件8.具有默認(rèn)參數(shù)值的函數(shù) 給形參指定默認(rèn)值的函數(shù)稱為具有默認(rèn)參數(shù)值的函數(shù)。 指定默認(rèn)值的形參必須寫在形參表的右邊。 在調(diào)用函數(shù)時(shí),若明確給出了實(shí)參的值,則使用相應(yīng)實(shí)參的值;若沒有給出相應(yīng)實(shí)參的值,則使用默認(rèn)的值。 編輯課件9.函數(shù)的重載 一個(gè)函數(shù)名或一個(gè)運(yùn)算符,根據(jù)不同的對(duì)象可以完成不同的功能和運(yùn)算,這種特性稱為重載性。 函數(shù)的重載是指用重名函數(shù)完成不同功能的函數(shù)運(yùn)算。 重載函數(shù)形參必須不同,即或者參數(shù)個(gè)數(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;程序運(yùn)行結(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實(shí)參a4實(shí)參b3形參x44形參y3形參交換前形參交換后實(shí)參與形參的值傳送返回編輯課件例5.5(1)#include float fac(int k) /定義計(jì)算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)/定義計(jì)算組合數(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)用計(jì)算組合數(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;程序運(yùn)行后輸出: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;程序運(yùn)行后輸出: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ù)組時(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í)參為數(shù)組名a m=maxvalue(a,3);/實(shí)參為數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 25178-605:2025 EN Geometrical product specifications (GPS) - Surface texture: Areal - Part 605: Design and characteristics of non-contact (point autofocus probe) instrum
- 2025年鋁合金精密模鍛件合作協(xié)議書
- 2025年度商鋪?zhàn)庥贸兄Z書規(guī)范版4篇
- 行業(yè)趨勢與發(fā)展目標(biāo)分析計(jì)劃
- 師生互動(dòng)促進(jìn)學(xué)習(xí)效果的研究計(jì)劃
- 新年職場新風(fēng)格與工匠精神計(jì)劃
- 如何利用社群效應(yīng)推動(dòng)品牌計(jì)劃
- 班主任的心理情感輔導(dǎo)計(jì)劃
- 企業(yè)財(cái)務(wù)戰(zhàn)略的執(zhí)行方法計(jì)劃
- 倉庫持續(xù)改進(jìn)的必要性與方法計(jì)劃
- 5000只淮山羊和波爾山羊雜交良種養(yǎng)殖場建設(shè)項(xiàng)目可行性研究報(bào)告
- GB/T 5534-2008動(dòng)植物油脂皂化值的測定
- GB/T 12771-2019流體輸送用不銹鋼焊接鋼管
- 測量管理體系內(nèi)審檢查表
- 工程驗(yàn)收及移交管理方案
- 心臟手術(shù)麻醉的一般流程課件
- 圖片編輯概述課件
- 2023年岳陽職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試筆試題庫及答案解析
- 信號(hào)與系統(tǒng)復(fù)習(xí)題及答案
- 北師大版八年級(jí)數(shù)學(xué)上冊(cè)《認(rèn)識(shí)無理數(shù)(第2課時(shí))》參考課件2
- 中級(jí)建構(gòu)筑物消防員理論綜合模擬題01原題
評(píng)論
0/150
提交評(píng)論