標籤:
一、 什麼是函數
l 任何一個C語言程式都是由一個或者多個程式段(小程式)構成的,每個程式段都有自己的功能,我們一般稱這些程式段為“函數”。所以,你可以說C語言程式是由函數構成的。
l 比如你用C語言編寫了一個MP3播放器程式,那麼它的程式結構如所示:
二、 函數的定義1. 定義函數的目的
l 將一個常用的功能封裝起來,方便以後調用
2. 定義函數的步驟
l 函數名:函數叫什麼名字
l 函數體:函數是幹啥的,裡麵包含了什麼代碼
3. 格式
l 固定格式(很多語言的函數都是這麼寫的)
傳回值類型 函數名(形式參數列表)
{
函數體
}
l 舉例
定義一個函數,計算兩個整數的和
sum(int a, int b)
{
int c = a + b;
}
三、 函數調用
l sum(10, 11); 引出傳回值
l 說明函數的調用過程
l 簡述return的作用
四、 函數的參數
- 形參和實參的基本概念
- 形參個數和實參一致:sum(10, 11, 12)
- 參數的傳遞是值傳遞
- 參數名不能跟函數內的局部變數同名
- 函數可以沒有參數:設計一個函數返回PI
五、 函數的傳回值
- 傳回值的基本概念、return的作用
- void
- return
l void可以省略return
l 可以多次使用return
l return後面不能有其他語句
- 函數的弱文法
l 如果沒有寫傳回值類型,預設是int
l 如果寫了傳回值,可以不返回
l 調用一個沒有定義過的函數
六、 定義函數的步驟
- 明確函數作用,起一個有意義的函數名稱
- 明確函數的參數和傳回值
- 舉例:
l 求兩個整數的和
l 列印一條橫線
l 列印N條橫線
七、 函數注意
l 不能嵌套定義函數
l 死迴圈調用,自己調用自己
l 不能重複定義、可以重複聲明
八、 函數的補充1. main函數
l 傳回值:0,正常退出;1,異常退出
2. printf函數
l #include
l 傳回值:字串的長度
九、 習題
- 編寫一個函數double avr(int a, int b),計算a和b的平均值
- 編寫一個函數int pows(int base, int n)返回base的n次方
- 編寫一個函數int pieAdd(int n),計算1+2+3+……+n的值並返回。比如pieAdd(3)的傳回值是1+2+3=6
十、 函數的聲明
- 函數的定義順序
- 函數的聲明作用:聲明和定義,類似於身份證和人的關係,編譯買機票、連結登機
- 只有函式宣告、沒有定義,編譯警告、連結報錯
十一、 .h檔案和.c檔案的分工
- 單檔案的壞處
l 一個檔案的內容太多,不利於閱讀、調試
l 多人修改同一個檔案出問題
l 公司裡面是團隊合作
- 將sum函數抽取到另一個.c檔案中
l 先直接調用sum函數,編譯警告、連結main.c錯誤
l #include “sum.c” , 編譯連結main.c,運行成功(畫圖分析.o檔案中的東西)
l 如果avr.c中使用sum.c,編譯連結main.c,運行程式(畫圖分析出錯原因)
- 在其他檔案中聲明sum函數
l int sum(int,int);
l 編譯連結main.c
l 編譯連結sum.c
l 編譯連結main.c sum.c,運行成功
l avr.c利用一樣的方法
- 將int sum(int,int)抽取到另外一個檔案中
l 不抽取聲明的壞處:增加新的函數了
l 抽取到.c檔案中?開發工具會將所有的.c進行編譯連結
l 抽取到.h檔案中
- 抽取步驟總結
l .c檔案寫函數的定義
l .h檔案寫函數的聲明
l 要想用我的函數,請包含我的.h檔案
l 好處分析
十二、 #include1. 預先處理指令簡介2. #include的作用
純粹是檔案拷貝
3. #include <stdio.h>
l stdio.h中有什嗎?連結的時候做了什麼事情
l <>和””的區別
4. #include的路徑問題
l 預設是同路徑,其他問題以後再討論
c中的函數