2013年5月20日 星期一

[C]function

function ? call by address? call by value ?


一、什麼是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)後而改變

四、Call by address

call by address作用在於,經過函數的運算後,要變更原本傳入數值的值。這樣講或許很難懂,直接看例子比較快XD

下表示幾個像我這樣的可憐蟲的微積分成績
同學
分數 40 45 35 30

老師於心不忍,不想當掉太多同學。所以決定全部加30分。

我們的調分過程是這樣:
閱讀分數→代入調分公式→把原本分數塗掉,寫上新分數

不巧的是,今天算分數的人笨笨的,不識字,只會認得表格上的座標為置

於是如果把表格作標化,我們可以知道

甲的分數在[2,2]
乙的分數在[2,3]
丙的分數在[2,4]
丁的分數在[2,5]

於是我們分別把四人的表格位置告訴算分數的人,他就可以從表格上得到原本成績,以及重新寫在哪邊。

而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");
}

沒有留言:

張貼留言