版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章
函數(shù)
目標(biāo)
口熟練掌握函數(shù)的結(jié)構(gòu)
口熟練掌握函數(shù)聲明和原型
口熟練掌握函數(shù)的調(diào)用
口理解函數(shù)的嵌套調(diào)用和遞歸調(diào)用
口熟練掌握按值傳遞
□掌握變量的作用域和存儲(chǔ)類型
口理解函數(shù)的作用域
函數(shù)
口獨(dú)立的程序段
口執(zhí)行一個(gè)具體的、明確定義的任務(wù)
口易于編寫、理解、調(diào)試和維護(hù)
口將需要多次執(zhí)行的一組指令定義為函數(shù)
函數(shù)的定義結(jié)構(gòu)
返回值的數(shù)據(jù)類型][有效的函數(shù)名h形式蓼數(shù)
type^specifierfunctionjhame(arg
執(zhí)行部分
)
A
函數(shù)的參數(shù)
U函數(shù)的參數(shù)分為形參和實(shí)參兩種,作用是實(shí)現(xiàn)數(shù)據(jù)傳送。
口形參出現(xiàn)在函數(shù)定義中,只能在該函數(shù)體內(nèi)使用。發(fā)生函
數(shù)調(diào)用時(shí),調(diào)用函數(shù)把實(shí)參的值復(fù)制1份,傳送給被調(diào)用
函數(shù)的形參,從而實(shí)現(xiàn)調(diào)用函數(shù)向被調(diào)用函數(shù)的數(shù)據(jù)傳送。
口其它說明:
口實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等。
口形參變量只有在被調(diào)用時(shí),才分配內(nèi)存單元;調(diào)用結(jié)
束時(shí),即刻釋放所分配的內(nèi)存單元。
口實(shí)參和形參占用不同的內(nèi)存單元,即使同名互不影響。
口在被定義的函數(shù)中,必須指定形參的類型
口實(shí)參與形參的類型應(yīng)相同或賦值兼容。
形參和實(shí)參的示例
函數(shù)的參數(shù)
a2b3
VV
X2y3
注意:實(shí)參值a為3.5,而形參x為整型,
則將實(shí)數(shù)3.5轉(zhuǎn)換成整數(shù)3,然后送到形參b。
字符型與整型可以互相通用。
7
函數(shù)返回值
通常,希望通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,
這就是函數(shù)的返回值。例如,max(2,3)的值是3.
□將控制權(quán)從函數(shù)傳回主調(diào)程序intsquarer(intx)
口才巴return語句中的內(nèi)容返回/*intx;*/
給主調(diào)程序
intj;
j=x*x;
return(j);
//returnx*x;
//returnj;
}
函數(shù)的數(shù)據(jù)類型
口在定義函數(shù)時(shí),對(duì)函數(shù)類型的說明,應(yīng)與return語句中、返
回值表達(dá)式的類型一致。
口如果返回的是一個(gè)整型值或者沒有返回值,可以省略類型
標(biāo)識(shí)符
口為了避免出現(xiàn)不一致,最好指定數(shù)據(jù)類型
(Jnt)squarer(intx)良好的程序設(shè)計(jì)習(xí)慣:為
/*intx;*/了使程序具有良好的可讀
性并減少出錯(cuò),凡不要求
intj;返回值的函數(shù)都應(yīng)定義為
空類型;即使函數(shù)類型為
j=x*x;
整型,也不使用系統(tǒng)的缺
return。);省處理。、一
}
函數(shù)返回值說明
關(guān)于函數(shù)返回值的一些說明:
(1)函數(shù)的返回值是通過函數(shù)中的return語句獲得的。
一個(gè)函數(shù)中可以有一個(gè)以上的return語句,執(zhí)行到哪一個(gè)
return語句,哪一個(gè)語句起作用。return語句后面的括弧也可
以不要,如:"returnz;”等彳介于“return(z);"
(2)函數(shù)的返回值應(yīng)當(dāng)屬于某一個(gè)確定的類型,在定義函數(shù)時(shí)
指定函數(shù)返回值的類型。在c語言中,凡不加類型說明的函數(shù),自動(dòng)按整型
處理
in
(3)在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語句中的
表達(dá)式類型一致。
如果函數(shù)值的類型和return語句中表達(dá)式的值不一致,則以函數(shù)
類型為準(zhǔn)。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。
(4)如果被調(diào)用函數(shù)中沒有return,返回一個(gè)不確定值。對(duì)于
不帶回值的函數(shù),應(yīng)當(dāng)用“void”定義函數(shù)為“無類型”(或
稱“空類型”)o此時(shí)在函數(shù)體中不得出現(xiàn)return語句。
數(shù)原型和函數(shù)聲明
口在定義之前使用函數(shù),必須聲明,否則,一些編譯器會(huì)返
回錯(cuò)誤
口采用函數(shù)原型方式,對(duì)被調(diào)用函數(shù)進(jìn)行說明,其一般格式
如下:
□函數(shù)類型函數(shù)名(數(shù)據(jù)類型[參數(shù)名兒數(shù)據(jù)類型[參數(shù)名2]...]);
#include<stdio.h>
voidaddress();
voidmain(){
address。;//編譯通過
)
voidaddress()
)
調(diào)用函數(shù)
口函數(shù)調(diào)用的一般形式為:函數(shù)名([實(shí)際參數(shù)表]);
口調(diào)用函數(shù)時(shí),函數(shù)名稱必須與具有該功能的自定義函數(shù)名
稱完全一致。
口實(shí)參在個(gè)數(shù)、類型和順序與被調(diào)用函數(shù)的形參,必須一一
對(duì)應(yīng)和匹配。如果類型不匹配,C編譯程序修按賦值兼容
的規(guī)則進(jìn)行轉(zhuǎn)換。
函數(shù)調(diào)用條件
(1)首先被調(diào)用的函數(shù)必須是已經(jīng)存在的函數(shù)(是庫(kù)函數(shù)或用
戶自己定義的函數(shù))。
(2)如果使用庫(kù)函數(shù),還應(yīng)該在本文件開頭用#include命令將
調(diào)用有關(guān)庫(kù)函數(shù)時(shí)所需用到的信息“包含”到本文件中來。
(3)如果使用用戶自己定義的函數(shù),而該函數(shù)的位置在調(diào)用它
的函數(shù)(即主調(diào)函數(shù))的后面(在同一個(gè)文件中),應(yīng)該
在主調(diào)函數(shù)中對(duì)被調(diào)用的函數(shù)作聲明。
AA
文件包含
口文件包含:是指一1個(gè)源文件可以將另夕I1個(gè)源文件的全部
內(nèi)容包含進(jìn)來。
口作用:使編譯系統(tǒng)把指定的被包含文件嵌入到帶有
#include的源文件中。
□示意圖:
file2.cfilel.hfilel.c
包含
B函數(shù)的聲明
A函數(shù)的聲明
定義和聲明
注意:函數(shù)的“定義”和“聲明”不是一回事。函數(shù)的定義是
指對(duì)函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型、形參及
其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。而函
數(shù)的聲明的作用則是把函數(shù)的名字、函數(shù)類型以及形參的類型、
個(gè)數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí),編譯系統(tǒng)能正
確識(shí)別函數(shù)并檢查調(diào)用是否合法。(例如函數(shù)名是否正確,實(shí)
參與形參的類型和個(gè)數(shù)是否一致)。
注:系統(tǒng)不會(huì)檢查參數(shù)名。
▼
函數(shù)調(diào)用的嵌套
口函數(shù)的嵌套調(diào)用是指,在執(zhí)行被調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)
又調(diào)用了其它函數(shù)
f2(){...}
fl0(
f2();
…//后續(xù)語句
}
main()
(
fl0;
...//后續(xù)語句
17
函數(shù)的遞歸調(diào)用
口一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種
函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸
調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。
□間接遞歸
口為了防止遞歸調(diào)用無終止地進(jìn)行,必須在函數(shù)內(nèi)有終止遞
歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件
后就不再作遞歸調(diào)用,然后逐層返回。
直接調(diào)用間接調(diào)用
1ft
利用遞歸求階乘
#include<stdio.h>
intfactorialint);
intmain(){
inti;
for(i=1;i<=10;i++)
printf(ui=%dfactorial:%d\n,,,i,factorial(i));
return0;
)
intfactorialintnumber){
if(number<=1)
return1;
else
return(number*factorial(number-1));
)
參數(shù)傳遞
□調(diào)用一個(gè)函數(shù)時(shí),調(diào)用函數(shù)和被調(diào)用函數(shù)之間會(huì)
發(fā)生數(shù)據(jù)傳遞,有兩種數(shù)據(jù)傳遞方式。
口按值傳遞
內(nèi)存地址:100#
25
25
口按地址傳遞
內(nèi)存地址:100#
100
25
按值傳遞
口變量的值被傳遞給被調(diào)函數(shù),并且對(duì)這個(gè)值的任
何改變并不會(huì)影響被傳變量的原始值
口默認(rèn)情況下,函數(shù)參數(shù)都是按值傳遞的
□參數(shù)值是通過臨時(shí)變量傳遞的
□所有操作都針對(duì)這些臨時(shí)變量
21
逑曲^傳遞的幾種方式
□主調(diào)函數(shù)與被調(diào)函數(shù)進(jìn)行數(shù)據(jù)傳遞的方式有以下
幾種:
口參數(shù)傳遞
□返回值
口全局變量:
口使用全局變量不符合程序設(shè)計(jì)中要求模塊間“強(qiáng)內(nèi)聚性、弱偶
合性”的原則。使這些函數(shù)依賴這些全局變量,因而使得這些
函數(shù)的獨(dú)立性降低。
口使用全局變量過多,會(huì)降低程序的可讀性和可維護(hù)性。
數(shù)組作為函數(shù)參數(shù)
一維數(shù)組元素作函或甚
數(shù)組元素作為函數(shù)的實(shí)參,與用變量作實(shí)參一樣,是單向傳
遞,即“值傳送”方式。
例如:voidswap(intxjnty);
調(diào)用swap(a[0],a[l]);
一維數(shù)組元素作函數(shù)形參?
一維數(shù)組作函數(shù)形參?
二維數(shù)組作函數(shù)形參?
雒數(shù)組作為參數(shù)例子
形鐘賣參都用數(shù)組名,如:
voidf(intaiNO[],intnNum)
aiNO[0]=1;
aiN0[1]=2;
nNum=3;
}
voidmain()
intaiNO[10]={0},nNumber=5;
f(aiNO,nNumber);
printff6%d,%d,%d5\aiNO[0],aiN0[1],nNumber);
//觀察這三個(gè)值有什么變化?
9A
數(shù)組作為函數(shù)形參
數(shù)組作函數(shù)形參注意點(diǎn):
1、實(shí)參數(shù)組名代表數(shù)組元素的首地址。
而形參是用來接收從實(shí)參傳遞過來的數(shù)組首元素地址
2、在被調(diào)用函數(shù)中聲明形參數(shù)組的大小為10,但在實(shí)際上,
指定大小是不起作用的,C編譯器對(duì)形參數(shù)組大小不做檢
查,只是將實(shí)參數(shù)組的首地址傳給形參數(shù)組。
藹部變量和全局變量
口局部變量
口在函數(shù)內(nèi)部聲明
口進(jìn)入一個(gè)程序塊時(shí)創(chuàng)建,退出該程序塊時(shí)銷毀
口形式參數(shù)
口在函數(shù)定義中被聲明為參數(shù)
口在函數(shù)內(nèi)部像局部變量一樣使用
口全局變量
口在所有函數(shù)以外聲明
□在程序的整個(gè)執(zhí)行期間都擁有值
^態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)
口變量從變量值存在的時(shí)間(即生存期)角度分:靜態(tài)存
儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式
口靜態(tài):由系統(tǒng)分配固定的存儲(chǔ)空間,全局變量就存儲(chǔ)在
靜態(tài)存儲(chǔ)區(qū)
口動(dòng)態(tài):系統(tǒng)根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間
在動(dòng)態(tài)存儲(chǔ)區(qū)存放一下數(shù)據(jù):
1、函數(shù)形式參數(shù)用戶區(qū)
2、自動(dòng)變量(未加static聲明)程序區(qū)
3、函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和靜態(tài)存儲(chǔ)區(qū)
返回地址
動(dòng)態(tài)存儲(chǔ)區(qū)
97
存儲(chǔ)類別3-1
口內(nèi)存中的存儲(chǔ)區(qū)域包括下面幾個(gè)部分:
□程序代碼區(qū):存放函數(shù)體的二進(jìn)制代碼
□靜態(tài)區(qū)/全局區(qū)(static):全局變量和靜態(tài)變量的存儲(chǔ)
區(qū)域
口堆區(qū)(heap):程序員分配釋放
口棧區(qū)(stack):由編譯器自動(dòng)分配釋放,存放函數(shù)的
參數(shù)值,局部變量的值
90
存儲(chǔ)類另3-2
口存儲(chǔ)類別是數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式,是變量的
屬性,使用的一般語法:
口存儲(chǔ)類別數(shù)據(jù)類型變量名稱;
□例如:
autointa;
staticintb;//靜態(tài)
registerintI;//寄存器變量
extern
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年文山壯族苗族自治州西疇縣數(shù)學(xué)三年級(jí)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 大學(xué)生軍訓(xùn)心得筆記10篇
- 婚禮新娘答謝詞(15篇)
- 學(xué)生頂崗實(shí)習(xí)報(bào)告
- 標(biāo)準(zhǔn)的辭職報(bào)告模板集合九篇
- 大學(xué)生面試自我介紹集錦15篇
- 藥店疫情應(yīng)急預(yù)案
- 九年級(jí)化學(xué)上冊(cè) 第七單元 燃料及其利用 課題1 燃燒與滅火教學(xué)實(shí)錄 (新版)新人教版
- 小學(xué)語文教師教學(xué)計(jì)劃三篇
- 中專第一學(xué)年自我鑒定集錦7篇
- 幼兒園防止小學(xué)化工作計(jì)劃
- DB1403-T 35-2024 耐火澆注料施工現(xiàn)場(chǎng)管理規(guī)范
- 連鑄工職業(yè)技能大賽考試題庫(kù)-上(單選、多選題)
- 2024年四川省成都市青羊區(qū)數(shù)學(xué)六上期末考試試題含解析
- 內(nèi)蒙古呼和浩特市(2024年-2025年小學(xué)四年級(jí)語文)部編版階段練習(xí)(下學(xué)期)試卷及答案
- 人教版高中地理必修一《常見地貌類型》課件
- DB65-T 4828-2024 和田玉(子料)鑒定
- 人教版(2024新版)七年級(jí)上冊(cè)英語各單元重點(diǎn)單詞、句型背誦清單
- 證券投資學(xué)期末考試卷及答案2套
- 爆花(2023年陜西中考語文試卷記敘文閱讀題及答案)
- 2024住院患者靜脈血栓栓塞癥預(yù)防護(hù)理與管理專家共識(shí)要點(diǎn)(全文)
評(píng)論
0/150
提交評(píng)論