在本教程中,將向您介紹C語(yǔ)言編程中的函數(shù)(用戶(hù)定義函數(shù)和標(biāo)準(zhǔn)庫(kù)函數(shù))。此外,您還將學(xué)習(xí)為什么在編程中使用函數(shù)。
假設(shè)您需要?jiǎng)?chuàng)建程序來(lái)創(chuàng)建一個(gè)圓并為其著色。您可以創(chuàng)建兩個(gè)函數(shù)來(lái)解決此問(wèn)題:
創(chuàng)建一個(gè)圓的函數(shù)
創(chuàng)建顏色的函數(shù)
將復(fù)雜的問(wèn)題分成較小的塊可以使我們的程序易于理解和重用。
C函數(shù)具有以下優(yōu)點(diǎn)。
通過(guò)使用函數(shù),我們可以避免在程序中一次又一次地重寫(xiě)相同的邏輯/代碼。
我們可以在程序中以及在程序的任何位置多次調(diào)用C函數(shù)。
當(dāng)大型C程序被劃分為多個(gè)函數(shù)時(shí),我們可以輕松地對(duì)其進(jìn)行跟蹤。
可重用性是C函數(shù)的主要成就。
但是,函數(shù)調(diào)用始終是C程序的開(kāi)銷(xiāo)。
C函數(shù)包含三個(gè)方面。
函數(shù)聲明 必須在C程序中全局聲明函數(shù),以告知編譯器函數(shù)名稱(chēng),函數(shù)參數(shù)和返回類(lèi)型。
函數(shù)調(diào)用 可以從程序中的任何位置調(diào)用函數(shù)。參數(shù)列表在函數(shù)調(diào)用和函數(shù)聲明中要相同。我們必須傳遞與函數(shù)聲明中聲明的函數(shù)數(shù)量相同的函數(shù)。
函數(shù)定義 它包含要執(zhí)行的實(shí)際語(yǔ)句。這是調(diào)用函數(shù)時(shí)控件所涉及的最重要方面。在這里,我們必須注意,該函數(shù)只能返回一個(gè)值。
| 序號(hào) | C函數(shù)方面 | 語(yǔ)法 |
|---|---|---|
| 1 | 函數(shù)聲明 | return_type function_name(argument_list); |
| 2 | 函數(shù)調(diào)用 | function_name(argument_list) |
| 3 | 函數(shù)定義 | return_type function_name(argument_list){function body;} |
使用C語(yǔ)言創(chuàng)建函數(shù)的語(yǔ)法如下:
return_type function_name(data_type parameter...){
//要執(zhí)行的代碼
}C語(yǔ)言編程中有兩種類(lèi)型的函數(shù):
標(biāo)準(zhǔn)庫(kù)函數(shù):在C頭文件中聲明的函數(shù),例如scanf(),printf(),gets(),puts(),ceil(),floor()等。
用戶(hù)定義的函數(shù):C程序員自定義的函數(shù),我們可以多次使用它。它降低了大型程序的復(fù)雜性并優(yōu)化了代碼。

C函數(shù)可能會(huì)也可能不會(huì)從該函數(shù)返回值。如果您不必從函數(shù)返回任何值,則將void用作返回類(lèi)型。
讓我們看一個(gè)簡(jiǎn)單的C函數(shù)示例,該函數(shù)不會(huì)從該函數(shù)返回任何值。
沒(méi)有返回值的示例:
void hello(){
printf("hello c");
}如果要從函數(shù)返回任何值,則需要使用任何數(shù)據(jù)類(lèi)型,例如int,long,char等。返回類(lèi)型取決于要從函數(shù)返回的值。
讓我們看一個(gè)簡(jiǎn)單的C函數(shù)示例,該函數(shù)從該函數(shù)返回int值。
返回值示例:
int get(){
return 10;
}在上面的示例中,我們必須返回10作為值,因此返回類(lèi)型為int。如果要返回浮點(diǎn)值(例如10.2、3.1、54.5等),則需要使用float作為方法的返回類(lèi)型。
float get(){
return 10.2;
}現(xiàn)在,您需要調(diào)用該函數(shù)以獲取該函數(shù)的值。
函數(shù)可以接受也可以不接受任何參數(shù)。它可能會(huì)或可能不會(huì)返回任何值?;谶@些事實(shí),函數(shù)調(diào)用有四個(gè)不同方面。
沒(méi)有參數(shù)且沒(méi)有返回值的函數(shù)
沒(méi)有參數(shù)但有返回值的函數(shù)
有參數(shù)且無(wú)返回值的函數(shù)
帶有參數(shù)和返回值的函數(shù)
實(shí)例1
#include<stdio.h>
void printName();
void main ()
{
printf("Hello ");
printName();
}
void printName()
{
printf("www.jixiangtaizi.com.cn");
}輸出結(jié)果
Hello www.jixiangtaizi.com.cn
實(shí)例2
#include<stdio.h>
void sum();
void main()
{
printf("\n計(jì)算兩個(gè)數(shù)的和:");
sum();
}
void sum()
{
int a,b;
printf("\n輸入兩個(gè)數(shù)字");
scanf("%d %d",&a,&b);
printf("總和是 %d",a+b);
}輸出結(jié)果
計(jì)算兩個(gè)數(shù)的和: 輸入兩個(gè)數(shù)字 10 24 總和是 34
實(shí)例1
#include<stdio.h>
int sum();
void main()
{
int result;
printf("\n計(jì)算兩個(gè)數(shù)的和:");
result = sum();
printf("%d",result);
}
int sum()
{
int a,b;
printf("\n輸入兩個(gè)數(shù)字");
scanf("%d %d",&a,&b);
return a+b;
}輸出結(jié)果
計(jì)算兩個(gè)數(shù)的和: 輸入兩個(gè)數(shù)字 10 24 34
示例2:程序計(jì)算正方形的面積
#include<stdio.h>
int sum();
void main()
{
printf("計(jì)算這個(gè)正方形的面積\n");
float area = square();
printf("正方形的面積: %f\n",area);
}
int square()
{
float side;
printf("輸入邊長(zhǎng)(以米為單位): ");
scanf("%f",&side);
return side * side;
}輸出結(jié)果
計(jì)算這個(gè)正方形的面積 正方形的面積: 10 輸入邊長(zhǎng)(以米為單位): 100.000000
實(shí)例1
#include<stdio.h>
void sum(int, int);
void main()
{
int a,b,result;
printf("\n計(jì)算兩個(gè)數(shù)的和:");
printf("\n輸入兩個(gè)數(shù)字:");
scanf("%d %d",&a,&b);
sum(a,b);
}
void sum(int a, int b)
{
printf("\n總和是 %d",a+b);
}輸出結(jié)果
計(jì)算兩個(gè)數(shù)的和: 輸入兩個(gè)數(shù)字 10 24 總和是 34
示例2:程序計(jì)算五個(gè)數(shù)字的平均值。
#include<stdio.h>
void average(int, int, int, int, int);
void main()
{
int a,b,c,d,e;
printf("\n要計(jì)算五個(gè)數(shù)的平均值:");
printf("\n輸入五個(gè)數(shù)字:");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
average(a,b,c,d,e);
}
void average(int a, int b, int c, int d, int e)
{
float avg;
avg = (a+b+c+d+e)/5;
printf("給定五個(gè)數(shù)字的平均值 : %f",avg);
}輸出結(jié)果
要計(jì)算五個(gè)數(shù)的平均值: 輸入五個(gè)數(shù)字:10 20 30 40 50 給定五個(gè)數(shù)字的平均值 : 30.000000
實(shí)例1
#include<stdio.h>
int sum(int, int);
void main()
{
int a,b,result;
printf("\n計(jì)算兩個(gè)數(shù)的和:");
printf("\n輸入兩個(gè)數(shù)字:");
scanf("%d %d",&a,&b);
result = sum(a,b);
printf("\n總和是 : %d",result);
}
int sum(int a, int b)
{
return a+b;
}輸出結(jié)果
計(jì)算兩個(gè)數(shù)的和: 輸入兩個(gè)數(shù)字:10 20 總和是 : 30
示例2:檢查數(shù)字是偶數(shù)還是奇數(shù)的程序
#include<stdio.h>
int even_odd(int);
void main()
{
int n,flag=0;
printf("\n檢查一個(gè)數(shù)字是偶數(shù)還是奇數(shù)");
printf("\n輸入數(shù)字: ");
scanf("%d",&n);
flag = even_odd(n);
if(flag == 0)
{
printf("\n數(shù)字是奇數(shù)");
}
else
{
printf("\n這個(gè)數(shù)是偶數(shù)");
}
}
int even_odd(int n)
{
if(n%2 == 0)
{
return 1;
}
else
{
return 0;
}
}輸出結(jié)果
檢查一個(gè)數(shù)字是偶數(shù)還是奇數(shù) 輸入數(shù)字: 100 這個(gè)數(shù)是偶數(shù)
標(biāo)準(zhǔn)庫(kù)函數(shù)是C語(yǔ)言中的內(nèi)置函數(shù),它們被分組并放置在稱(chēng)為庫(kù)的公共位置。這些函數(shù)用于執(zhí)行某些特定操作。例如,printf是用于在控制臺(tái)上打印的庫(kù)函數(shù)。庫(kù)函數(shù)由編譯器的設(shè)計(jì)者創(chuàng)建。所有C標(biāo)準(zhǔn)庫(kù)函數(shù)都在擴(kuò)展名為.h的不同頭文件中定義。我們需要在程序中包含這些頭文件,以利用在此類(lèi)頭文件中定義的庫(kù)函數(shù)。例如,要使用諸如printf / scanf之類(lèi)的庫(kù)函數(shù),我們需要在程序中包含stdio.h,這是一個(gè)頭文件,其中包含有關(guān)標(biāo)準(zhǔn)輸入/輸出的所有庫(kù)函數(shù)。
下表列出了最常用的頭文件。
| 序號(hào) | 頭文件 | 描述 |
|---|---|---|
| 1 | stdio.h | 這是一個(gè)標(biāo)準(zhǔn)的輸入/輸出頭文件。它包含有關(guān)標(biāo)準(zhǔn)輸入/輸出的所有庫(kù)函數(shù)。 |
| 2 | conio.h | 這是一個(gè)控制臺(tái)輸入/輸出頭文件。 |
| 3 | string.h | 它包含所有與字符串相關(guān)的庫(kù)函數(shù),例如gets(),puts()等。 |
| 4 | stdlib.h | 該頭文件包含所有通用庫(kù)函數(shù),例如malloc(),calloc(),exit()等。 |
| 5 | math.h | 該頭文件包含所有與數(shù)學(xué)運(yùn)算相關(guān)的函數(shù),例如sqrt(),pow()等。 |
| 6 | time.h | 該頭文件包含所有與時(shí)間有關(guān)的函數(shù)。 |
| 7 | ctype.h | 該頭文件包含所有字符處理函數(shù)。 |
| 8 | stdarg.h | 變量參數(shù)函數(shù)在此頭文件中定義。 |
| 9 | signal.h | 所有信號(hào)處理函數(shù)都在此頭文件中定義。 |
| 10 | setjmp.h | 該文件包含所有跳轉(zhuǎn)函數(shù)。 |
| 11 | locale.h | 該文件包含語(yǔ)言環(huán)境函數(shù)。 |
| 12 | errno.h | 該文件包含錯(cuò)誤處理函數(shù)。 |
| 13 | assert.h | 該文件包含診斷函數(shù)。 |
訪問(wèn)這些頁(yè)面以了解更多信息: