函數的概述
函數:由功能相對獨立的代碼段來組成的
優點:1、提高程序的可讀性
2、提高開發的效率
3、提高代碼的複用性
分類:
函數定義的角度:1、庫函數:只需引入原型
2、用戶定義函數:不僅需要定義本身,還需要聲明被調函數的類型
返回值角度:有無返回值
主調函數和被調函數數據傳送角度:無參函數,有參函數
庫函數又以功能角度:字符類型函數、轉換函數、圖形函數等
自定義函數的書寫格式
步驟:1、申明 2、 定義函數 3、 調用函數
格式:(數據類型,命名規範)
返回值類型 函數名稱(參數){
函數體;
}
主函數:main()
無參無返回值:void 函數名(){
申明部分
// 定義局部變量
語句
}
無參有返回值:返回值類型 函數名(){
申明部分
// 定義局部變量
語句
return 語句 返回值類型變量或常量
//返回給主調函數
}
有參無返回值:void 函數名(參數名列表){
//參數(形式參數)寫法:數據類型 參數名
申明部分
語句
}
有參有返回值:返回值類型 函數名(參數名列表){
//多個形參,應用’,'隔離
申明部分
// 定義局部變量
return 語句
//返回給主調函數,return之後的代碼永不執行
}
函數參數
形式參數(形參):在函數的定義中,函數名後面小括號中的參數
實際參數(實參):在函數的調用時,小括號中的參數
注意: 1、形式參數與實際參數個數,類型必須一致(個數不一致錯誤,類型不一致精度丟失)
2、形參定義後,並不會立即分配存儲空間,在函數調用時纔會分配,形參只有在函數內部有效,函數調用結束後,不能再使用形參
3、多個形參,應用’,'隔離
4、在函數定義中,不能定義和形參同名的變量
函數參數傳遞過程:1,形參只有在調用時纔會被分配空間(調用結束,便被釋放)
2,實參在函數調用時,必須有值,然後傳值給形參(把實參的值賦值給形參)值傳遞
3,在函數中形參的值可以被修改,但不會影響實參的值,用完就被釋放
函數返回值及注意事項
函數的值(函數返回值):函數被調用後,返回給主調函數的值
主調、被調函數是一個相對的概念
注意:1、使用一個關鍵字return,可以返回常量,變量,表達式,可以加()
2、return類型應與函數定義類型一致,如果不一致,以函數類型爲準
3、int類型的函數定義可以省略(系統默認int),不建議這麼做
函數聲明
在主調函數中,調用某函數之前應該對被調函數進行說明(聲明),告訴編譯器這個函數已經存在了,告訴編譯器被調函數的返回值類型
格式:(把被調函數的頭部copy一份,加上分號;)
返回值類型 被調用函數名 (類型
形參名); 形參名可以省略
注意:1、返回值類型爲int,可以不做聲明(不推薦)
2、被調函數寫在主調函數之前,不作聲明
函數調用
一般形式:函數名(實際參數表);
注意:1、函數表達式
2、函數調用可以作爲另外一個函數的實參
3、函數嵌套調用,自己調自己
遞歸函數概述
遞歸函數:一個函數在他的函數體,調用自身
注意:爲了防止遞歸函數無休止的調用,陷入死循環,應加入限制條件,使遞歸結束
構成遞歸的條件:1、調用自身
2、有限制條件
3、能夠找出規律,縮小問題的規模
遞歸階段:1、遞推階段:問題規模縮小的過程
2、迴歸迭代階段:迭代計算值的過程
內存棧:先進後出(壓棧操作,出棧操作)
//遞歸函數,調用自身
//有5個人,問第五人年齡,第五比第四大2歲.....第一個人說我10歲,求第五個人的年齡
//規律:age(n) = age(n-1) + 2; age(1) = 10;
int
getAge(int
n) {
int
age;
//如果n=1,年齡10
if
(n ==1) {
age = 10;
}
else {
//如果不是第一個人,找前一個人+2
age =
getAge(n -
1) +
2;
}
return
age;
}
//實現X的Y次方,比如2的3次方=8,3的4次方=81,遞歸實現
//2^3 2*2*2 2^2 * 2
//3^4 3*3*3*3 3^3 * 3
//x^y x^(y-1) * x
int
xy(int
x, int
y) {
int
ji;
//判斷y==1
if
(y == 1) {
ji = x;
} else
{
ji = xy(x, y -
1) * x;
}
return
ji;
}
Xcode運行原理
自動編譯:編譯→.o(目標文件)→鏈接(庫函數)→.out執行
Mac基於UNIX文件系統,所有文件都在根目錄下,沒有windows的C,D盤之類的
常用UNIX命令:
sudo -i:管理員模式
ls:列出當前目錄的內容(文件)
pwd:顯示當前目標的名稱
cd:改變當前操作的目錄
who:顯示當前用戶名
clear:清除所有內容(清屏)
mkdir:創建一個目錄
rm:刪除文件
rm -r:刪除文件夾 -f:強制刪除
touch:創建文件
vi/open:打開、創建文件 -q:退出 -wq:保存並退出 -q!:強制退出
:wq!
vi(i:進入編輯模式 esc:退出編輯模式 )
cat/more:查看更多內容
方向鍵:查看歷史命令
手動編譯:寫.c源程序→編譯→.o(目標文件)→鏈接→.out執行
編譯命令:cc -c 文件名(xx.c) →.o文件
鏈接命令:cc .o(xx.o) →.out文件
運行命令:/文件名.out(xx.out)