1.自定義函數(shù)
在數(shù)學當中,我們學過很多函數(shù),如 三角函數(shù) y? = sin x,二次函數(shù) y = f(x)...它們都有一個共同特點,即有參數(shù) x , 和經(jīng)過函數(shù) f(x) 運算(處理)后的返回值 y,那么在C語言中的函數(shù)該如何編寫呢?
事實上,C語言的函數(shù)編寫也遵循這樣一個規(guī)律,即函數(shù)包含它的參數(shù),并且最多有且僅有一個函數(shù)的返回值,具體定義一個函數(shù)的操作就是:
返回值類型 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3,...)
{
函數(shù)體語句1;
函數(shù)體語句2;
......
return 表達式(返回值)
} 注意:函數(shù)的定義結(jié)尾沒有分號。
這里,函數(shù)的返回值類型可以是我們知道的各種數(shù)據(jù)類型,例如int,char,float,double,long long等等,這些都是C語言自帶的數(shù)據(jù)類型,當然,還有一個比較特殊的類型 void 它的意思是函數(shù)的返回值類型為 “空” ,即函數(shù)可以返回一個空類型,或者干脆沒有返回值。
例如:編寫一個求取大值的函數(shù),經(jīng)過分析可知,我們要通過函數(shù)獲得一個大值,因此需要函數(shù)有一個返回值,所以函數(shù)返回值類型不能為空(void),這里我們默認要返回一個整型的大值,定義是這樣的:
int max(int a,int b)
{
if(a >b) return a;
return b;
}
這樣我們就實現(xiàn)了兩個整數(shù)求取大值的過程,這里有幾個點還需指明,例如,我們的函數(shù)只有兩個參數(shù),那如果我們要求三個數(shù)的大值或者四個數(shù)的大值甚至是五個,六個等等,那我們是不是需要在函數(shù)的參數(shù)列表里再多定義幾個 int c,int d,int e...呢?想了想那么復雜,所以顯然是不用的,為什么不用,這個問題留在后期解答。還有一點,就是關(guān)于這個函數(shù)體中的語句,我們看到函數(shù)體里面只有一個 if 判斷語句,而沒有出現(xiàn)它的難兄難弟 else ,為什莫?其實關(guān)鍵就在于 return 語句,return 語句在函數(shù)體中是老大哥一樣的存在,為什莫這么說呢,因為一旦函數(shù)執(zhí)行到return語句,函數(shù)就退出了,所以,在本函數(shù)體中,如果a >b 條件滿足,返回a,否則編譯器就不會執(zhí)行return a 這條語句,順序往下執(zhí)行,遇到return b,返回b的值,函數(shù)執(zhí)行完畢。但其實在return b,前面加上else 也是可以的,這里只是手懶而已。
提示:函數(shù)的參數(shù)和返回值類型最好是我們 “常見的數(shù)據(jù)類型” ,如int ,char double,當然,后期認識了指針,結(jié)構(gòu)體,類等數(shù)據(jù)類型也可以作為函數(shù)的參數(shù)和返回值,只不過它們的作為參數(shù)和返回值要相對復雜些,如果函數(shù)不要返回值,則返回值類型應該寫為 void ,而不是空著返回值類型,直接寫函數(shù)名。
2.自定義函數(shù)的幾種類型
1 返回值類型 函數(shù)名(參數(shù)...){????? }??? 有返回值 有參數(shù)
2 返回值類型 函數(shù)名(????????? ){?? ?? }??? 有返回值 無參數(shù)
3 void 函數(shù)名 (參數(shù)...)????????? {? ??? }??? 無返回值 有參數(shù)
4 void 函數(shù)名 (????????? )????????? {????? } ?? 無返回值 無參數(shù)
3.函數(shù)的聲明
當我們定義了一個函數(shù),要去使用這個函數(shù)的時候,就需要對函數(shù)進行調(diào)用,但有些情況下,即使我們已經(jīng)已經(jīng)在程序定義了這個函數(shù),但當我們?nèi)ナ褂盟臅r候,程序有時會報錯說[Error] '函數(shù)名' was not declared in this scope,這個時候,往往是我們把函數(shù)定義在了主函數(shù)的后面,當程序執(zhí)行到主函數(shù)里面的語句時,程序不知道后面還有一個我們事先定義好的函數(shù),這時候,就用到了函數(shù)聲明,具體聲明形式時這樣的:返回值類型 函數(shù)名 (參數(shù));將對應代碼聲明語句像這樣在主函數(shù)中放在要調(diào)用該函數(shù)語句的前面,程序遇到該聲明語句就會在程序中尋找相關(guān)的函數(shù)定義,這樣一來,函數(shù)就可以在主函數(shù)中正常使用了。當然,有沒有一種方法可以讓我們省略函數(shù)的聲明語句呢?答案是可以的,我們只需要將函數(shù)的定義放在主函數(shù)前面就可以在主函數(shù)中不用聲明也可以直接調(diào)用了。
4.函數(shù)的參數(shù)傳遞
當我們要使用一個帶有參數(shù)的自定義函數(shù)時,我們必須傳遞給函數(shù)的形式參數(shù)一個實參,在上例
int max (int a,int b){? 函數(shù)體} 類型中,a , b就是形式參數(shù),當我們調(diào)用這個函數(shù)時,需要傳遞給函數(shù)兩個實際參數(shù),多一個少一個都不行,比如我們有兩個變量 num1 = 10,num2 = 1;要對比兩個數(shù)的大小,就需要在程序中有這樣的語句:int c = max(num1,num2); c 用來接收num1,num2兩個數(shù)中的較大值,在這個過程當中 num1的值傳遞給了 a ,num2 的值傳遞給了 b,這種參數(shù)之間的傳遞,就叫做參數(shù)的值傳遞,函數(shù)參數(shù)的傳遞類型有三種,值傳遞,地址傳遞,引用傳遞,其中值傳遞只是簡單的將實際參數(shù)的值復制給了形式參數(shù),這種參數(shù)之間值傳遞的方式中,形式參數(shù)和實際參數(shù)之間互不影響,即如果形式參數(shù)的函數(shù)值在函數(shù)體當中有所改變,不會影響到主函數(shù)中的實際參數(shù)。
例如:現(xiàn)在我們需要編寫一個函數(shù)來實現(xiàn)兩個變量之間的值交換。
#include
void swap(int a,int b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a = 3,b = 4;
swap(a,b);
printf("a = %d\nb = %d ",a,b);
}
可以看到,在我們事先定義的swap()函數(shù)中,我們將傳進來的變量a 和 b 的值借助 t 變量進行了交換,但當我們運行這段代碼后會發(fā)現(xiàn),主函數(shù)中打印的 a 和 b 的值依然是 3 和 4,這就是所謂的參數(shù)之間進行了值傳遞,形式參數(shù)的改變不會影響主函數(shù)當中的實際參數(shù)的值。那么怎么修改才能實現(xiàn)兩個實際參數(shù)之間的值交換呢,感興趣的同學可以去了解一下C語言指針部分的講解,由于我這里僅針對部分學基礎(chǔ)的同學,所以這里我只給出代碼,不做過多解釋。
#includevoid swap(int * a,int * b)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int a = 3,b = 4;
swap(&a,&b);
printf("a = %d\nb = %d",a,b);
return 0;
}
?
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:C語言:函數(shù)(上)-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article22/deidcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、手機網(wǎng)站建設(shè)、企業(yè)建站、虛擬主機、建站公司、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容