點選上方“學士科技”,選擇“設為星标”
資訊、技術幹貨第一時間送達!
01.C語言基礎-資料類型
02.C語言中算法的基本特性和表達方式
03.C語言中的輸入輸出函數
04.C語言基礎-循環控制語句
05.C語言基礎-條件控制語句
06.C語言基礎-控制語句示例
07.C語言數組- 一維數組
08.C語言數組- 二維數組
09.C語言數組-字元數組
10.C語言中常用的6個字元串處理函數
對于一個C程式而言,它所有的指令都包含在函數内。每個函數都會執行特定的任務。有一個特别的函數,名稱為main()——該函數是程式啟動後,第一個執行的函數。其他所有函數都是main()函數的子函數(或者與之相關聯的過程,例如回調函數),并且它們的函數名稱可以自己設定。每個函數都隻能被定義一次。但一個函數可以根據需要被多次的聲明和調用。
函數的定義
C 語言中的函數定義的一般形式如下:
return_type function_name( parameter list ){ body of the function}
函數由一個函數頭和一個函數主體組成。下面列出一個函數的所有組成部分:
- 傳回類型:一個函數可以傳回一個值。return_type 是函數傳回的值的資料類型。有些函數執行所需的操作而不要傳回值,在這種情況下,return_type 是關鍵字 void。
- 函數名稱:這是函數的實際名稱。函數名和參數清單一起構成了函數簽名。
- 參數:參數就像是占位符。當函數被調用時,您向參數傳遞一個值,這個值被稱為實際參數。參數清單包括函數參數的類型、順序、數量。參數是可選的,也就是說,函數可能不包含參數。
- 函數主體:函數主體包含一組定義函數執行任務的語句。
下來看個示例:
int add(int a, int b){ int result; rusult = a + b; return result;}
{}之間的内容則為函數體。
函數的聲明和調用
在使用函數之前應該先聲明,事先通知編譯器該函數的類型:換句話說,一個聲明即是描述一個函數的接口。聲明至少應指明函數傳回值的類型,如下例所示:
int add(int a, int b);
在函數聲明中,參數的名稱并不重要,隻有參數的類型是必需的,是以下面也是有效的聲明:
int max(int, int);
建立 C 函數時,會定義函數做什麼,然後通過調用函數來完成已定義的任務。
當程式調用函數時,程式控制權會轉移給被調用的函數。被調用的函數執行已定義的任務,當函數的傳回語句被執行時,或到達函數的結束括号時,會把程式控制權交還給主程式。
調用函數時,傳遞所需參數,如果函數傳回一個值,則可以存儲傳回值。
接下來我們再看一個示例:
#include /* 函數聲明 */int max(int num1, int num2);int main(){ /* 局部變量定義 */ int a = 100; int b = 200; int ret; /* 調用函數來擷取最大值 */ ret = max(a, b); printf("Max value is : %d\n", ret); return 0;}/* 函數傳回兩個數中較大的那個數 */int max(int num1, int num2){ /* 局部變量聲明 */ int result; if (num1 > num2) result = num1; else result = num2; return result;}
運作結果如下:
函數調用這一塊我想着重說下遞歸調用
所謂遞歸,就是自己調用自己。C語言中函數可以直接或間接的調用自己,所謂的間接調用,是指在遞歸函數調用的下層函數中再調用自己,遞歸關系如下圖:
- 直接調用
- 間接調用
文法格式如下:
void recursion(){ statements; ... ... ... recursion(); /* 函數調用自身 */ ... ... ...}int main(){ recursion();}
流程圖:
下來我們一起看一個關于函數遞歸調用的示例
//下面的執行個體使用遞歸函數生成一個給定的數的斐波那契數列:#include int fibonaci(int i){ if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonaci(i-1) + fibonaci(i-2);}int main(){ int i; for (i = 0; i < 10; i++) { printf("%d\t\n", fibonaci(i)); } return 0;}
函數運作結果:
關于函數今天就先介紹到這,後面繼續更新。。。
【END】