全書授課與教學(xué)課件23第8章函數(shù)_第1頁(yè)
全書授課與教學(xué)課件23第8章函數(shù)_第2頁(yè)
全書授課與教學(xué)課件23第8章函數(shù)_第3頁(yè)
全書授課與教學(xué)課件23第8章函數(shù)_第4頁(yè)
全書授課與教學(xué)課件23第8章函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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)介

軟件開(kāi)發(fā)魔典從入門到項(xiàng)目實(shí)踐項(xiàng)目實(shí)踐清華大學(xué)出版社(超值版)本課時(shí)學(xué)習(xí)重點(diǎn)掌握函數(shù)定義與調(diào)用的方法。掌握參數(shù)傳遞的方法。熟悉并掌握函數(shù)調(diào)用的機(jī)制。熟悉變量的作用域。熟悉變量的存儲(chǔ)類別。掌握函數(shù)重載的方法。熟悉內(nèi)聯(lián)函數(shù)。熟悉編譯預(yù)處理的方法。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)概述“函數(shù)”這個(gè)名詞是從英文function翻譯過(guò)來(lái)的,其實(shí)function的原意是“功能”。顧名思義,一個(gè)函數(shù)就是一個(gè)功能。在實(shí)際應(yīng)用的程序中,每個(gè)C++程序都至少有一個(gè)函數(shù),即主函數(shù)main(),它的作用就是調(diào)用各個(gè)函數(shù),程序各部分的功能全部都是由各函數(shù)實(shí)現(xiàn)的。主函數(shù)相當(dāng)于總調(diào)度,調(diào)動(dòng)各函數(shù)依次實(shí)現(xiàn)各項(xiàng)功能。開(kāi)發(fā)商和軟件開(kāi)發(fā)人員將一些常用的功能模塊編寫成函數(shù),放在函數(shù)庫(kù)中供公共選用。程序開(kāi)發(fā)人員要善于利用庫(kù)函數(shù),以減少重復(fù)編寫程序段的工作量。從用戶使用的角度來(lái)說(shuō),C++中的函數(shù)主要有以下兩種。(1)系統(tǒng)函數(shù):即庫(kù)函數(shù)。這是編譯系統(tǒng)提供的,用戶不需要定義這些函數(shù)就可以直接使用。(2)用戶自定義函數(shù):用戶根據(jù)程序功能的需要自己編寫的函數(shù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)的定義與調(diào)用函數(shù)的定義函數(shù)的聲明函數(shù)的調(diào)用聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)的定義在C++中,函數(shù)由一個(gè)函數(shù)頭和一個(gè)函數(shù)主體組成。下面列出一個(gè)函數(shù)的所有組成部分:聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件/*

函數(shù)頭*//*

函數(shù)主體*/<函數(shù)類型> <函數(shù)名>

(<形式參數(shù)表>){若干語(yǔ)句;…}函數(shù)類型:一個(gè)函數(shù)可以返回一個(gè)值。函數(shù)類型就是函數(shù)返回的值的數(shù)據(jù)類型。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,類型的關(guān)鍵字是void。函數(shù)名:這是函數(shù)的實(shí)際名稱。函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。形式參數(shù)表:即函數(shù)中可以有多個(gè)形式參數(shù),也可以沒(méi)有形式參數(shù)。形式參數(shù)簡(jiǎn)稱形參,根據(jù)形參的有無(wú),函數(shù)分為兩類:有參函數(shù)和無(wú)參函數(shù)。函數(shù)主體:函數(shù)主體包含一組定義函數(shù)執(zhí)行任務(wù)的語(yǔ)句。函數(shù)的聲明函數(shù)聲明會(huì)告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)。為了增加程序的可讀性,函數(shù)的聲明放在main函數(shù)體內(nèi)的前面。函數(shù)的實(shí)際主體可以單獨(dú)定義。函數(shù)聲明的格式如下:<函數(shù)類型><函數(shù)名>(<形式參數(shù)表>);函數(shù)的聲明要和函數(shù)定義時(shí)的函數(shù)類型、函數(shù)名和參數(shù)類型一致,但形參名可以省略,而且還可以不相同。在函數(shù)聲明中,參數(shù)的名稱并不重要,只有參數(shù)的類型是必需的,因此下例也是有效的聲明:int

max(int,

int);注意:如果聲明的函數(shù)在該函數(shù)定義之后,而調(diào)用該函數(shù)在前,就會(huì)產(chǎn)生錯(cuò)誤。為了解決這個(gè)問(wèn)題,必須將函數(shù)定義在主調(diào)函數(shù)的前面或在調(diào)用前進(jìn)行函數(shù)的聲明。函數(shù)的聲明消除了函數(shù)定義的位置的影響,也就是說(shuō),不管函數(shù)是在何處定義的,只要在調(diào)用前進(jìn)行聲明,就可以保證函數(shù)調(diào)用的合法性。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)的調(diào)用在創(chuàng)建C++函數(shù)時(shí),會(huì)定義函數(shù)做什么,然后通過(guò)調(diào)用函數(shù)來(lái)完成已定義的任務(wù)。當(dāng)程序調(diào)用函數(shù)時(shí),程序控制權(quán)會(huì)轉(zhuǎn)移給被調(diào)用的函數(shù)。被調(diào)用的函數(shù)執(zhí)行已定義的任務(wù),當(dāng)函數(shù)的返回語(yǔ)句被執(zhí)行時(shí),或到達(dá)函數(shù)的結(jié)束括號(hào)時(shí),會(huì)把程序控制權(quán)交還給主程序。1.無(wú)參函數(shù)的調(diào)用2.有參函數(shù)的調(diào)用3.調(diào)用函數(shù)時(shí),傳遞所需參數(shù),如果函數(shù)返回一個(gè)值,則可以存儲(chǔ)返回值聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件參數(shù)傳遞、返回值函數(shù)參數(shù)函數(shù)返回值聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)參數(shù)在定義函數(shù)時(shí)函數(shù)名后面括號(hào)中的變量名稱為形式參數(shù)(formalparameter,簡(jiǎn)稱形參),在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)(可以是一個(gè)表達(dá)式)稱為實(shí)際參數(shù)(actualparameter,簡(jiǎn)稱實(shí)參)?!纠?-5】編寫程序,調(diào)用函數(shù)時(shí)傳遞數(shù)據(jù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)返回值1.

對(duì)函數(shù)返回值的說(shuō)明如下:(1)函數(shù)的返回值是指由被調(diào)函數(shù)計(jì)算處理后向主調(diào)函數(shù)返回的一個(gè)計(jì)算結(jié)果,最多只能有一個(gè),用return語(yǔ)句實(shí)現(xiàn)。(2)函數(shù)值的類型。既然函數(shù)有返回值,這個(gè)值當(dāng)然應(yīng)屬于某一個(gè)確定的類型,應(yīng)當(dāng)在定義函數(shù)時(shí)指定函數(shù)值的類型。(3)如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn),即函數(shù)類型決定返回值的類型。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。(4)執(zhí)行被調(diào)函數(shù)時(shí),可能有多個(gè)return語(yǔ)句,但遇到第1個(gè)return語(yǔ)句就結(jié)束函數(shù)的執(zhí)行,返回到主調(diào)函數(shù)。若函數(shù)中無(wú)return語(yǔ)句,則會(huì)執(zhí)行到函數(shù)體最后的“}”為止,返回到主調(diào)函數(shù)。(5)return后面的表達(dá)式可以有括號(hào),也可以沒(méi)有括號(hào)。(6)無(wú)返回值的函數(shù)其返回值類型應(yīng)說(shuō)明為void類型,否則將返回一個(gè)不確定的值。2.

return語(yǔ)句有以下兩種形式:(1)用于帶有返回值的函數(shù)。(2)用于無(wú)返回值的函數(shù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)調(diào)用機(jī)制函數(shù)調(diào)用的方式函數(shù)參數(shù)傳遞方式調(diào)用函數(shù)的嵌套調(diào)用遞歸帶默認(rèn)值的函數(shù)調(diào)用聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)調(diào)用的方式調(diào)用一個(gè)函數(shù),按照該函數(shù)在語(yǔ)句中的作用來(lái)分,可以有以下3種函數(shù)調(diào)用方式:1.函數(shù)語(yǔ)句把函數(shù)調(diào)用單獨(dú)作為一個(gè)語(yǔ)句,并不要求函數(shù)帶回一個(gè)值,只是要求函數(shù)完成一定的操作。2.函數(shù)表達(dá)式函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。3.函數(shù)參數(shù)函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。4.被調(diào)用函數(shù)的聲明函數(shù)聲明的位置可以在調(diào)用函數(shù)所在的函數(shù)中,也可以在函數(shù)之外。如果函數(shù)聲明放在函數(shù)的外部,在所有函數(shù)定義之前,則在各個(gè)主調(diào)函數(shù)中不必對(duì)所調(diào)用的函數(shù)再作聲明。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)參數(shù)傳遞方式調(diào)用在調(diào)用函數(shù)時(shí),實(shí)參會(huì)向形參進(jìn)行數(shù)據(jù)傳遞,傳遞的方式分為3種。1.按值傳遞該方法把參數(shù)的實(shí)際值復(fù)制給函數(shù)的形式參數(shù)。在這種情況下,修改函數(shù)內(nèi)的形式參數(shù)對(duì)實(shí)際參數(shù)沒(méi)有影響。2.按指針傳遞向函數(shù)傳遞參數(shù)的指針調(diào)用方法,把參數(shù)的地址復(fù)制給形式參數(shù)。在函數(shù)內(nèi),該地址用于訪問(wèn)調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)。3.按引用傳遞該方法是引用變量的別名,對(duì)別名的訪問(wèn)就是對(duì)別名所關(guān)聯(lián)變量的訪問(wèn),反之亦然。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)的嵌套調(diào)用函數(shù)的嵌套調(diào)用是指在一個(gè)函數(shù)體中又調(diào)用了其它函數(shù)。在程序中實(shí)現(xiàn)函數(shù)嵌套調(diào)用時(shí),需要注意的是在調(diào)用函數(shù)之前,需要對(duì)每一個(gè)被調(diào)用的函數(shù)作聲明(除非定義在前,調(diào)用在后)?!纠?-10】編寫程序,使用函數(shù)的嵌套關(guān)系,判斷出最大值。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件遞歸函數(shù)在定義自身的同時(shí)又出現(xiàn)了對(duì)自身的調(diào)用稱之為遞歸。遞歸是一種描述問(wèn)題的方法,或稱算法。遞歸的思想可以簡(jiǎn)單地描述為“自己調(diào)用自己

”。遞歸調(diào)用有兩種形式:1.直接遞歸如果一個(gè)函數(shù)在其定義體內(nèi)直接調(diào)用自己,則稱直接遞歸函數(shù)。2.間接遞歸如果一個(gè)函數(shù)經(jīng)過(guò)一系列的中間調(diào)用語(yǔ)句,通過(guò)其他函數(shù)間接調(diào)用自己,則稱間接遞歸函數(shù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件帶默認(rèn)值的函數(shù)調(diào)用在C++中,形參值是由實(shí)參值決定的,因此形參和實(shí)參的個(gè)數(shù)和類型都要相同。而定義函數(shù)時(shí)可以給形參指定一個(gè)默認(rèn)的值,這樣調(diào)用函數(shù)時(shí)如果沒(méi)有給這個(gè)形參賦值(沒(méi)有對(duì)應(yīng)的實(shí)參),那么就使用這個(gè)默認(rèn)的值。也就是說(shuō),調(diào)用函數(shù)時(shí)可以省略有默認(rèn)值的參數(shù)。如果用戶指定了參數(shù)的值,那么就使用用戶指定的值,否則使用參數(shù)的默認(rèn)值。所謂默認(rèn)參數(shù),指的是當(dāng)函數(shù)調(diào)用中省略了實(shí)參時(shí)自動(dòng)使用的一個(gè)值,這個(gè)值就是給形參指定的默認(rèn)值。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件變量作用域局部變量作用域全局變量作用域函數(shù)作用域文件作用域聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件局部變量作用域在一個(gè)函數(shù)內(nèi)部定義的變量稱為局部變量,它的作用域只在本函數(shù)范圍內(nèi)有效,也就是說(shuō)只有在本函數(shù)內(nèi)才能使用,在此函數(shù)以外是不能使用這些變量的。對(duì)局部變量的一些說(shuō)明:(1)主函數(shù)main中定義的變量(i和j)也只在主函數(shù)中有效,因?yàn)楹瘮?shù)間的關(guān)系是相互獨(dú)立的和并行的,所以主函數(shù)也不能使用其他函數(shù)中定義的變量。(2)不同函數(shù)中可以使用同名的變量,它們代表不同的對(duì)象,互不干擾。例如,在fun1函數(shù)中定義了變量b和c,倘若在fun2函數(shù)中也定義變量b和c,它們?cè)趦?nèi)存中占不同的單元,不會(huì)混淆。(3)可以在一個(gè)函數(shù)內(nèi)的復(fù)合語(yǔ)句中定義變量,這些變量只在本復(fù)合語(yǔ)句中有效,這種復(fù)合語(yǔ)句也稱為分程序或程序塊。(4)形式參數(shù)也是局部變量。例如fun1函數(shù)中的形參a也只在fun1函數(shù)中有效。其他函數(shù)不能調(diào)用。(5)在函數(shù)聲明中出現(xiàn)的參數(shù)名,其作用范圍只在本行的括號(hào)內(nèi)。實(shí)際上,編譯系統(tǒng)對(duì)函數(shù)聲明中的變量名是忽略的,即使在調(diào)用函數(shù)時(shí)也沒(méi)有為它們分配存儲(chǔ)單元。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件全局變量作用域在函數(shù)外部定義的變量就稱為全局變量。全局變量的有效范圍為從定義變量的位置開(kāi)始到本源文件結(jié)束。對(duì)全局變量的一些說(shuō)明:(1)全局變量的作用是增加函數(shù)間數(shù)據(jù)聯(lián)系的渠道。(2)建議不在必要時(shí)不要使用全局變量,原因有以下幾點(diǎn):①全局變量在程序的全部執(zhí)行過(guò)程中都占用存儲(chǔ)單元,而不是僅在需要時(shí)才開(kāi)辟單元。②它使函數(shù)的通用性降低了,因?yàn)樵谌魏魏瘮?shù)中都可以修改該變量。③一般要求把程序中的函數(shù)做成一個(gè)封閉體,除了可以通過(guò)“實(shí)參—形參”的渠道與外界發(fā)生聯(lián)系外,沒(méi)有其他渠道。這樣的程序移植性好,可讀性強(qiáng)。④使用全局變量過(guò)多,會(huì)降低程序的清晰性。在各個(gè)函數(shù)執(zhí)行時(shí)都可能改變?nèi)肿兞康闹?,程序容易出錯(cuò)。因此,要限制使用全局變量。(3)如果在同一個(gè)源文件中,全局變量與局部變量同名,則在局部變量的作用范圍內(nèi),全局變量被屏蔽。但可以使用作用域運(yùn)算符“::”訪問(wèn)同名的全局變量。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)作用域函數(shù)也是有作用域的,在本質(zhì)上函數(shù)的作用域是全局的。但是,因?yàn)橐粋€(gè)函數(shù)要被另外的函數(shù)調(diào)用,所以根據(jù)該函數(shù)作用范圍的不同,決定函數(shù)除了能被本文件中的函數(shù)調(diào)用之外,還能被其他文件中的函數(shù)調(diào)用。根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部函數(shù)和外部函數(shù)。1.內(nèi)部函數(shù)當(dāng)一個(gè)函數(shù)只能被本文件中的其他函數(shù)所調(diào)用時(shí),稱它為內(nèi)部函數(shù),在定義內(nèi)部函數(shù)時(shí),在函數(shù)名和函數(shù)類型的前面加static,所以內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。2.外部函數(shù)沒(méi)有用static修飾的函數(shù)均為外部函數(shù),因?yàn)橥獠亢瘮?shù)是函數(shù)的默認(rèn)類型。外部函數(shù)也可以用關(guān)鍵字extern進(jìn)行說(shuō)明。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件文件作用域文件作用域也稱“全局作用域”。(1)定義在所有函數(shù)之外的標(biāo)識(shí)符,具有文件作用域,作用域?yàn)閺亩x處到整個(gè)源文件結(jié)束。(2)文件中定義的全局變量和函數(shù)都具有文件作用域。(3)如果某個(gè)文件中說(shuō)明了具有文件作用域的標(biāo)識(shí)符,該文件又被另一個(gè)文件包含,則該標(biāo)識(shí)符的作用域延伸到新的文件中。如cin和cout是在頭文件iostream中說(shuō)明的具有文件作用域的標(biāo)識(shí)符,它們的作用域也延伸到嵌入iostream的文件中。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件函數(shù)重載參數(shù)類型不同的函數(shù)重載參數(shù)個(gè)數(shù)上不同的函數(shù)重載聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件參數(shù)類型不同的函數(shù)重載在編程時(shí),有時(shí)需要實(shí)現(xiàn)一些相類似的功能,只是有些細(xì)節(jié)不同。例如希望從3個(gè)數(shù)中找出其中的最大者,而每次求最大數(shù)時(shí)數(shù)據(jù)的類型不同,可能是3個(gè)整數(shù)、3個(gè)雙精度數(shù)或3個(gè)長(zhǎng)整數(shù)。用戶往往會(huì)分別設(shè)計(jì)出3個(gè)不同名的函數(shù)。例如:int max1(int

x,

int

y,

int

z); /*求3個(gè)整數(shù)中的最大者*/long max2(long

x,

long

y,

long

z);

/*求3個(gè)長(zhǎng)整數(shù)中的最大者*/double max3(doublex,

double

y,

double

z);/*求3個(gè)雙精度數(shù)中最大者*/這幾個(gè)函數(shù)都是求最大值的,但必須用不同的函數(shù)名,確實(shí)很麻煩。但是,對(duì)于不同類型的函數(shù)時(shí),可以使用相同的函數(shù)名。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件參數(shù)個(gè)數(shù)上不同的函數(shù)重載函數(shù)的重載不僅允許參數(shù)類型不同外,還允許參數(shù)個(gè)數(shù)的不同?!纠?-16】編寫程序,調(diào)用參數(shù)個(gè)數(shù)不同函數(shù)名相同的函數(shù)。聚慕課教育研究中心學(xué)習(xí)、授課與教學(xué)PPT課件內(nèi)聯(lián)函數(shù)當(dāng)程序執(zhí)行函數(shù)調(diào)用時(shí),系統(tǒng)要建立棧空間,保護(hù)現(xiàn)場(chǎng),傳遞參數(shù)以及控制程序執(zhí)行的轉(zhuǎn)移等等,這些工作需要一定的時(shí)間和空間的開(kāi)銷。為了提高效率,一個(gè)解決辦法就是不使用函數(shù),直接將函數(shù)的代碼嵌入到程序中。但這個(gè)辦法也有缺點(diǎn),一是相同代碼重復(fù)書寫,二是程序可讀性往往沒(méi)有使用函數(shù)的好。為了協(xié)調(diào)好效率和可讀性之間的矛盾,C++提供了另一種方法,即定義內(nèi)聯(lián)函數(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)論