一、函數的概念
函數是將一組語句放在一起執行一個特定任務的單元。C語言編程的所有程序都是由一個或多個函數組成的。函數是C語言程序中的基本模塊,程序是通過調用函數來執行各種操作的。
在C語言中,一個函數由函數頭和函數體組成。函數頭的形式如下:
返回類型 函數名 (參數列表)
返回類型指定函數的返回值類型,由C語言數據類型中的任何一種取值。函數名是唯一標識函數的符號,用於調用函數。參數列表是傳遞給函數的參數列表,也就是函數要處理的數據。
二、函數的定義
C語言函數定義的一般形式如下:
返回類型 函數名 (參數列表)
{
函數體
}
函數名由一個標識符組成,用於標識該函數。參數列表是由零個或多個參數組成的,每個參數是由其類型和名字組成的。函數體由一組語句組成,這些語句描述了函數執行的操作。
下面是一個簡單的函數示例:
#include
void print_message(void);
int main()
{
print_message(); // 調用函數
return 0;
}
// 函數定義
void print_message(void)
{
printf("Hello World\n");
}
在上面的示例中,print_message()是函數名,該函數沒有任何參數和返回值。函數被調用時,它會列印「Hello World」這個字元串。
三、函數的參數傳遞
C語言中函數可以使用參數傳遞數據。C語言中有兩種參數傳遞方式:值傳遞和引用傳遞。
值傳遞是指傳遞參數的值,函數對參數進行操作不影響原始數據。下面是一個值傳遞的示例:
#include
void swap(int x, int y);
int main()
{
int a = 100;
int b = 200;
printf("交換前 a 的值:%d\n", a );
printf("交換前 b 的值:%d\n", b );
/* 調用函數來交換值 */
swap(a, b);
printf("交換後 a 的值:%d\n", a );
printf("交換後 b 的值:%d\n", b );
return 0;
}
void swap(int x, int y)
{
int temp;
temp = x; /* 保存 x 的值 */
x = y; /* 把 y 賦值給 x */
y = temp; /* 把原來的 x 值賦值給 y */
return;
}
在上面的示例中,swap函數中的變數x和y與main函數中的a和b不是同一個變數。函數執行時,swap函數中的變數只是main函數中變數值的副本。swap函數中對x和y的操作不影響main函數中的a和b。
引用傳遞是指傳遞指針,函數可以通過指針修改原始數據。下面是一個引用傳遞的示例:
#include
/* 函數聲明 */
void swap(int *x, int *y);
int main ()
{
/* 局部變數定義 */
int a = 100;
int b = 200;
printf("交換前,a 的值:%d\n", a );
printf("交換前,b 的值:%d\n", b );
/* 調用函數來交換值 */
swap(&a, &b);
printf("交換後,a 的值:%d\n", a );
printf("交換後,b 的值:%d\n", b );
return 0;
}
void swap(int *x, int *y)
{
int temp;
temp = *x; /* 保存地址 x 的值 */
*x = *y; /* 把 y 賦值給 x */
*y = temp; /* 把 x 賦值給 y */
return;
}
在上面的示例中,swap函數中的x和y是指向main函數中a和b的指針。函數中對指針的操作可以影響main函數中的a和b。
四、函數的返回值
函數可以有一個返回值,返回值的類型必須與函數聲明的返回類型相同。下面是一個返回值的示例:
#include
/* 函數聲明 */
int max(int num1, int num2);
int main ()
{
/* 局部變數定義 */
int a = 100;
int b = 200;
int ret;
/* 調用函數來獲取最大值 */
ret = max(a, b);
printf( "最大值是:%d\n", ret );
return 0;
}
/* 函數返回兩個數中較大的那個數 */
int max(int num1, int num2)
{
/* 局部變數聲明 */
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
在上面的示例中,max函數返回的是num1和num2中的最大值。main函數獲取到返回值後,使用printf函數輸出了返回值。
五、函數的遞歸
遞歸是指一個函數可以調用自身的行為。遞歸函數包含兩個基本部分:遞歸調用和遞歸返回條件。下面是一個遞歸的示例:
#include
/* 函數聲明 */
unsigned long long fib(int n);
int main()
{
int n = 9;
printf("%d項斐波那契數列的值為:%lld\n", n, fib(n));
return 0;
}
/* 斐波那契數列的遞歸函數 */
unsigned long long fib(int n)
{
if (n == 0 || n == 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
上面的示例是斐波那契數列的遞歸函數。該函數可以計算第n項斐波那契數列的值。在函數中,當n為0或1時,遞歸結束。否則,遞歸調用函數本身計算n-1和n-2項斐波那契數列的值。
原創文章,作者:OAIRZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368296.html
微信掃一掃
支付寶掃一掃