函數部分
1、函數是程序的基本組成單位,其中主函數在每一個程序有且只有一個,並且程序必須從主函數開始執行。
有參函數
參數
無參函數
2、函數 有返回值函數
返回值
無返回值函數
3、函數的定義
函數返回值類型 函數名(類型 形參1,類型 形參2) ——>首部定義
{
聲明部分; ——>函數體
執行部分;
}
4、若省略函數返回值類型,則默認爲整型
5、若函數有返回值,則必須通過return返回,並且return語句一旦執行,其後面語句不再執行
6、return的格式
(1)return 表達式;
(2)return (表達式);
7、若函數的返回類型與return的返回類型不一致,則以定義時爲標準
Eg:(1)int fun()
{
float a = 2.6 ;
return a;
}
則a = 2
(2)float fun()
{
int a = 7 ;
return a;
}
則a = 7.0
8、若函數無返回值,則將其類型定義爲空類型,即void。並且函數體中不再出現return語句
Eg:void fun()
{
int a = 2;
a = a+1;
return a; //此處錯誤
}
9、函數的調用
函數名 (實參1,實參2)
10、常見的函數調用
(1)通過語句調用:fun (x ,y )
(2)通過表達式調用:sum = fun (x , y)
(3)通過參數調用:fun(x ,fun (m,n))
(4)通過遞歸調用
11、調用執行流程
在程序中,看到函數的調用語句,則轉去執行被調用的函數,若有參數,應進行參數間傳遞,即把實參的值傳遞給對應的形參,函數執行完畢,返回函數調用處
12、調用原則
調用
(1)主函數 子函數 (主能調用子,子不能調用主)
主函數由系統提供,只能由系統調用
調用
(2)子函數 子函數 (子函數間可相互調用)
13、函數可以嵌套調用,但不能嵌套定義
14、若函數的定義出現在函數調用之後,則在調用前加上函數的聲明語句
聲明語句 = 首部定義+分號
在單向值傳遞中,形參的改變對實參沒有影響
遞歸調用:函數自身調用自身叫做函數的遞歸調用
(1)形式
直接遞歸:fun ——> fun
間接遞歸: fun ——> fun c ——> fun
(2)步驟
遞:遞推——>向外展開
歸:迴歸——>向內返回
變量的作用域和存儲域
變量的存儲域
(1)靜態變量:static eg:static int a;
(2)動態變量:auto eg:auto int a;
注:定義動態變量時,auto可以省略不寫
靜態與動態的區別:
Eg:int a; static int a;
Printf(“%d\n”,a); Printf(“%d\n”,a);
輸出隨機值 輸出0
注:動態變量未賦初值,默認爲隨機值
靜態變量未賦初值,默認爲0
在調用函數時,動態變量的初始化每次都要執行,而靜態變量的初始化只在第一次執行,以後不再執行
變量的作用域
(1)全局變量:在函數之外定義的變量,他的有效範圍從定義的位置開始,到整個程序結束
(2)局部變量
在函數體內部或複合語句體內定義的變量,他只在該函數或該複合體內有效