第9章 函數(shù).ppt_第1頁
第9章 函數(shù).ppt_第2頁
第9章 函數(shù).ppt_第3頁
第9章 函數(shù).ppt_第4頁
第9章 函數(shù).ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章函數(shù) C語言是結(jié)構(gòu)化語言 它的主要結(jié)構(gòu)成分是函數(shù) 函數(shù)作為一種構(gòu)件 用以完成程序中的某個(gè)具體功能 函數(shù)允許一個(gè)程序的各個(gè)任務(wù)被分別定義和編碼 使程序模塊化 因此 設(shè)計(jì)良好的函數(shù)不僅能正確工作 而且不會對程序的其他部分產(chǎn)生副作用 本章將介紹C語言函數(shù)的設(shè)計(jì) 如何用函數(shù)分解程序的各個(gè)功能 如何用函數(shù)構(gòu)成模塊化程序 以及代碼復(fù)用的基本思想 9 1函數(shù)說明與返回值 函數(shù)由類型說明符 函數(shù)名 參數(shù)表 參數(shù)說明段和函數(shù)體五個(gè)部分組成 類型說明符定義了函數(shù)的返回值 即return語句所返回給調(diào)用者的數(shù)據(jù)類型 函數(shù)名是每個(gè)函數(shù)的惟一名稱 函數(shù)命名規(guī)則與變量相同 參數(shù)表和參數(shù)說明段是函數(shù)的外部接口 函數(shù)調(diào)用時(shí)通過參數(shù)將值傳遞給函數(shù)體內(nèi) 參數(shù)表是具體接口的個(gè)數(shù) 參數(shù)說明段是參數(shù)的數(shù)據(jù)類型定義 函數(shù)體是實(shí)現(xiàn)函數(shù)功能的代碼塊 需要用一對大括號將其包圍 return語句放置在函數(shù)體內(nèi) main 函數(shù)具備同樣的結(jié)構(gòu) 9 1 1函數(shù)的類型說明 函數(shù)的類型說明符可以是任何數(shù)據(jù)類型 包括空值型void 即不使用return語句返回任何數(shù)據(jù) 默認(rèn)情況下 函數(shù)被自動說明為整型 函數(shù)必須在第一次調(diào)用前定義 這樣編譯器才能找到該函數(shù) 或者將函數(shù)的類型說明放在首次調(diào)用之前 前置函數(shù)類型說明被稱為函數(shù)原型 9 1 2返回語句 函數(shù)的返回語句return有兩個(gè)作用 其一 結(jié)束當(dāng)前函數(shù) 調(diào)用者獲得程序控制權(quán) 其二 將計(jì)算結(jié)果傳遞給調(diào)用者 函數(shù)的結(jié)束有兩種情況 一是函數(shù)體內(nèi)所有的代碼執(zhí)行完畢 二是return語句被執(zhí)行 9 2函數(shù)的作用域規(guī)則 作用域規(guī)則是指代碼或數(shù)據(jù)的有效使用范圍 C語言將函數(shù)作為獨(dú)立的代碼塊 函數(shù)之間不能相互訪問其內(nèi)部的代碼或數(shù)據(jù) 函數(shù)間數(shù)據(jù)的傳遞只能通過接口實(shí)現(xiàn) 但是 變量的定義方法可改變函數(shù)的作用域規(guī)則 可將變量分為局部變量和全局變量兩種 本節(jié)將討論這兩種變量的使用方法 9 2 1局部變量 在函數(shù)體內(nèi)部定義的變量稱為局部變量 局部變量的作用域僅限于該函數(shù)體內(nèi) 9 2 2全局變量 全局變量的作用域?yàn)檎麄€(gè)源程序文件 文件中的所有函數(shù)或程序塊都可以引用 定義全局變量時(shí) 需將變量的聲明語句放置在所有函數(shù)外 全局變量雖然能方便地在程序的各個(gè)函數(shù)間傳遞數(shù)據(jù) 但同時(shí)也破壞了模塊的獨(dú)立性和完整性 所以應(yīng)盡量避免使用全局變量 9 2 3動態(tài)存儲變量 從變量的生存周期來分類 可將變量分為動態(tài)存儲變量和靜態(tài)存儲變量 動態(tài)存儲變量在函數(shù)調(diào)用時(shí)放入內(nèi)存 函數(shù)調(diào)用后從內(nèi)存中刪除 還有一種動態(tài)存儲變量稱之為寄存器變量 寄存器是位于CPU內(nèi)部的存儲單元 CPU讀取寄存器內(nèi)的數(shù)據(jù)極其快捷 因此 將程序中需要大量反復(fù)使用的變量設(shè)為寄存器變量可提高程序的運(yùn)行速度 9 2 4靜態(tài)存儲變量 在編譯時(shí)分配存儲空間的變量稱為靜態(tài)存儲變量 在函數(shù)退出時(shí) 靜態(tài)存儲變量依然被保留在內(nèi)存中 再次執(zhí)行同一函數(shù)會得到與上次退出時(shí)相同的數(shù)值 聲明靜態(tài)存儲變量的關(guān)鍵字為static 聲明的一般形式為 static數(shù)據(jù)類型變量名 9 3函數(shù)的調(diào)用與參數(shù) 函數(shù)通過調(diào)用獲得程序的控制權(quán) 函數(shù)的參數(shù)是調(diào)用者與函數(shù)的數(shù)據(jù)接口 函數(shù)可以定義一個(gè)或多個(gè)參數(shù) 也可以省略參數(shù) 調(diào)用時(shí)將與參數(shù)的數(shù)據(jù)類型相匹配的數(shù)據(jù)置于參數(shù)列表中 即可在函數(shù)體內(nèi)使用 參數(shù)的調(diào)用有多種形式 對函數(shù)的影響也有不同的結(jié)果 9 3 1形式參數(shù)與實(shí)際參數(shù) 形式參數(shù)是接口數(shù)據(jù)的目的地 實(shí)際參數(shù)是接口數(shù)據(jù)的來源地 函數(shù)定義時(shí)出現(xiàn)在參數(shù)列表中的參數(shù)是形式參數(shù) 函數(shù)體可通過引用形式參數(shù)獲得接口數(shù)據(jù) 函數(shù)調(diào)用時(shí)填入的參數(shù)是實(shí)際參數(shù) 實(shí)際參數(shù)由調(diào)用者提供 形式參數(shù)與實(shí)際參數(shù)的數(shù)據(jù)類型必須一致 同時(shí)還需要注意實(shí)際參數(shù)的個(gè)數(shù)和位置要與形式參數(shù)相同 9 3 2賦值調(diào)用與引用調(diào)用 賦值調(diào)用與引用調(diào)用是傳遞數(shù)據(jù)給函數(shù)的兩種形式 前者是將實(shí)際參數(shù)的數(shù)值傳遞給形式參數(shù) 后者是將實(shí)際參數(shù)的內(nèi)存地址傳遞給形式參數(shù) 賦值調(diào)用不會改變實(shí)際參數(shù)原有的數(shù)值 而引用調(diào)用則可能改變實(shí)際參數(shù)的數(shù)值 9 4遞歸 遞歸函數(shù)是能夠直接或通過另一個(gè)函數(shù)間接調(diào)用自身的函數(shù) 調(diào)用自身的方法稱為遞歸調(diào)用 遞歸調(diào)用的本質(zhì)是使用同一算法將復(fù)雜的問題不斷化簡 直到該問題解決 9 5實(shí)現(xiàn)問題 在設(shè)計(jì)函數(shù)時(shí)需要遵循一些基本原則 因?yàn)橛绊懙胶瘮?shù)的執(zhí)行效率和可用性 函數(shù)是代碼復(fù)用的基礎(chǔ) 一個(gè)健壯的函數(shù)或由函數(shù)組成的函數(shù)集可以在多個(gè)程序中使用 C語言標(biāo)準(zhǔn)庫里所存放的就是這樣的函數(shù) 這些函數(shù)被放置在頭文件中 使用時(shí)將它包含在程序內(nèi)即可 9 5 1參數(shù)和通用函數(shù) 通用函數(shù)是指能夠復(fù)用的函數(shù) 這一類函數(shù)的顯著特點(diǎn)是 只使用參數(shù)作為接口傳遞數(shù)據(jù) 如果一個(gè)函數(shù)中依賴全局變量訪問調(diào)用者的數(shù)據(jù) 在另一個(gè)程序中環(huán)境改變了 這個(gè)函數(shù)就無法運(yùn)行 因此 我們不應(yīng)該把函數(shù)建立在全局變量上 函數(shù)所需要的所有數(shù)據(jù)都應(yīng)從參數(shù)獲得 使用參數(shù)傳遞數(shù)據(jù)除了有助于函數(shù)的復(fù)用以外 還能提高代碼的可讀性 9 5 2效率 函數(shù)是C語言的基本構(gòu)件 所有的程序都是由函數(shù)組成 C語言程序執(zhí)行的入口是main 函數(shù) 當(dāng)main 函數(shù)調(diào)用子函數(shù)時(shí) 操作系統(tǒng)為子函數(shù)在內(nèi)存中建立一種稱為棧的數(shù)據(jù)結(jié)構(gòu) 將主函數(shù)的返回地址和子函數(shù)的局部變量保存在棧中 如果子函數(shù)再調(diào)用另一個(gè)子函數(shù) 那么依舊是遵循上述原則 9 6函數(shù)庫和文件 函數(shù)庫是為代碼復(fù)用建立的 將同一類型 需要在不同的程序里使用的函數(shù)放置在一起 就組成了一個(gè)函數(shù)庫 如C語言的標(biāo)準(zhǔn)庫 它集合了開發(fā)者常用的函數(shù) 開發(fā)者自行編寫的函數(shù)也可以組成函數(shù)庫 通常稱之為自定義函數(shù)庫 C語言的函數(shù)庫以源代碼的形式放在頭文件里 較大的函數(shù)庫可能會用到多個(gè)文件 因此涉及到編譯的問題 本節(jié)將討論用文件組成函數(shù)庫的問題 9 6 1程序文件的大小 C語言編譯器允許分別編譯 為每個(gè)文件生成以 o 為后綴的目標(biāo)文件 最后執(zhí)行鏈接過程生成可執(zhí)行文件 將一個(gè)程序放在一個(gè)大文件中 或者分拆成多個(gè)較小的文件 所得到的結(jié)果其實(shí)是相同的 編譯器編譯一個(gè)大文件比編譯由這個(gè)大文件拆分而成的一系列小文件所花費(fèi)的時(shí)間要長 對程序員來說 小文件更容易閱讀和理解 所以應(yīng)該把大文件拆分為一系列小文件編寫 而且如果修改程序時(shí)只修改了其中一個(gè)文件 那么編譯時(shí)也只需要重新編譯被修改過的文件 再執(zhí)行連接過程生成可執(zhí)行文件 這樣能縮短程序編譯的總時(shí)間 9 6 2分類組織文件 在開發(fā)大型程序時(shí) 很容易迷失某個(gè)具體功能點(diǎn)在源代碼中的位置 如果在程序設(shè)計(jì)的早期預(yù)先估計(jì)程序的規(guī)模 將同一類型的函數(shù)放在同一個(gè)文件中 以有意義的名字為函數(shù)和文件命名 編寫詳細(xì)的注釋 則可以最大程度避免該問題 9 6 3函數(shù)庫 函數(shù)庫由一系列函數(shù)說明文件和函數(shù)定義文件所組成 使用時(shí) 將該文件包含在自己的程序文件內(nèi) 9 7main函數(shù)的參數(shù) main 函數(shù)有兩個(gè)參數(shù) 它的形式是 main intargc char argv argc的數(shù)據(jù)類型為整型 argv的數(shù)據(jù)類型為字符型指針數(shù)組 有些程序在終端運(yùn)行時(shí) 輸入完程序文件名后可加上一些額外的運(yùn)行參數(shù) main 函數(shù)的參數(shù)即是用來向程序傳遞這些運(yùn)行參數(shù)的入口 argc參數(shù)用于記錄運(yùn)行參數(shù)的個(gè)數(shù) argv參數(shù)用于保存運(yùn)行參數(shù) 所輸入的程序名也是運(yùn)行參數(shù) 所以不輸入其他運(yùn)行參數(shù)的情況下 也會被捕獲到一個(gè)運(yùn)行參數(shù) 9 8媒體播放器 建立核心控制模塊 本章的實(shí)例分為兩個(gè)部分 第一部分通過編寫一個(gè)簡單的程序練習(xí)函數(shù)的設(shè)計(jì) 主要難點(diǎn)是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)作為函數(shù)的參數(shù)傳遞 第二部分繼續(xù)媒體播放器的設(shè)計(jì) 使用函數(shù)和偽代碼將媒體播放器的功能點(diǎn)列舉出來 并使用函數(shù)設(shè)計(jì)媒體播放器的控制指令 9 8 1通過函數(shù)傳遞參數(shù) 本例的任務(wù)是從鍵盤輸入學(xué)生的成績 計(jì)算該學(xué)生的平均分和該課程的平均分 找到所有分?jǐn)?shù)中最高值 求分?jǐn)?shù)分布的方差 程序的各個(gè)功能放在不同的函數(shù)中 使用參數(shù)傳遞所需要的數(shù)據(jù) 用以說明通過參數(shù)傳遞復(fù)雜數(shù)據(jù)結(jié)構(gòu)的方法 下面介紹該例的實(shí)現(xiàn)步驟 1 編寫預(yù)處理語句和函數(shù)原型2 編寫主函數(shù)3 編寫input stu 函數(shù)3 編寫avr stu 函數(shù)3 編寫avr cor 函數(shù)4 編寫highest 函數(shù)4 編寫s diff 函數(shù) 9 8 2建立媒體播放器核心控制模塊 媒體播放器的操作響應(yīng)由核心控制模塊發(fā)出 為了實(shí)現(xiàn)模塊化 所有用戶請求必須調(diào)用核心控制模塊 并將請求指令作為參數(shù)傳遞給核心控制模塊函數(shù) 9 9小結(jié) 本章學(xué)習(xí)了C語言的函數(shù) 介紹了函數(shù)的設(shè)計(jì)方法和工作原理 函數(shù)

溫馨提示

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

評論

0/150

提交評論