C++函數(shù)的定義、什么是函數(shù)
2020-05-23 14:28:02
供稿:網(wǎng)友
在日常生活中,我們經(jīng)常會用到工具。比如我們畫一個表格需要用到直尺,它可以告訴我們線段的長度;我們開瓶子的時候需要用開瓶器,它可以把瓶子打開;我們在做計算題的時候需要用到計算器,它能夠告訴我們計算結(jié)果。
使用工具有些什么好處呢?首先,如果這個工具是現(xiàn)成的,我們就可以不必要自己去做一個這樣的工具,直接拿來就能用(比如開瓶器、計算器)。其次,不管是現(xiàn)成的工具,還是自己做的工具(比如自己做的直尺),一定是能夠多次反復(fù)使用的(比如直尺不是用完一次就不能再用的),而且是能夠在各種合適的情況下使用的。(直尺在量程范圍內(nèi)能量這條線段的長度,也能夠量那條線段的長度。)
在程序設(shè)計中,我們也會有各種各樣的“工具”。你告訴比較大小的“工具”兩個不相等的數(shù),這個“工具”能夠告訴你哪個數(shù)大;你告訴求正弦值的“工具”一個弧度,這個工具能夠求出這個弧度對應(yīng)的正弦值等等……這些工具的名字就是函數(shù)(Function)。要注意,在程序設(shè)計中的函數(shù)和數(shù)學(xué)中的函數(shù)有相似的地方,但是它們卻完全是兩碼事,請不要將兩者等同起來。
函數(shù)和工具的性質(zhì)是一樣的。如果有一個現(xiàn)成求正弦值的函數(shù),我們就不必自己去“造”一個這樣的函數(shù)。求正弦值的函數(shù)是可以多次使用的,并且可以求出任意實數(shù)的正弦值(合適的情況下),但是它卻求不出一個虛數(shù)的正弦值(不合適的情況下)。
如何定義和使用函數(shù)
有時候我們會知道一個工具有什么功能,但是卻因為對其陌生而不會使用,這時候要使用它可能會發(fā)生一些困難。除了自己有空去摸索一下以外,最有效的辦法就是去看說明書了。說明書里會告訴你什么東西放在什么位置上,使用了以后會產(chǎn)生什么效果之類的。
同工具一樣,每個函數(shù)也有其自己的說明書,告訴用戶如何調(diào)用(就是使用的意思)這個函數(shù)。這份說明書就稱為這個函數(shù)的原型。它的格式為:
產(chǎn)生結(jié)果類型 函數(shù)名(參數(shù)1,參數(shù)2,……參數(shù)n);
函數(shù)名相當于工具的名字,比如直尺、計算器等等。產(chǎn)生效果類型相當于使用該工具產(chǎn)生的效果,比如直尺能夠讀出一個長度,計算器能夠顯示一個結(jié)果等等。而參數(shù)(Parameter)則是表示合適的使用情況,比如直尺應(yīng)該去量長度而不能去量角度,計算器能計算數(shù)值而不能去畫圖等等。
那么我們?nèi)绾蝸黹喿x函數(shù)的“說明書”呢?我們先來看兩個例子:
⑴int max(int a,int b);
這個函數(shù)名稱為max,即求出最大的值。運行該函數(shù)以后,產(chǎn)生的結(jié)果是一個整數(shù)。在數(shù)學(xué)中,我們會有一元函數(shù)比如f(x)=2*x+3,也會有多元函數(shù)比如g(x,y)=x/4+y等等。我們在使用f(x)或g(x,y)的時候括號內(nèi)數(shù)的位置必須和自變量的字母對應(yīng),比如g(4,1)=4/4+1=2,此時x=4并且y=1。我們既不能將其顛倒,也不能寫出g(4)或者g(4,2,1,5)之類的表達式,否則就是錯誤的。程序設(shè)計中參數(shù)的作用和自變量x,y的作用是類似的。在函數(shù)“說明書”中,也交待了哪個位置應(yīng)該放置什么類型的參數(shù),我們在調(diào)用函數(shù)的時候要注意參數(shù)的類型、順序、個數(shù)都要一一對應(yīng)。
具體使用請看以下的程序:(程序6.1.1)
#include "iostream.h"
int max(int a,int b);//函數(shù)原型,假設(shè)函數(shù)已經(jīng)定義
int main()
{
int r=3,s=5,t;
t=max(r,s);//使用函數(shù),并記錄產(chǎn)生的結(jié)果
cout<<t <<endl;
return 0;
}
運行結(jié)果:
5
對于上面這段程序,有兩點要說明。首先,調(diào)用函數(shù)時放入括號內(nèi)的變量名r和s與函數(shù)原型里a和b的名字是可以不一樣的。就像我可以用尺量各種各樣的紙。但是,它們的數(shù)據(jù)類型必須相同,如果把一個字符型變量放在這個位置上,就如同用尺去量角度一樣,無法成功的。其次,調(diào)用函數(shù)后的結(jié)果可以認為是一個表達式的值。我們可以把這個結(jié)果賦值給一個變量或者將其輸出。當然,我們也可以不保存不輸出這個結(jié)果,但是那樣的話,就像是量了長度卻沒有把結(jié)果記錄下來。
⑵void output(char c);
這個函數(shù)名為output,即輸出。void表示空類型,它同整型、實型一樣,也是一種數(shù)據(jù)類型。它表示調(diào)用該函數(shù)后,不會產(chǎn)生任何定量的結(jié)果。這是什么意思呢?我們知道,例如榔頭這種工具,它只能產(chǎn)生一些效果,如把釘子砸進木頭里,但是它不會給使用者一個定量的結(jié)果。不過我們大可不必擔(dān)心它是否完成了我們要它完成的工作。如果榔頭沒把釘子砸進木頭里,要么是榔頭本身質(zhì)量有問題,要么就是使用者沒有按照要求去使用。若這把榔頭不是用戶自己造的,那么用戶沒有任何責(zé)任。
下面我們就來嘗試一下使用這個函數(shù):(程序6.1.2)
#include "iostream.h"
void output(char c); //函數(shù)原型,假設(shè)函數(shù)已經(jīng)定義
int main()
{
char temp;
cin >>temp;
output(temp);
return 0;
}
運行效果:
T
T
雖然函數(shù)沒有產(chǎn)生什么定量的結(jié)果,但是其在屏幕上輸出的功能還是達到了。對于產(chǎn)生void(空類型)的函數(shù),我們不必去保存結(jié)果了。
程序6.1.1和6.1.2的代碼是不完善的,如果僅用這些代碼去編譯會被告知函數(shù)未定義。由于涉及更多的知識,這些代碼將在下一節(jié)得到完善。