《函數(shù)和程序結(jié)構(gòu)》PPT課件.ppt
《《函數(shù)和程序結(jié)構(gòu)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《函數(shù)和程序結(jié)構(gòu)》PPT課件.ppt(16頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
本章的主要內(nèi)容包括 C語言函數(shù)的概念 如何調(diào)用C提供的庫函數(shù) 如何自己來定義函數(shù) 并調(diào)用這些函數(shù) 中的數(shù)據(jù)表示 多文件組成C程序的方法 變量生存期作用域 C語言的數(shù)學(xué)函數(shù) 第四章函數(shù)和程序結(jié)構(gòu) 回首頁 問題 1 程序越來越長(zhǎng) 難于理解且可讀性下降 2 重復(fù)代碼增多 某段程序可能被執(zhí)行多次 3 某一問題中的代碼 無法在其它同類問題中再用 必須重復(fù)原來的設(shè)計(jì)編碼過程 函數(shù)是一種機(jī)制 能夠有效地分解復(fù)雜的描述 控制程序規(guī)模和復(fù)雜性 需要抽象成函數(shù)的程序段 1 功能獨(dú)立 具有獨(dú)立邏輯意義的程序段 2 重復(fù)出現(xiàn)的代碼段函數(shù)機(jī)制提供的好處 1 函數(shù)可以被多次調(diào)用 減少程序長(zhǎng)度 保持函數(shù)意義的一致性 2 增加程序可讀性 3 模塊化 結(jié)構(gòu)化更強(qiáng) 兩種觀點(diǎn) 從函數(shù)外部調(diào)用者的角度 從函數(shù)內(nèi)部實(shí)現(xiàn)者的角度 4 1概述 C程序中調(diào)用庫函數(shù)需要兩步 1 使用include命令指出關(guān)于庫函數(shù)的相關(guān)定義和說明 include命令必須以 開頭 系統(tǒng)提供的頭文件以 h作為文件后綴 文件名用一隊(duì)尖括號(hào)或一對(duì)雙撇號(hào) 括起來 include開頭的程序行不是C語句 末尾不加 號(hào) 2 調(diào)用標(biāo)準(zhǔn)庫函數(shù)調(diào)用庫函數(shù)的形式為 函數(shù)名 參數(shù)表 1 表達(dá)式中調(diào)用 函數(shù)是表達(dá)式的一個(gè)運(yùn)算對(duì)象 如y z sin x 0 5 2 作為獨(dú)立語句 可看作表達(dá)式語句如printf d n a 4 2庫函數(shù) C語言中定義函數(shù)的一般形式為 函數(shù)返回值類型名函數(shù)名 類型名形參1 類型名形參2 頭部 說明部分 函數(shù)體 語句部分 return語句的形式如下 return表達(dá)式 或return 表達(dá)式 或return return的作用 退出函數(shù) 并帶回函數(shù)值 4 3函數(shù)定義 4 4 1函數(shù)的調(diào)用函數(shù)調(diào)用的形式為 函數(shù)名 實(shí)際參數(shù)列表 調(diào)用函數(shù)時(shí)要注意以下幾點(diǎn) 1 調(diào)用名字必須與定義名字完全一致 2 實(shí)參個(gè)數(shù)與形參個(gè)數(shù)一致 類型一致 如不匹配 進(jìn)行自動(dòng)轉(zhuǎn)換 不兼容的賦值轉(zhuǎn)換 某些類型之間不能進(jìn)行賦值 如指針和浮點(diǎn)類型之間 并不給出錯(cuò)信息 程序繼續(xù)運(yùn)行 但結(jié)果不正確 3 可以嵌套調(diào)用 如a函數(shù)調(diào)用b函數(shù) b函數(shù)中又調(diào)用c函數(shù) C語言規(guī)定所有的函數(shù)都是互相平行 獨(dú)立的 不容許嵌套定義 在一個(gè)函數(shù)的定義中 包含另一個(gè)函數(shù)的完整定義 但可以嵌套調(diào)用 4 4函數(shù)的調(diào)用和說明 4 4 2函數(shù)說明在調(diào)用之前對(duì)函數(shù)進(jìn)行說明 稱為函數(shù)的原型說明 形式如下 類型名函數(shù)名 參數(shù)類型列表或參數(shù)列表 形式上可理解為函數(shù)定義的首部加分號(hào) 它的作用是檢查調(diào)用時(shí)參數(shù)的個(gè)數(shù)和類型正確與否 因此參數(shù)列表中 只需類型名即可 如有形參名 可以是任意的用戶標(biāo)識(shí)符 不一定要和函數(shù)定義的形參相同 4 4函數(shù)的調(diào)用和說明 C語言中 調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞有三種方式 1 實(shí)參和形參之間數(shù)據(jù)傳遞 2 return語句把函數(shù)值返回調(diào)用函數(shù) 3 通過全局變量 全局變量在本章稍后討論 C語言中實(shí)參和形參之間數(shù)據(jù)傳遞的方式叫 值傳遞 數(shù)據(jù)只能從實(shí)參單向傳遞給形參 函數(shù)調(diào)用時(shí) 首先計(jì)算實(shí)參表達(dá)式的值 求出的值分別賦給對(duì)應(yīng)的形參 進(jìn)入函數(shù)體執(zhí)行 形參本身就是局部于函數(shù)的變量 調(diào)用時(shí)接收實(shí)參的值 函數(shù)內(nèi)部對(duì)形參的賦值與實(shí)參變量毫無關(guān)系 實(shí)參變量的值不會(huì)被改變 實(shí)參與形參傳遞值時(shí) 隱含著可能的轉(zhuǎn)換 如轉(zhuǎn)換不能進(jìn)行 編譯時(shí)產(chǎn)生類型錯(cuò)誤 C的函數(shù)調(diào)用機(jī)制很簡(jiǎn)單 值傳遞是C語言實(shí)參形參結(jié)合的唯一方法 續(xù)章節(jié)中 我們會(huì)看到數(shù)組名和指針做函數(shù)參數(shù)的情形 它們進(jìn)行實(shí)參形參結(jié)合的方式離不開值傳遞這個(gè)本質(zhì) 4 5調(diào)用函數(shù)和被調(diào)函數(shù)的數(shù)據(jù)傳遞 遞歸函數(shù)是指在函數(shù)執(zhí)行過程中 直接或間接調(diào)用函數(shù)本身的函數(shù) 前者稱簡(jiǎn)單遞歸 后者稱間接遞歸 遞歸程序的執(zhí)行過程遞歸函數(shù)的特點(diǎn) 有一個(gè)明確的結(jié)束遞歸的條件 遞歸函數(shù)的效率遞歸與遞推的關(guān)系4 7函數(shù)實(shí)例 4 6遞歸函數(shù) 4 8 1程序結(jié)構(gòu)C語言規(guī)定部不允許在一個(gè)函數(shù)的內(nèi)部定義另一個(gè)函數(shù) 這樣 所有函數(shù)都定義在程序的表層 整個(gè)程序的結(jié)構(gòu)比較簡(jiǎn)單 程序結(jié)構(gòu)討論C程序函數(shù)及數(shù)據(jù) 變量定義的組織方法 尤其是需要多個(gè)文件組織程序時(shí)的程序單元 內(nèi)容的組織問題 4 8 2變量的作用域和存在期在程序中定義一個(gè)變量時(shí)有幾個(gè)方面的含義 1 給變量一個(gè)名字 在程序中通過名字可以操作該變量的存儲(chǔ)空間 進(jìn)行取值和賦值 2 定義了該變量存儲(chǔ)空間中數(shù)據(jù)的存在形式 范圍和運(yùn)算 3 程序中哪些地方可以使用該變量 4 程序運(yùn)行過程中 該變量的存儲(chǔ)空間什么時(shí)候分配和撤消 4 8變量的作用域和生存期 4 8 2變量的作用域和存在期變量的作用域 源程序中的某一部分 在這個(gè)范圍里 變量定義是有效的 可以使用該變量的名字進(jìn)行與該變量有關(guān)的操作每個(gè)變量都有一個(gè)確定 作用域 由變量定義出現(xiàn)的位置確定 作用域講變量的作用范圍 一個(gè)定義的作用域是源程序中的一段 可以從源程序正文中把有關(guān)的一段劃出來 因此作用域是靜態(tài)概念 與程序執(zhí)行過程無干 存在期 變量在程序中存在的那段時(shí)期稱為該變量的 存在期是動(dòng)態(tài)概念 講的是程序執(zhí)行的一段時(shí)期 在一個(gè)變量的存在期里 它所占的存儲(chǔ)單元一直保持 只要不對(duì)變量重新賦值 單元中的值就保持不變 內(nèi)存中供程序使用的存儲(chǔ)空間分為三部分 程序區(qū) 靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū) 4 8變量的作用域和生存期 4 8 2變量的作用域和存在期存儲(chǔ)類別指的是變量在內(nèi)存中的存儲(chǔ)位置 有靜態(tài)和動(dòng)態(tài)兩種存儲(chǔ)類別 具體有四種與存儲(chǔ)類別有關(guān)的說明符 auto 自動(dòng) static 靜態(tài) register 寄存器 extern 外部 這些說明符通常與類型名一起出現(xiàn) 可以放在類型名的左邊 也可以放在類型名的右邊 前三種存儲(chǔ)類別的聲明和定義連用 不能分開 4 8 2 1全局變量的作用域和存在期在函數(shù)之外任意位置定義的變量 稱全局變量 也叫外部變量 它的作用域?yàn)閺亩x變量的位置開始到本源文件結(jié)束 全局變量只有靜態(tài)一種存儲(chǔ)類別 它的存在期是整個(gè)程序的運(yùn)行期間 討論全局變量定義和使用時(shí)的注意事項(xiàng)討論在不同的函數(shù)間使用同一個(gè)全局變量進(jìn)行通信的特點(diǎn)及利弊 討論使用extern和static兩種說明符定義全局變量的不同點(diǎn) 4 8變量的作用域和生存期 4 8 2變量的作用域和存在期4 8 2 2局部變量的作用域和存在期局部變量是在一個(gè)函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量 只在函數(shù)或復(fù)合語句體范圍內(nèi)有效 在此函數(shù)或復(fù)合語句體外不能使用這些變量 可以使用auto 自動(dòng) static 靜態(tài) register 寄存器 說明符 1 auto變量局部變量定義時(shí)使用auto說明符或沒有指定存儲(chǔ)類 系統(tǒng)就認(rèn)為所定義的變量具有自動(dòng)類別 系統(tǒng)對(duì)自動(dòng)變量是動(dòng)態(tài)分配存儲(chǔ)空間的 數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中 局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前 自動(dòng)變量的作用域是從定義的位置起 到函數(shù)體或復(fù)合體結(jié)束為止 它的存儲(chǔ)單元在進(jìn)入這些局部變量所在的函數(shù)體 或復(fù)合體 時(shí)生成 退出其所在函數(shù)體 或復(fù)合體 時(shí)消失 這就是自動(dòng)變量的存在期 當(dāng)再次進(jìn)入函數(shù)體 或復(fù)合體 時(shí) 系統(tǒng)將為它們另行分配存儲(chǔ)單元 因此 變量的值不可能被保留 討論使用自動(dòng)變量的優(yōu)點(diǎn) 4 8變量的作用域和生存期 4 8 2變量的作用域和存在期4 8 2 2局部變量的作用域和存在期2 register變量寄存器變量也是自動(dòng)變量 它與自動(dòng)變量的區(qū)別僅在于 用register說明的變量建議編譯程序?qū)⒆兞康闹当A粼贑PU的寄存器中 而不象一般變量那樣 占內(nèi)存單元 局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前 討論寄存器變量的特點(diǎn)和使用注意事項(xiàng) 3 static變量在函數(shù)體 或復(fù)合體 內(nèi)部用static說明的變量 稱靜態(tài)局部變量 靜態(tài)局部變量的作用域和自動(dòng)變量 寄存器變量一樣 但其存在期與它們有本質(zhì)的區(qū)別 要一直延長(zhǎng)到程序運(yùn)行結(jié)束 靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)占據(jù)永久性的存儲(chǔ)單元 函數(shù)退出后下次再進(jìn)入該函數(shù) 靜態(tài)局部變量仍使用原來的存儲(chǔ)單元 討論靜態(tài)變量的特點(diǎn)和使用注意事項(xiàng) 4 8變量的作用域和生存期 外部變量 靜態(tài)變量 存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū) 的定義在程序開始前已經(jīng)完成 其初始化也在程序執(zhí)行前完成 且只進(jìn)行一次 對(duì)初始化表達(dá)式有嚴(yán)格的限制 只能使用不需要執(zhí)行程序 在編譯階段 就能求出一個(gè)常量值的表達(dá)式 對(duì)外部變量 靜態(tài)變量進(jìn)行初始化的方法是 直接用字面量或用字面量 符號(hào)常量及基本運(yùn)算符號(hào)構(gòu)造表達(dá)式 不能包括各種涉及賦值的運(yùn)算 如 等 如果在定義時(shí)不寫初始化 則系統(tǒng)建立時(shí)自動(dòng)初始化為0 對(duì)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)的局部變量來說 其存儲(chǔ)單元是程序執(zhí)行過程中在調(diào)用對(duì)應(yīng)函數(shù)或復(fù)合體時(shí)動(dòng)態(tài)分配的 對(duì)初始化表達(dá)式形式?jīng)]有限制 符合類型約束即可 由于每次調(diào)用后存儲(chǔ)單元已釋放 下次調(diào)用時(shí)又重新另分配存儲(chǔ)單元 因此 每次建立時(shí)均需重新初始化 如果定義時(shí)不寫初始化 所分配單元中的值是不確定的 此時(shí) 程序在使用該變量前 一定要有使變量存儲(chǔ)單元賦值的操作 否則 變量的值是不確定的 許多編譯系統(tǒng)對(duì)這類問題會(huì)提出警告 4 8 3變量初始化 討論內(nèi)部函數(shù)和外部函數(shù)的特點(diǎn) 使用extern和static說明符的方法 使用內(nèi)部函數(shù)和外部函數(shù)的好處 4 9多文件程序的組織和調(diào)試方法4 9 1多文件程序的組織方法討論教材中關(guān)于多文件程序組織方法的5點(diǎn)指導(dǎo)意見4 9 2多文件程序的運(yùn)行調(diào)試方法 1 編輯源文件 2 建立項(xiàng)目文件 3 打開項(xiàng)目文件 4 編譯連接 5 執(zhí)行 4 8 4內(nèi)部函數(shù)和外部函數(shù) 第四章函數(shù)和程序結(jié)構(gòu) 本章主要知識(shí)點(diǎn) C語言關(guān)于函數(shù)的規(guī)定 定義方法 說明規(guī)定 返回值 函數(shù)返回和函數(shù)調(diào)用 函數(shù)之間參數(shù)傳遞的規(guī)定 形參與實(shí)參的對(duì)應(yīng)關(guān)系 參數(shù)傳遞方式 void型函數(shù) 變量的存儲(chǔ)類型 變量存在期與作用域的概念 4種存儲(chǔ)變量類型的說明方式 特點(diǎn)和使用范圍 不同存儲(chǔ)類型變量在使用時(shí)的區(qū)別 變量的初始化方法 在函數(shù)間使用外部變量傳遞數(shù)據(jù)的規(guī)定 多文件程序的組織和實(shí)現(xiàn)方法 常見庫函數(shù)的使用方法 掌握本章內(nèi)容的關(guān)鍵是理解函數(shù)的參數(shù)傳遞機(jī)制及變量作用域和存在期的概念 回本章首頁- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 函數(shù)和程序結(jié)構(gòu) 函數(shù) 程序結(jié)構(gòu) PPT 課件
鏈接地址:http://www.3dchina-expo.com/p-6274243.html