




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ù)傳送。
口其它說(shuō)明:
口實(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ù)返回值
通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,
這就是函數(shù)的返回值。例如,max(2,3)的值是3.
□將控制權(quán)從函數(shù)傳回主調(diào)程序intsquarer(intx)
口才巴return語(yǔ)句中的內(nèi)容返回/*intx;*/
給主調(diào)程序
intj;
j=x*x;
return(j);
//returnx*x;
//returnj;
}
函數(shù)的數(shù)據(jù)類型
口在定義函數(shù)時(shí),對(duì)函數(shù)類型的說(shuō)明,應(yīng)與return語(yǔ)句中、返
回值表達(dá)式的類型一致。
口如果返回的是一個(gè)整型值或者沒(méi)有返回值,可以省略類型
標(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ù)返回值說(shuō)明
關(guān)于函數(shù)返回值的一些說(shuō)明:
(1)函數(shù)的返回值是通過(guò)函數(shù)中的return語(yǔ)句獲得的。
一個(gè)函數(shù)中可以有一個(gè)以上的return語(yǔ)句,執(zhí)行到哪一個(gè)
return語(yǔ)句,哪一個(gè)語(yǔ)句起作用。return語(yǔ)句后面的括弧也可
以不要,如:"returnz;”等彳介于“return(z);"
(2)函數(shù)的返回值應(yīng)當(dāng)屬于某一個(gè)確定的類型,在定義函數(shù)時(shí)
指定函數(shù)返回值的類型。在c語(yǔ)言中,凡不加類型說(shuō)明的函數(shù),自動(dòng)按整型
處理
in
(3)在定義函數(shù)時(shí)指定的函數(shù)類型一般應(yīng)該和return語(yǔ)句中的
表達(dá)式類型一致。
如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)
類型為準(zhǔn)。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。
(4)如果被調(diào)用函數(shù)中沒(méi)有return,返回一個(gè)不確定值。對(duì)于
不帶回值的函數(shù),應(yīng)當(dāng)用“void”定義函數(shù)為“無(wú)類型”(或
稱“空類型”)o此時(shí)在函數(shù)體中不得出現(xiàn)return語(yǔ)句。
數(shù)原型和函數(shù)聲明
口在定義之前使用函數(shù),必須聲明,否則,一些編譯器會(huì)返
回錯(cuò)誤
口采用函數(shù)原型方式,對(duì)被調(diào)用函數(shù)進(jìn)行說(shuō)明,其一般格式
如下:
□函數(shù)類型函數(shù)名(數(shù)據(jù)類型[參數(shù)名兒數(shù)據(jù)類型[參數(shù)名2]...]);
#include<stdio.h>
voidaddress();
voidmain(){
address。;//編譯通過(guò)
)
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í)所需用到的信息“包含”到本文件中來(lái)。
(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)來(lái)。
口作用:使編譯系統(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ù)語(yǔ)句
}
main()
(
fl0;
...//后續(xù)語(yǔ)句
17
函數(shù)的遞歸調(diào)用
口一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種
函數(shù)稱為遞歸函數(shù)。C語(yǔ)言允許函數(shù)的遞歸調(diào)用。在遞歸
調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。
□間接遞歸
口為了防止遞歸調(diào)用無(wú)終止地進(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ù)值是通過(guò)臨時(shí)變量傳遞的
□所有操作都針對(duì)這些臨時(shí)變量
21
逑曲^傳遞的幾種方式
□主調(diào)函數(shù)與被調(diào)函數(shù)進(jìn)行數(shù)據(jù)傳遞的方式有以下
幾種:
口參數(shù)傳遞
□返回值
口全局變量:
口使用全局變量不符合程序設(shè)計(jì)中要求模塊間“強(qiáng)內(nèi)聚性、弱偶
合性”的原則。使這些函數(shù)依賴這些全局變量,因而使得這些
函數(shù)的獨(dú)立性降低。
口使用全局變量過(guò)多,會(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ù)組元素的首地址。
而形參是用來(lái)接收從實(shí)參傳遞過(guò)來(lái)的數(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ǔ)形式,是變量的
屬性,使用的一般語(yǔ)法:
口存儲(chǔ)類別數(shù)據(jù)類型變量名稱;
□例如:
autointa;
staticintb;//靜態(tài)
registerintI;//寄存器變量
extern
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房租賃協(xié)議合同
- 開發(fā)商商鋪?zhàn)赓U合同
- 煙酒的購(gòu)銷合同
- 上饒衛(wèi)生健康職業(yè)學(xué)院《人類的生育與健康》2023-2024學(xué)年第二學(xué)期期末試卷
- 梧州醫(yī)學(xué)高等專科學(xué)?!掇r(nóng)村小學(xué)復(fù)式教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 曲靖職業(yè)技術(shù)學(xué)院《文學(xué)翻譯(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北科技學(xué)院《女子乒乓球(I)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東協(xié)和學(xué)院《藥理學(xué)理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古鴻德文理學(xué)院《國(guó)際貿(mào)易實(shí)務(wù)模擬實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 延安大學(xué)西安創(chuàng)新學(xué)院《素描造型人體訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025高中物理《課時(shí)作業(yè)》人教版選擇性必修第1冊(cè)課時(shí)分層作業(yè)(八)
- 地震災(zāi)害避險(xiǎn)與自救手冊(cè)
- 疫情統(tǒng)計(jì)學(xué)智慧樹知到答案2024年浙江大學(xué)
- 2024住院患者靜脈血栓栓塞癥預(yù)防護(hù)理與管理專家共識(shí)要點(diǎn)(全文)
- 火鍋店后廚培訓(xùn)計(jì)劃
- CJJ6-2009 城鎮(zhèn)排水管道維護(hù)安全技術(shù)規(guī)程
- JT-T-1253-2019道路運(yùn)輸車輛衛(wèi)星定位系統(tǒng)車輛終端檢測(cè)方法
- QCT1177-2022汽車空調(diào)用冷凝器
- 六年級(jí)下健康教案設(shè)計(jì)
- 人美版新課標(biāo)小學(xué)三年級(jí)美術(shù)(下冊(cè))
- 2024年04月國(guó)家藥品監(jiān)督管理局藥品審評(píng)檢查長(zhǎng)三角分中心招考聘用筆試筆試歷年典型考題及考點(diǎn)研判與答案解析
評(píng)論
0/150
提交評(píng)論