三、函式的呼叫
四、函式的宣告和定義
五、函式遞迴
1、庫函式
為了支援可移植性和提高程式的效率,c語言的基礎庫中提供了一系列庫函式,滿足一些基礎功能,他們不是業務性的**,在開發的過程中每個程式設計師都可能用的到,方便程式設計師進行軟體開發。
c語言常用庫函式:
使用庫函式,必須包含#include對應的標頭檔案
庫函式學習:www.cplusplus.com2、自定義函式
函式的組成:
ret_type fun_name
(para1,*)
/*ret_type:返回值型別
fun_name:函式名
para1,*:形參列表
*/
c語言預設返回值是整形,函式傳參要發生形參例項化,這個過程要發生值拷貝。(形參的例項化之後其實相當於實參的乙份臨時拷貝)
真實傳給函式的引數,叫實參。實參可以是:常量,變數,表示式,函式等。無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳給形參。
形式引數是指函式名後括號中的變數,因為形式引數只有在函式在被呼叫的過程中才例項化(分配記憶體單元),所以叫形式引數。形式引數當函式呼叫完成之後就自動銷毀了。因此形式引數只在函式中有效。
函式傳參必定形成臨時變數,臨時變數的形成是在函式被呼叫時,但正式的**執行之前。
形參例項化的順序是從右向左
例:寫乙個函式可以交換兩個整形變數的內容
#include
#include
//每呼叫一次,就會將num的值加1
void
add(
int*cp)
//交換兩個整形變數的內容
void
swap1
(int x,
int y)
void
swap2
(int
*px,
int*py)
intmain()
int num1 =1;
int num2 =2;
swap1
(num1, num2)
;printf
("swap1:num1 = %d num2 = %d\n"
, num1, num2)
;swap2
(&num1,
&num2)
;printf
("swap2:num1 = %d num2 = %d\n"
, num1, num2)
;system
("pause");
return0;
}
結果:
swap1:num1 =
1 num2 =
2swap2:num1 =
2 num2 =
1請按任意鍵繼續.
..
例:寫乙個函式,每呼叫一次這個函式,就會將num的值增加1。
#include
#include
//每呼叫一次,就會將num的值加1
void
add(
int*cp)
intmain()
system
("pause");
return0;
}
呼叫函式,形成棧幀;
函式返回,棧幀銷毀;
形成和釋放棧幀是有成本的(時間和空間)。
函式宣告:
函式宣告
#pragma once
#ifndef _ test_h _
#define _ test_h _
//函式的宣告
intadd
(int x,
int y)
;#endif
// _ test_h _
變數宣告
extern
int g_val;
函式定義:
函式定義只能進行一次,但宣告可以多次進行
程式呼叫自身的程式設計技巧稱為遞迴(recursion).
遞迴的兩個必要條件: 遞迴
優點:**簡潔
缺點:效率低(原因:遞迴要多次進行函式呼叫,每次函式呼叫都會形成和釋放棧幀,而棧幀的形成和釋放是有成本的【時間和空間】)
臨時變數儲存在棧區,棧:先進後出,後進先出
C語言函式的遞迴
1.遞迴條件 採用遞迴方法來解決問題,必須符合以下三個條件 1 可以把要解決的問題轉化為乙個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的物件有規律地遞增或遞減。說明 解決問題的方法相同,呼叫函式的引數每次不同 有規律的遞增或遞減 如果沒有規律也就不能適用遞迴呼叫。2 可以應用...
c語言函式 遞迴
函式的遞迴可以簡單的理解為迴圈,但他和迴圈是不一樣的。函式的一次遞迴呼叫相當於一次迴圈。一般情況下,迴圈要比遞迴計算的時間要快一些 函式的遞迴是在函式內呼叫自己,滿足限制條件後,就會返回到上乙個函式,知道返回到最初的函式 遞迴的呼叫條件 1 限制條件 滿足這個條件,遞迴將不再進行。2 每次的遞迴呼叫...
遞迴函式的使用 以C 語言為例
首先我來談一下遞迴的定義 遞迴過程一般通過函式或子過程來實現。遞迴方法 在函式或子過程的內部,直接或者間接地呼叫自己的演算法。可以簡單的表示成fun r 當然這個遞迴是個死迴圈,永遠不停的遞迴,所以對於遞迴,必須有乙個出口,用來結束遞迴函式的呼叫,並返回結果,類似於迴圈結構的終止條件。所以遞迴和迴圈...