一、什麼是function ?
function中文翻為函數,不用把他想的太難,程式語言當中的function概念就和數學上一樣。
根據你丟入的參數值,根據function的定義進行運算,最後得到對應值。
這邊來做個比較表格,讓大家比較容易懂好了。
C語言 | 項目 | 數學上 |
int function (int x) { int result; result=x*x+x+1; return result; } | 函數 | f(x)=x^2+x+1 |
int function (int x) { int result; result=x*x+x+1; return result; } | 函數定義 | x^2+x+1 |
int function (int x) { int result; result=x*x+x+1; return result; } | 參數 | x |
int function (int x) { int result; result=x*x+x+1; return result; } | 參數型態<->定義域Domain | {x | x ∈ Z} |
int function (int x) { int result; result=x*x+x+1; return result; } | 傳回型態<->值域Range | {f(x) | f(x) ∈ Z} |
int function (int x) { int result; result=x*x+x+1; return result; } | 回傳值<->函數值 | f(x) |
二、Call function
Call function 字面上意思是呼叫函數。
如果用數學上來比喻,就好比我們已經先列好一個function叫做f(x)=x^2+x+1
把f(x)叫出來使用,根據使用的方法不同分為by value和by address
三、Call by value
call by value 的類似於我們數學上函數的概念。
例如,有一堆身高體重的資料如下。
同學 | 甲 | 乙 | 丙 | 丁 |
身高 | 170 | 180 | 175 | 165 |
體重 | 65 | 90 | 68 | 54 |
如果我們要算BMI值,身高用a表示,體重用b表示,數學上我們可以將函數寫成
f(x)=b/(a/100)^2
原本的身高和體重資料並不會因為我們代入f(x)後而改變
下表示幾個像我這樣的可憐蟲的微積分成績
f(x)=b/(a/100)^2
原本的身高和體重資料並不會因為我們代入f(x)後而改變
四、Call by address
call by address作用在於,經過函數的運算後,要變更原本傳入數值的值。這樣講或許很難懂,直接看例子比較快XD下表示幾個像我這樣的可憐蟲的微積分成績
同學 | 甲 | 乙 | 丙 | 丁 |
分數 | 40 | 45 | 35 | 30 |
老師於心不忍,不想當掉太多同學。所以決定全部加30分。
我們的調分過程是這樣:
閱讀分數→代入調分公式→把原本分數塗掉,寫上新分數
不巧的是,今天算分數的人笨笨的,不識字,只會認得表格上的座標為置
於是如果把表格作標化,我們可以知道
甲的分數在[2,2]
乙的分數在[2,3]
丙的分數在[2,4]
丁的分數在[2,5]
於是我們分別把四人的表格位置告訴算分數的人,他就可以從表格上得到原本成績,以及重新寫在哪邊。
而C語言就是那個笨笨的人。
上面算分數例子的function可以寫成
於是我們分別把四人的表格位置告訴算分數的人,他就可以從表格上得到原本成績,以及重新寫在哪邊。
而C語言就是那個笨笨的人。
上面算分數例子的function可以寫成
void function_score (int *score) { *score=*score+30; } void main(void) { int score; printf("please enter score"); scanf("%d",&score); function_score(&score); printf("New score is %d",score); system("pause"); }
沒有留言:
張貼留言