先上一個例子,使用自定義函數,判斷一個指定範圍的數字是不是素數,若是是素數就輸出,這麼一個小程序。php
/* 求1到某個數值全部的素數 學php的小螞蟻 */ # include <stdio.h> /* 判斷一個數字是否爲素數 @param int i 須要判斷的數字 @return bool */ bool IsPrime(int i) { int j; for(j = 2; j < i; ++j) { if(i % j == 0) { break; } } if(i == j){ return true; } else { return false; } } /* 對指定範圍內的數字進行判斷,若是是素數,則輸出 @param int val 指定素數的範圍 @return void 直接輸出 */ void TraverseVal(int val) { int i; for(i = 2; i <= val; ++i) { if( IsPrime( i ) ) { printf("%d \n", i); } } } /* 主函數:輸入要指定的範圍 */ int main(void) { int val; scanf("%d", &val); TraverseVal( val ); return 0; }
在使用自定義函數的過程當中,須要注意的是:小程序
自定義函數的類型、形參、形參的類型,以及是否有返回值,這幾個位置必須和函數調用的地方相符合才能正常使用,否則會報錯。編輯器
1,若是有實參,而函數形參是void,報錯函數
2,若是函數類型void,調用函數後賦值於變量,報錯;若是函數中有return,報錯;spa
3,若是函數類型int,函數體中沒有return,報錯.net
4,若是把函數寫到了main函數後面,仍是報錯code
總之:寫自定義函數的時候,必須嚴格按照邏輯編寫。函數沒有形參,就寫void,不要空着不寫。blog
若是確實須要把函數寫到調用函數的後面,須要在前面加一句前置聲明: 函數類型 函數名(形參類型);內存
使用函數要注意的問題:ci
函數調用和函數定義的順序
若是函數調用寫在了函數定義的前面,則必須加函數前置聲明
函數的前置聲明:
1,告訴編輯器即將可能出現的若干個字母表明的是一個函數
2,告訴編輯器即將可能出現的若干個字母所表明的函數的形參和返回值的具體狀況
3,函數聲明是一個語句,末尾必須加分號
4,對庫函數的聲明是經過 # include <庫函數所在文件的名字.h> 來實現的
形參和實參
個數相同 位置一一對應 數據類型必須相互兼容(好比,浮點型賦值給整形,也是能夠的,可是有可能會丟失精度。可是字符串要賦值給整形,這就不能夠了)
經常使用的一些系統函數
機械工業出版社《tarboc 2.0 實用大全》 ( 這本書老師推薦看一下,貌似都是關於系統函數使用的)
double aqrt(double x); 求x的平方根
int abs(int x) 求x的絕對值
double fabs(int x); 求x的絕對值
變量的做用域和存儲方式:
按做用區域分:
全局變量
在函數外部定義的變量屬於全局變量
全局變量使用範圍:從定義位置開始到整個程序結束
全局變量也要注意定義的位置,若是在一個函數以後定義,而這個函數還剛好使用了該全局變量,程序就會報錯
局部變量
在函數內存定義的變量或者函數的形參都統稱爲局部變量
使用範圍:只能在本函數內部使用
全局變量和局部變量命名衝突的問題
在一個函數內部若是定義的局部變量的名字和全局變量名字同樣時,局部變量就會屏蔽掉全局變量
老師無心間說了一句話,要是專門去搞C語言,路會很難走 ~(~ ̄▽ ̄)~
學PHP的小螞蟻 博客 http://my.oschina.net/woshixiaomayi/blog