1、函數(shù)就是一系列C語句的集合,為了完成某個會重復(fù)使用的特定功能。需要該功能的時候,直接調(diào)用該函數(shù)即可,不用每次都堆疊一大堆的代碼。需要修改該功能的時候,也只要修改和維護這一個函數(shù)即可。
創(chuàng)新互聯(lián)專注于河西企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,電子商務(wù)商城網(wǎng)站建設(shè)。河西網(wǎng)站建設(shè)公司,為河西等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
2、C語言中,數(shù)學(xué)函數(shù)是函數(shù)的一種。指專門進行數(shù)學(xué)運算的函數(shù),一般都在math.h頭文件下,數(shù)學(xué)函數(shù)列表:
1)int abs(int i); 求整數(shù)的絕對值。
2)long labs(long n); 求長整型數(shù)的絕對值。
3)double fabs(double x); 求實數(shù)的絕對值。
4)double floor(double x); 求不大于x的最大整數(shù),它相當于數(shù)學(xué)函數(shù)[x]。
5)double ceil(double x); 求不小于x的最小整數(shù)。
6)double sqrt(double x); 求x的平方根。
7)double log10(double x); 求x的常用對數(shù)。
8)double log(double x); 求x的自然對數(shù)。
9)double exp(double x); 求歐拉常數(shù)e的x次方。
10)double pow10(int p); 求10的p次方。
11)double pow(double x, double y); 求x的y次方。
12)double sin(double x); 正弦函數(shù)。
13)double cos(double x); 余弦函數(shù)。
14)double tan(double x); 正切函數(shù)。
15)double asin(double x); 反正弦函數(shù)。
16)double acos(double x); 反余弦函數(shù)。
17)double atan(double x); 反正切函數(shù)。
18)double atan2(double x); 反正切函數(shù)2。
前面我們說的都是無參數(shù)無返回值的函數(shù),實際程序中,我們經(jīng)常使用到帶參數(shù)有返回值的函數(shù)。
一、函數(shù)參數(shù)傳遞
1.形式參數(shù)和實際參數(shù)
函數(shù)的調(diào)用值把一些表達式作為參數(shù)傳遞給函數(shù)。函數(shù)定義中的參數(shù)是形式參數(shù),函數(shù)的調(diào)用者提供給函數(shù)的參數(shù)叫實際參數(shù)。在函數(shù)調(diào)用之前,實際參數(shù)的值將被拷貝到這些形式參數(shù)中。
2.參數(shù)傳遞
先看一個例子:
void a(int); /*注意函數(shù)聲明的形式*/
main()
{
int num;
scanf("%d",num);
a(num); /*注意調(diào)用形式*/
}
void a(int num_back) /*注意定義形式*/
{
printf("%d\n",num_back);
}
在主函數(shù)中,先定義一個變量,然后輸入一個值,在a()這個函數(shù)中輸出。當程序運行a(num);這一步時,把num的值賦值給num_back,在運行程序過程中,把實際參數(shù)的值傳給形式參數(shù),這就是函數(shù)參數(shù)的傳遞。
形參和實參可能不只一個,如果多于一個時,函數(shù)聲明、調(diào)用、定義的形式都要一一對應(yīng),不僅個數(shù)要對應(yīng),參數(shù)的數(shù)據(jù)類型也要對應(yīng)。
void a(int,float);
main()
{
int num1;
float num2;
scanf("%d",num1);
scanf("%f",num2);
a(num1,num2);
}
void a(int num1_back,float num2_back)
{
printf("%d,%f\n",num1_back,num2_back);
}
上面的例子中,函數(shù)有兩個參數(shù),一個是整型,一個是浮點型,那么在聲明、調(diào)用、定義的時候,不僅個數(shù)要一樣,類型也要對應(yīng)。如果不對應(yīng),有可能使的編譯錯誤,即使沒錯誤,也有可能讓數(shù)據(jù)傳遞過程中出現(xiàn)錯誤。
再看一個例子:
void a(int);
main()
{
int num;
scanf("%d",num);
a(num);
}
void a(int num)
{
printf("%d\n",num);
}
看上面的例子,形式參數(shù)和實際參數(shù)的標識符都是num,程序把實際參數(shù)num的值傳遞給形式參數(shù)num。有些人可能就不明白了,既然兩個都是num,為什么還要傳遞呢?干脆這樣不就行了嗎:
void a();
main()
{
int num;
scanf("%d",num);
a();
}
void a()
{
printf("%d\n",num);
}
其實不然,這就要涉及到標識符作用域的問題。作用域的意思就是說,哪些變量在哪些范圍內(nèi)有效。一個標識符在一個語句塊中聲明,那么這個標識符僅在當前和更低的語句塊中可見,在函數(shù)外部的其實地方不可見,其他地方同名的標識符不受影響,后面我們會系統(tǒng)講解作用域的問題。在這兒你就要知道兩個同名的變量在不同的函數(shù)中是互不干擾的。
前面將的都是變量與變量之間的值傳遞,其實函數(shù)也可以傳遞數(shù)組之間的值??聪旅娴睦樱?/p>
void a(int []);
main()
{
int array[5],i;
for(i=0;i5;i++) scanf("%d",array[i]);
a(array);
}
void a(int array[])
{
int i;
for(i=0;i5;i++) printf("%d\t",array[i]);
printf("\n");
}
有些自定義函數(shù)可能會被頻繁的調(diào)用,所以寫在一個C文件里是不太方便的。應(yīng)該把這些自定義的函數(shù)寫在一個C文件里,同時在一個頭文件.h文件里聲明。主函數(shù)可以通過引用該頭文件然后調(diào)用需要的自定義函數(shù)。
舉例如下:
1. 在頭文件(.h)里聲明自定義函數(shù),定義用戶寫的函數(shù);
2. 在一個C語言文件里寫下自定義函數(shù)的實現(xiàn)方式,可以寫在主函數(shù)前,也可在主函數(shù)后(需在頭文件前聲明函數(shù));
3. 在主函數(shù)中調(diào)用自定義函數(shù),別忘了頭文件的聲明;
4. 最后編譯所有的涉及到的C文件;
#include stdio.h
void number(int);
int main()
{
for(int i = 0;i10;i++)
{
number(i);