c语言指针与函数ppt,函数与指针C语言.ppt
函數與指針C語言.ppt
函數與指針 第7章 7 1概述 第7章 1 按功能劃分模塊劃分模塊的基本原則是 各模塊都要易于理解 功能盡量單一 模塊間的聯系盡量少 滿足這些要求的模塊具有以下優點 7 1 1模塊化程序結構的概念 1 模塊間的接口關系簡單 這種程序可讀性和可理解性較強 2 需要修改某一功能時 只涉及到一個模塊 不會影響到其它模塊 3 脫離程序的上 下文也能單獨驗證一個模塊的正確性 4 擴充或建立新系統時 可充分利用已有的模塊 7 1概述 第7章 2 按層次組織模塊結構化程序設計方法要求在設計程序時 按層次結構組織各模塊 在按層次組織模塊時 上層模塊只需指出 做什么 最底層的模塊才精確地描述 怎么做 例如 圖7 1所示的層次結構中 主模塊指出總任務 模塊1 模塊2 模塊3分別指出各自的子任務 模塊4 模塊5 模塊6才去精確描述 怎么做 7 1 1模塊化程序結構的概念 圖7 1按層次調用模塊 7 1概述 第7章 例7 1 簡單的函數調用 includemain 主函數 p1 調用p1函數 P2 調用p2函數 P1 再次調用p1函數 P1 函數p1打印一行 號 printf n P2 函數p2打印一行文字 printf WelcometoC n 7 1 2C語言程序的構成 運行結果為 WelcometoC 7 2函數的定義 第7章 1 C語言函數的概念函數就是用來完成一定的功能 所謂函數名就是給該功能起一個名字 如果該功能用來實現數學運算的 就是數學函數 在C語言中 往往把程序需要實現的一些功能分別編寫為若干個函數 然后把它們組合成一個完整的程序 7 2 1C語言函數的概念及分類 7 2函數的定義 第7章 2 C語言函數的分類 1 從用戶使用的角度分類 庫函數 它是由編譯系統提供的 用戶不必定義可以直接使用的函數 用戶自定義函數 用戶用來實現某種功能 本章主要學習自定義函數的編寫與應用 2 從函數完成的任務分類 有返回值函數 該類函數在結束時 將計算結果返回到主調函數 無返回值函數 該類函數運行結束時 沒有數據返回 它只是完成某一種操作 7 2 1C語言函數的概念及分類 7 2函數的定義 第7章 3 從函數的表示形式來分類 無參函數 主調函數沒有將數據傳遞給被調函數 一般用來完成某一操作 無參函數可以帶回或不帶回函數值到主調函數 有參函數 調用該類函數時 在主調函數和被調函數之間有數據傳遞 主調函數可以將數據傳遞給被調函數使用 被調函數的計算結果也可以帶回主調函數使用 7 2 1C語言函數的概念及分類 7 2函數的定義 第7章 1 無參函數定義的一般形式 7 2 2函數定義的一般形式 類型函數名 說明部分 語句 7 2函數的定義 第7章 2 有參函數定義的一般形式 7 2 2函數定義的一般形式 類型函數名 類型1形參1 類型2形參2 類型n形參n 說明部分 語句部分 7 2函數的定義 第7章 3 定義空函數在程序設計中有時會用到空函數 它的形式為 7 2 2函數定義的一般形式 類型函數名 7 3函數的參數和函數的值 第7章 在調用函數時 大多數情況下 主調函數和被調函數之間有數據傳遞關系 這就是前面提到的有參函數 在定義函數時 函數名后面的括號中的變量稱為 形式參數 簡稱 形參 在調用函數時 主調函數名后面括號中的參數 也可以是一個表達式 稱為 實際參數 簡稱 實參 7 3 1形式參數和實際參數 7 3函數的參數和函數的值 第7章 通過函數調用使主調函數得到一個值 這就是函數的返回值 函數的返回值是通過return語句來獲得的 其格式為 return 返回值表達式 或 return返回值表達式 功能 自定義函數運行結束 退出該函數 將 返回表達式 的值帶給調用函數 7 3 2函數的返回值 7 3函數的參數和函數的值 第7章 例7 2 用函數求兩個整數的最大值 程序代碼 includemain 主調函數main inta b c scanf d d 退出max函數 將變量z的值8返回給主調函數main 7 3 2函數的返回值 運行結果 7 8 maxis8 7 4函數的調用 第7章 1 調用庫函數調用庫函數時 通常在文件開頭用 include命令將調用有關庫函數時所需用的信息 包含 到本文件中來 如 標準輸入輸出庫函數用 include 數學庫函數用 include 2 調用自定義函數調用自定義函數 而且該函數與調用它的函數在同一個文件中 應在主調函數中對被調函數作聲明 說明函數類型 參數類型及個數 以便編譯系統對函數調用進行語法檢查 7 4 1函數的原型與聲明 7 4函數的調用 第7章 格式 函數名 實參表列 函數調用的執行過程 先計算每個實參表達式的值 再賦值給所對應的形參中 然后執行被調用函數體 執行完函數后 返回到調用此函數的下一條語句 繼續去執行主調程序中下面的語句 說明 1 如果是無參函數 則沒有實參列表 但括弧不能省略 2 如果實參表列包含多個實參 則各參數間用逗號隔開 實參與形參的個數應相等 類型應一致 實參與形參是按順序一一對應傳遞數據 7 4 2函數調用的一般形式 7 4函數的調用 第7章 根據函數在程序中出現的位置 大致有3種調用方式 1 函數語句把函數調用作為一個語句 如 p1 這種調用不返回函數值 只要求函數完成一定的操作 如 例7 1 2 函數表達式函數出現在一個表達式中 這時要求函數帶回一個確定的值以參加表達式的運算 如 x 2 max a b 3 函數參數一個函數作為另一個函數的實參 7 4 3函數的調用方式 7 5函數的嵌套調用 第7章 C語言定義的函數都是互相獨立的 函數間不能嵌套定義 嵌套定義是指定義一個函數時 其函數體內包含另一個函數的完整定義 但可以嵌套調用 也就是說在調用一個函數的過程中 該函數又調用另一函數 例如 f1和f2是分別定義的函數 但在調用函數f1的過程中又要調用函數f2 其調用過程如圖7 4所示 圖7 4函數嵌套調用過程 7 6函數的遞歸調用 第7章 在調用一個函數的過程中 又直接或間接地調用函數本身 稱為函數的遞歸調用 語言提供兩種形式的遞歸調用 直接遞歸調用 指函數直接調用函數本身的形式 其執行過程如圖7 5所示 間接遞歸調用 指函數調用其它函數 其它函數又調用原函數的形式 其執行過程如圖7 6所示 圖7 5直接遞歸調用圖7 6間接遞歸調用 7 6函數的遞歸調用 第7章 遞歸調用的過程可以分為兩個階段 一是從未知的向已知方向推測 二是從已知的再向未知方向回推 在有限遞歸的情況下 總會有一個遞歸的結束條件 遞歸函數的典型例子是求階乘 下面通過求階乘的函數 詳細分析遞歸過程 階乘的計算公式為 n n n 1 2 1遞歸的方法是逆推 即n 等于n n 1 而 n 1 又等于 n 1 n 2 依此類推 一直推到1 1 然后 再逆推回來即可求出結果 7 6函數的遞歸調用 第7章 例7 7 用遞歸調用 編寫求n 的程序 分析 函數fact n 的函數體中出現fact n 1 這正是函數的自身調用 主函數調用該函數計算4 第一次調用時 形參n接收的值是4 進入函數體后 由于4 0 需要調用fact n 1 即fact 3 從而又開始了第二次調用該函數過程 依此類推 直到條件n 1成立 本次函數的自調過程結束 程序控制開始逐步返回 首先返回1 的結果為1 1乘n的當前值2 以其結果2返回到上次調用函數中 這樣 以每次返回的值 乘以n的當前值的結果 作為本次調用的值返回到上次調用中 最后返回的是第一次調用fact 4 的值24 從而得到4 的計算結果 7 6函數的遞歸調用 第7章 程序代碼 intfact intn 遞歸函數 if nmain 主函數 intn p printf n scanf d 打印返回的值 運行 n 4 顯示 4 24 7 7指針與函數 第7章 7 7 2數組作為函數參數 前面介紹了用變量做函數參數 此外 數組元素也可以做函數實參 其用法與變量做函數參數相同 指針變量作為函數參數傳遞的是變量的地址 而數組名作實參和形參 傳遞的是數組的首地址 屬于指針傳遞 1 數組元素作為函數實參數組元素作為函數的實參 與變量作實參一樣 是單向傳遞 即 數值傳送 只能將數組元素的值傳遞給被調函數的形參 不能帶回變化的值 2 數組名作為函數參數數組名表示數組的首地址 即數組名本身就是指針 因此 用數組名作為函數參數 是把數組的首地址作為實參傳遞給被調用函數形參 所以是指針傳遞參數 7 7指針與函數 第7章 7 7 3返回指針的函數 一個函數可以返回一個int型 float型 char型的數據 也可以返回一個指針類型的數據 即地址 返回指針值的函數定義的一般形式為 其中 函數名前面的 號表明這是一個指針型函數 即函數的返回值是一個指針 類型標識符表示了返回的指針值的數據類型 類型標識符 函數名 形參列表 函數體 7 7指針與函數 第7章 7 7 4函數的指針和指向函數的指針變量 1 指向函數的指針變量的定義一個函數在編譯時 系統為函數代碼分配一段連續的存儲空間 這段存儲空間的起始地址 又稱入口地址 稱為這個函數的指針 函數名就是該函數所占內存區的首地址 把函數的首地址賦予一個指針變量 通過這個指針變量就可以引用該函數 指向函數的指針變量定義形式為 類型 指針變量名 這里的 類型 是指針變量所指向的函數的類型 即函數返回值的類型 7 7指針與函數 第7章 7 7 4函數的指針和指向函數的指針變量 2 用函數指針變量調用函數用函數指針變量調用函數時 只需將 指針變量名 代替函數名 在后面的括號中根據需要寫上實參 使用函數指針變量還應注意以下兩點 對指向函數的指針變量 不存在p p p i運算 應注意區分函數指針變量和返回指針的函數 這兩者在寫法和意義上的區別 3 用指向函數的指針作函數參數實現方法 函數名作為實參 指向函數的指針變量作為形參 進行函數入口地址的傳遞 這樣 通過函數地址的傳遞 在被調用函數中 調用實參傳遞過來的其他函數 7 8變量的作用域與存儲類別 第7章 7 8 1變量的作用域 所謂變量的作用域就是指變量能被有效引用的范圍 從 變量的作用域 角度來分 C語言將變量分為局部變量和全局變量 1 局部變量局部變量是在函數內部定義的變量 其作用域是從定義位置起 到函數結束 說明 1 主函數main中定義的變量 只在主函數中有效 2 不同函數中可以使用相同名字的變量 因為它們在內存中被分配不同的內存單元 3 形參也是局部變量 因為形參的作用域僅限于該函數內部 4 在一個函數內部 可以在復合語句中定義變量 這些變量只在本復合語句中有效 復合語句也稱為 分程序 或 程序塊 7 8變量的作用域與存儲類別 第7章 7 8 1變量的作用域 2 全局變量在函數之外定義的變量稱為全局變量 全局變量可以被本文件中其它函數使用 它的作用范圍是 從定義變量的位置開始到源文件結束 說明 1 設置全局變量的優點是 增加了函數間數據聯系的渠道 由于在同一文件中所有函數都能引用全局變量的值 這樣 在一個函數中改變了全局變量的值 就能影響到其他函數 相當于各函數間有直接的傳遞通道 由于函數調用只能返回一個值 因此 有時可以通過全局變量得到多個返回值 2 全局變量在整個程序執行過程中都占用存儲單元 使用全局變量過多 會降低程序的清晰性和通用性 3 在同一源文件中 外部變量與局部變量可以同名 因為它們的作用范圍內不同 所以 相互沒有影響 7 8變量的作用域與存儲類別 第7章 7 8 2變量的存儲類別 在C語言中 每一個變量或函數都有兩個屬性 數據類型和存儲類型 數據類型如int等 指的是數據的取值范圍 存儲類型指數據在內存的存儲方法 存儲方法分為兩類 靜態存儲和動態存儲 1 靜態存儲與動態存儲靜態存儲方式 程序運行期間 變量在靜態存儲區分配固定的存儲空間 動態存儲方式 程序運行期間 變量在動態存儲區根據需要動態的分配存儲空間 不同的存儲方式決定了變量的生存期 從變量的作用范圍 又可把變量分為四種 自動Auto 寄存器register 靜態static 外部extern 下面分別介紹 7 8變量的作用域與存儲類別 第7章 7 8 2變量的存儲類別 2 Auto型變量auto型變量是在函數內定義的變量 自動變量所在的函數或復合語句執行時 系統動態為相應的自動變量分配存儲單元 函數的形參也屬于auto型變量 當函數執行結束時 釋放其空間 它的作用域局限于該函數 3 Register型變量register變量又稱寄存器變量 在程序運行中 若某個變量使用頻繁 比如循環的次數為上萬次 為提高運行速度 C語言允許將局部動態變量的值 放在CPU的寄存器中 直接參加運算 不再和內存打交道 這是因為寄存器的存取速度遠高于內存 7 8變量的作用域與存儲類別 第7章 7 8 2變量的存儲類別 4 Extern型變量extern型變量是在函數外定義的變量 缺省時系統默認為外部變量 外部變量的定義位置是在所有函數體之外 當一個變量定義為 extern 型或默認存儲類型說明時 一個文件的多個函數都可以使用該外部變量 其它文件也可以使用該變量 5 static靜態變量靜態變量與auto Register型變量不同 該變量在靜態存儲區存放 所分配的存儲單元在程序運行中始終占用 靜態變量分為內部靜態變量和外部靜態變量兩種 7 8變量的作用域與存儲類別 第7章 7 8 2變量的存儲類別 6 存儲類別小結變量的存儲方式分類如下 7 9內部函數和外部函數 第7章 7 9 1內部函數 如果一個函數只能被本文件中其它函數所調用 則稱為內部函數 內部函數稱為靜態函數 使用內部函數 可以使函數只局限于所在文件 7 9內部函數和外部函數 第7章 7 9 2外部函數 在函數定義時 如果在類型的前面加上關鍵字extern 則表示此函數是外部函數 可供其他文件調用 如果在定義函數時省略extern 則隱含為外部函數 本書前面所用的函數都作為外部函數 通常 當函數調用語句與被調函數不在同一文件時 應當在調用語句所在函數說明部分用extern說明所調用的函數是外部函數 7 10程序舉例 第7章 排序算法有多種 比較經典的有冒泡法和選擇法 冒泡法在第六章中已經進行了詳細的分析 下面我們用選擇法來進行編程 例7 20 用選擇法對10個學生的成績由小到大排序 并計算平均成績 排序過程及求平均值均由函數來實現 分析 所謂選擇法就是先找最小值 其排序操作過程是 先將10個數中的第1個數a 0 與后面的9個數比較 若大于后面的數則進行對換 第一輪結束 a 0 中是最小值 再將a 1 與它后面的8個數進行比較 直到a 1 是剩余9個數中的最小值 每比較一輪 找出未經排序的數中最小的一個 共應比較9輪 7 10程序舉例 第7章 下面以七個數為例來說明選擇排序的步驟 A 0 a 1 a 2 a 3 a 4 a 5 a 6 810097112原數列 未排序時的情況 010897112將7個數中最小數0與a 0 對調 028971110將剩余6個數中的最小數2與a 1 對調027981110將剩余5個數中的最小數7與a 2 對調027891110將剩余4個數中的最小數8與a 3 對調027891110將剩余3個數中的最小數9與a 4 對調027891011將剩余2個數中的最小數10與a 5 對調 完成全部排序 7 10程序舉例 第7章 程序代碼 排序函數 voidsort intarray intn inti j t for i 0 iarray j 如后面的數小于前面的數 進行調換 t array i array i array j array j t 7 10程序舉例 第7章 程序代碼 求平均值函數 ave intarray intn inti average 0 for i 0 i n i average average array i return average 10 7 10程序舉例 第7章 主函數 includemain inta 10 i t printf 請輸入10個成績 n for i 0 i 10 i 輸入10個數 顯示輸入的個數 scanf d E mail dutpgz 網址 地址 大連市軟件園路80號 大連理工大學出版社 謝謝觀看
總結
以上是生活随笔為你收集整理的c语言指针与函数ppt,函数与指针C语言.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-03-25 74LS160计数
- 下一篇: 制作属于自己的安全工具包