C語言 (八)函式

2022-09-08 12:09:12 字數 3258 閱讀 4726

知識點:

1.函式基礎

2.函式引數和返回值

3.形參和實參,變數的型別

4.函式宣告

5.函式遞迴

*************************=

一、函式基礎

函式的作用:封裝乙個常用的功能

定義函式的步驟:

1>明確函式的作用,起乙個有意義的名稱

2>確定函式的引數:想清楚呼叫函式的時候是否需要傳入外界的一些資料

3>確定函式的返回值:想清楚函式呼叫完畢後是否需要返回乙個值給函式呼叫者

1.函式的定義格式

返回值型別函式名(引數列表)

(1)功能函式

// 函式可以沒有形參

play()

(2)返回值,引數

形參:定義函式的時候,函式後面()中的變數

實參:呼叫函式的時候,傳進去的值

#include 

double **erage(int v1, int

v2) // 變數v1、v2稱為「形式引數」,簡稱「形參」。 ()中的內容可以稱為「形參列表」

//任何c語言程式預設情況下,只會執行main函式

intmain()

建議:以後盡量把常用的**\功能封裝到乙個函式裡面去,這樣可以提高**重用率,可以提高可擴充套件性

2.函式作用

1)使程式結構清晰簡潔

2)部分**重複利用降低**冗餘

3)獨立的工作內容和模組

3.函式的分類

使用角度分類:

ascii c89 c99 c11

1)標準c庫函式,由系統實現好的一些列功能函式

如:printf, scanf, fabs, labs…

除c庫以外的函式稱為

第三方函式

2)使用者自定義函式,由使用者自定義的功能函式

從函式形式分類:

1)無參函式 void

2)有參函式

3)有返回值 對應型別

4)無返回值 void

4.函式說明

1)乙個程式有若干個檔案,每個檔案有若干個函式組成

2)c程式由main函式開始,也從main函式結束

3)源程式中的所有函式在結構上是平行的,互相獨立的

4)main函式可以呼叫其他函式,函式之間可以相互呼叫

*************************==

函式引數和返回值

2)呼叫過程中實參和形參

3.如果沒有引數時一般將引數列表置空

沒有引數時,引數列表一般填寫void

3.return 作用分析

1)當函式需要有返回值的時候,用來將結果返回

2)思考:如果函式沒有明確返回值的時候,是否可以使用?   見上得功能函式

3)return 的另外乙個作用是提前結束該函式,並且返回到函式呼叫者處,return後的**不會被執行

*************************==

形參和實參關係

1.例子:交換兩數

2.引數傳遞的方式和過程

1)值傳遞

2)位址傳遞

*************************==

全域性變數和區域性變數

全域性變數:共享資料

1.變數的分類

1)函式引數和內部變數稱為區域性變數

2)在函式外部的變數稱為全域性變數

2.作用域,生命週期(變數有效範圍)

1)區域性變數的作用域為當前函式,從變數開始到函式結束

2)全域性變數的作用域為所有檔案,從變數開始到程式結束

3.生命週期(變數的有效時間)

1)只在函式執行期間有效,一旦函式執行完畢後,變數將會被系統銷毀

2)全域性變數在整個程式執行期間有效,直到程式退出才會被系統銷毀

4.引數遮蔽

區域性變數遮蔽全域性變數

區域性變數和全域性變數的變數名一致

*************************==

函式宣告

1.函式宣告的作用

1)讓呼叫者知道如何呼叫

2)讓編譯器在編譯階段判斷函式呼叫是否正確

思考:函式宣告是否有必要?如果沒有宣告會如何(從引數和返回值方面思考)

2.宣告方式

宣告了函式的名字,引數個數和型別,返回值型別

*************************==

函式遞迴

例子:從前有座山…

1.什麼是遞迴

函式呼叫自身的過程

2.遞迴作用

遞迴經常被用於解決電腦科學的問題。

3.應用場合

(1)資料的定義是按遞迴定義的。(fibonacci函式)

(2)問題解法按遞迴演算法實現。(回溯)

(3)資料的結構形式是按遞迴定義的。

(樹的遍歷,圖的搜尋)

4.例項:

1)計算1+2+3+…+n

練習:1.用函式遞迴計算1*2*3*…*n的值

2.用函式遞迴輸入10進製,輸出2進製 1010

2)用函式遞迴計算斐波那切數列

1>示例:通過迴圈實現斐波那切數列

2> 通過遞迴實現

5.遞迴缺點

1)遞迴演算法解題相對常用的演算法如普通迴圈等,執行效率較低。

因此,應該盡量避免使用遞迴,除非沒有更好的演算法或者某種特定情況比

遞迴更為適合的時候。

2)在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。

遞迴次數過多容易造成棧溢位等。

補充:// 終端上用control+x可以退出死迴圈

// 函式呼叫自己本身可能會出現死迴圈

// 函式呼叫自己本身,稱為「遞迴」

C 語言筆記系列之八 建構函式

1.建構函式 作用 建立物件的時候,由系統自動完成物件的初始化工作,每建立乙個物件時,系統將自動呼叫該物件的建構函式。乙個物件若未設定建構函式,則系統會自動新增乙個無參無操作的建構函式,每個物件完成建立時必須呼叫建構函式。2.建構函式的表示 1 建構函式的函式名與其類名同名。2 建構函式是類的成員函...

c語言第八章函式

第八章函式 一 函式定義的一般形式 1.無參函式 型別識別符號 函式名 2.有參函式 型別識別符號 函式名 形式引數表列 二 函式引數和函式返回值 1.形參 在定義函式時函式名後面括號中的變數名 實參 主函式在呼叫乙個函式時,函式名後面括號中的引數 2.引數傳遞方式 值傳遞 單 指標傳遞 3.形參和...

C語言 八 陣列

一維陣列定義與使用 int array 10 定義乙個一維陣列,名字叫array,一共有10個元素,每個元素都是int型別的 array 0 20 array 1 30 array 9 80 陣列索引是從0開始的。陣列在記憶體的儲存方式 陣列在記憶體中就是一段連續的空間,每乙個元素的型別是一樣的。一...