函數(shù)教學(xué)課件_第1頁(yè)
函數(shù)教學(xué)課件_第2頁(yè)
函數(shù)教學(xué)課件_第3頁(yè)
函數(shù)教學(xué)課件_第4頁(yè)
函數(shù)教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論