函式是一段可以重複使用的**,用來獨立地完成某個功能,它可以接收使用者傳遞的資料,也可以不接收。接收使用者資料的函式在定義時要指程式設計客棧明引數,不接收使用者資料的不需要指明,根據這一點可以將函式分為有參函式和無參函式。
將**段封裝成函式的過程叫做函式定義。
如果函式不接收使用者傳遞的資料,那麼定義時可以不帶引數。如下所示:
datatype functionname()
例如,定義乙個函式,計算從 1 加到 100 的結果:
int sum()
return sum;
}累加結果儲存在變數sum中,最後通過return語句返回。sum 是 int 型,返回值也是 int 型別,它們一一對應。
return是c語言中的乙個關鍵字,只能用在函式中,用來返回處理結果。
將上面的**補充完整:
#include
int sum()
return sum;
}int main()
執行結果:
the sum is 5050
函式不能巢狀定義,main 也是乙個函式定義,所以要將 sum 放在 main 外面。函式必須先定義後使用,所以 sum 要放在 main 前面。
注意:main 是函式定義,不是函式呼叫。當可執行檔案載入到記憶體後,系統從 main 函式開始執行,也就是說,系統會呼叫我們定義的 main 函式。
無返回值函式
有的函式不需要返回值,或者返回值型別不確定(很少見),那麼可以用 void 表示,例如:
void hello()
void是c語言中的乙個關鍵字,表示「空型別」或「無型別」,絕lmpslalu大部分情況下也就意味著沒有 return 語句。
如果函式需要接收使用者傳遞的資料,那麼定義時就要帶上引數。如下所示:
datatype functionname( datatype1 param1, datatype2 param2 ... )
datatype1 param1, datatype2 param2 ...是引數列表。函式可以只有乙個引數,也可以有多個,多個引數之間由,分隔。引數本質上也是變數,定義時要指明型別和名稱。與無參函式的定義相比,有參函式的定義僅僅是多了乙個引數列表。
資料通過引數傳遞到函式內部進行處理,處理完成以後再通過返回值告知函式外部。
更改上面的例子,計算從 m 加到 n 的結果:
int sum(int m, int n)
return sum;
}引數列表中給出的引數可以在函式體中使用,使用方式和普通變數一樣。
呼叫 sum() 函式時,需要給它傳遞兩份資料,乙份傳遞給 m,乙份傳遞給 n。你可以直接傳遞整數,例如:
int result = sum(1, 100); //1傳遞給m,100傳遞給n
也可以傳遞變數:
int begin = 4;
int end = 86;
int result = sum(begin, end); //begin傳遞給m,end傳遞給n
也可以整數和變數一起傳遞:
int num = 33;
int result = sum(num, 80); //num傳遞給m,80傳遞給n
函式定義時給出的引數稱為形式引數,簡稱形參;函式呼叫時給出的引數(也就是傳遞的資料)稱為實際引數,簡稱實參。函式呼叫時,將實參的值傳遞給形參,相當於一次賦值操作。
原則上講,實參的型別和數目要與形參保持一致。如果能夠進行自動型別轉換,或者進行了強制型別轉換,那麼實參型別也可以不同於形參型別,例如將 int 型別的實參傳遞給 float 型別的形參就會發生自動型別轉換。
將上面的**補充完整:
#include
int sum(int m, int n)
return sum;
}int main()
執行結果:
t程式設計客棧he sum from 5 to 86 is 3731
定義 sum() 時,引數 m、n 的值都是未知的;呼叫 sum() 時,將 begin、end 的值分別傳遞給 m、n,這和給變數賦值的過程是一樣的,它等價於:
m = begin;
n = end;
強調一點,c語言不允許函式巢狀定義;也就是說,不能在乙個函式中定義另外乙個函式,必須在所有函式之外定義另外乙個函式。main() 也是乙個函式定義,也不能在 main() 函式內部定義新函式。
下面的例子是錯誤的:
#include
void func1()
}int main()
有些初學者認為,在 func1() 內部定義 func2(),那麼呼叫 func1() 時也就呼叫了 func2(),這是錯誤的。
正確的寫法應該是這樣的:
#include
void func2()
void func1()
int main()
func1()、func2()、main() 三個函式是平行的,誰也不能位於誰的內部,要想達到「呼叫 func1() 時也呼叫 func2()」的目的,必須將 func2() 定義在 func1() 外面,並在 func1() 內部呼叫 func2()。
有些程式語言是允許函式巢狀定義的,例如 j**ascript,在 j**ascript 中經常會使用函式的巢狀定義。
1,階乘
函式的宣告
int myfun(int num);
函式的實現
inwww.cppcns.comt myfun(int num)
// return sum1;
// 遞迴呼叫
if (num==1||num==0) else }呼叫
printf("sum=%d\n",myfun(6));
執行效果
2,菲波那切數列數列
函式的宣告
int fbsnq(int num);
函式的實現
int fbsnq(int num)
return fbsnq(num-1)+fbsnq(num-2);
//普通
// int n1=1,n2=1,temp=0;
// if (num==1||num==2)
// int i=2;
// for(;i
函式的呼叫
for (int i=1; i<=30; i++)
printf("%10d", fbsnq(i));
} printf("\n\n");
執行結果
C語言自定義函式的實現
1 函式的宣告 在標頭檔案中實現 ifndef add h if not define 如果沒有定義,防止同乙個標頭檔案被重複引用多次 define add h 定義一下 函式的宣告 intadd int x,int y endif 2 函式的定義 在另乙個.c檔案中寫函式內容 define crt...
C語言 自定義函式
c語言 關於自定義函式 return type function name datetype arg datetype arg2 函式三要素 函式返回值 函式名 引數列表 例子呀 自定義函式的完整寫法 include 函式原型 int sum int,int 可以只寫型別,引數名稱可省略 int m...
C語言中的自定義函式
c語言中可以使用系統函式也可以使用自己的函式,就是自定義函式 自定義函式分為四種 第一種 無參無返回值的 函式的宣告 void sayh 函式的實現 void sayh 第二種 有引數無返回值 函式的宣告 void pxsbx int c,int k 函式的實現 void pxsbxx int c,...