C語(yǔ)言程序設(shè)計(jì)課件第7章 7.2函數(shù)的調(diào)用_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第7章 7.2函數(shù)的調(diào)用_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第7章 7.2函數(shù)的調(diào)用_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第7章 7.2函數(shù)的調(diào)用_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第7章 7.2函數(shù)的調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)

錄目錄CONTENTS

函數(shù)概述7.1

函數(shù)定義7.2

函數(shù)的調(diào)用7.3函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)際參數(shù)表列)需要說(shuō)明以下幾點(diǎn):如果調(diào)用無(wú)參函數(shù),則“實(shí)際參數(shù)表列”可以沒(méi)有,但括號(hào)不能省略。實(shí)際參數(shù)(簡(jiǎn)稱“實(shí)參”)表中實(shí)參的類型及個(gè)數(shù)必須與形參相同,并且順序一致。當(dāng)有多個(gè)實(shí)參時(shí),參數(shù)之間用逗號(hào)隔開(kāi)。實(shí)參可以是常量、有確定值的變量或表達(dá)式及函數(shù)調(diào)用。

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式123【例7-3】求兩個(gè)實(shí)數(shù)的平均值?!締?wèn)題分析】在這里我們定義一個(gè)有參函數(shù)用于計(jì)算兩實(shí)數(shù)的平均值。在主函數(shù)中可以多次調(diào)用此函數(shù)用于計(jì)算不同數(shù)值的平均值。

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式【參考代碼】#include<stdio.h>floataverage(floatx,floaty) /*定義函數(shù)用于計(jì)算兩數(shù)的平均值,x和y為形參*/{floatav; /*定義變量av用于存放平均值*/

av=(x+y)/2.0; /*求平均值*/

returnav; /*返回av的值*/}intmain(){

floata=1.8,b=2.6,c;

c=average(a,b); /*實(shí)參為確定值的變量*/

printf("Theavergaeof%5.2fand%5.2fis%5.2f\n",a,b,c);

c=average(a,a+b); /*實(shí)參為表達(dá)式*/

printf("Theavergaeof%5.2fand%5.2fis%5.2f\n",a,a+b,c);

c=average(2.0,4.0); /*實(shí)參為常量*/

printf("Theavergaeof2.0and4.0is%5.2f\n",c);

c=average(c,average(a,b)); /*實(shí)參為函數(shù)調(diào)用*/

printf("Theavergaeis%5.2f\n",c);}

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖所示。

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式【程序說(shuō)明】求兩個(gè)實(shí)數(shù)的平均值函數(shù)average有兩個(gè)形式參數(shù)x和y,這兩個(gè)參數(shù)用來(lái)接收調(diào)用函數(shù)時(shí)傳遞來(lái)的變量或表達(dá)式的值。該程序主函數(shù)調(diào)用了四次average函數(shù),第一次調(diào)用時(shí),用形式參數(shù)x和y接收實(shí)參變量a和b的值;第二次調(diào)用時(shí),用表達(dá)式a+b作為實(shí)參之一,將a和a+b的值傳給形參x和y;第三次調(diào)用時(shí),用常量作為實(shí)參,將2.0和4.0的值傳給x和y;第四次調(diào)用時(shí),用函數(shù)調(diào)用average(a,b)作為實(shí)參之一,將c和average(a,b)的值傳給形參x和y。按被調(diào)用函數(shù)在主調(diào)函數(shù)中出現(xiàn)的位置和完成的功能進(jìn)行劃分,函數(shù)調(diào)用有下列三種調(diào)用方式。

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,如例7-2中的“window();”,這時(shí)不要求函數(shù)帶回值,只要求函數(shù)完成一定的操作。1在表達(dá)式中調(diào)用函數(shù),這種表達(dá)式稱為函數(shù)表達(dá)式。這時(shí)要求函數(shù)帶回一個(gè)確定的值以參加表達(dá)式的運(yùn)算。例如:c=average(a,b); /*將調(diào)用函數(shù)的結(jié)果賦值給c*/d=8*average(a,b); /*將調(diào)用函數(shù)的結(jié)果乘以8后賦值給d*/2將函數(shù)調(diào)用作為另一個(gè)函數(shù)調(diào)用的實(shí)參。例如:c=average(c,average(a,b));此處把a(bǔ)verage(a,b)作為average函數(shù)的一個(gè)參數(shù)。3

7.3函數(shù)的調(diào)用7.3.1函數(shù)的調(diào)用形式在一個(gè)函數(shù)調(diào)用另一個(gè)函數(shù)時(shí),如果使用用戶自定義函數(shù),并且該函數(shù)與主調(diào)函數(shù)在同一個(gè)文件中,此時(shí)一般被調(diào)用函數(shù)應(yīng)放在主調(diào)函數(shù)之前定義。若被調(diào)用函數(shù)的定義在主調(diào)函數(shù)之后出現(xiàn),就必須在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)加以聲明。函數(shù)聲明的一般形式為:類型說(shuō)明符函數(shù)名(形參表);函數(shù)聲明實(shí)際上就是函數(shù)定義時(shí)的函數(shù)頭,后面加分號(hào)構(gòu)成一條聲明語(yǔ)句。函數(shù)聲明與函數(shù)頭的區(qū)別是,函數(shù)聲明的形參表中可以只寫類型名,而不寫形參名。例如,下面兩種寫法都是正確的:floataverage(floatx,floaty);floataverage(float,float);【例7-4】輸入兩個(gè)實(shí)數(shù),用一個(gè)函數(shù)求出兩數(shù)中較小數(shù)。【問(wèn)題分析】分別編寫min函數(shù)和main函數(shù),main函數(shù)在min函數(shù)之前,需要在main函數(shù)中對(duì)min函數(shù)進(jìn)行聲明。

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明【參考代碼】#include<stdio.h>intmain(){floatx,y,z;

floatmin(floata,floatb); /*函數(shù)聲明*/

printf("Pleaseentertwonumbers:");

scanf("%f

%f",&x,&y);

z=min(x,y); /*函數(shù)調(diào)用*/

printf("minis%f\n",z); /*輸出結(jié)果*/

return0;}floatmin(floata,floatb) /*函數(shù)定義*/{

floatc;

if(a>b) /*比較大小,將較小數(shù)賦值給c*/ c=b;

else c=a;

returnc; /*返回值為c*/}

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖所示。

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明【程序說(shuō)明】程序第5行是對(duì)被調(diào)用的min函數(shù)的聲明:floatmin(floata,floatb);從程序中可以看到,main函數(shù)的位置在min函數(shù)的前面,而程序編譯時(shí)是從上到下逐行進(jìn)行的。如果沒(méi)有對(duì)min函數(shù)的聲明,當(dāng)編譯到程序第8行(z=min(x,y);)時(shí),編譯系統(tǒng)將無(wú)法確定min是不是函數(shù)名,也無(wú)法判斷實(shí)參(x和y)的類型和格式是否正確,因此,在調(diào)用函數(shù)前必須對(duì)被調(diào)函數(shù)加以聲明。C語(yǔ)言規(guī)定以下幾種情況,可以不在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行聲明:如果被調(diào)函數(shù)寫在主調(diào)函數(shù)的前面,可以不必進(jìn)行聲明。例7-2和例7-3均屬于此種情況,在此不再贅述。1如果函數(shù)的返回值為整型或字符型,可以不必進(jìn)行聲明。2

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明【例7-5】通過(guò)自定義函數(shù),求任意兩個(gè)整數(shù)的和?!緟⒖即a】#include<stdio.h>intsum(int,int);

intmain(){inta,b;

printf("inputtwointegers:");

scanf("%d

%d",&a,&b);

printf("Thesumof%dand%dis%d\n",a,b,sum(a,b)); /*調(diào)用函數(shù)*/

return0;}intsum(inta,intb) /*函數(shù)定義*/{

return(a+b); /*返回a+b的值*/}

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖所示。

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明如果在所有函數(shù)定義之前,在源程序文件的開(kāi)頭,即在函數(shù)的外部已經(jīng)對(duì)函數(shù)進(jìn)行了聲明,則在各個(gè)調(diào)用函數(shù)中不必再對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。例如,例7-4程序中也可將第5行函數(shù)聲明(floatmin(floata,floatb);)放到main函數(shù)之前。3

名師點(diǎn)睛在調(diào)用函數(shù)前,可以在主調(diào)函數(shù)內(nèi)部對(duì)被調(diào)函數(shù)進(jìn)行聲明。如果使用這種聲明方式,則本次函數(shù)聲明只在主調(diào)函數(shù)內(nèi)部有效,也就是說(shuō),如果其他函數(shù)中也需要調(diào)用該被調(diào)函數(shù),在那些函數(shù)中對(duì)被調(diào)函數(shù)仍然需要進(jìn)行聲明。如果已經(jīng)在文件的開(kāi)頭(或在函數(shù)前)對(duì)某函數(shù)進(jìn)行了聲明,則從聲明處開(kāi)始,在本文件中對(duì)聲明函數(shù)的調(diào)用不需要再次進(jìn)行聲明。

7.3函數(shù)的調(diào)用7.3.2函數(shù)聲明在調(diào)用有參函數(shù)時(shí),主調(diào)函數(shù)和被調(diào)函數(shù)之間往往有數(shù)據(jù)傳遞關(guān)系。前面已經(jīng)介紹過(guò),在定義函數(shù)時(shí)函數(shù)名后面圓括號(hào)內(nèi)的為“形式參數(shù)”(簡(jiǎn)稱“形參”),用于接收主調(diào)函數(shù)傳來(lái)的數(shù)據(jù);在調(diào)用函數(shù)時(shí),函數(shù)調(diào)用語(yǔ)句的函數(shù)名后面圓括號(hào)中的內(nèi)容為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”)。在調(diào)用函數(shù)過(guò)程中,系統(tǒng)會(huì)把實(shí)參的值傳遞給被調(diào)用函數(shù)的形參。該值在函數(shù)調(diào)用期間有效,可以參加該函數(shù)的運(yùn)算。例如,例7-4程序中第12~20行是一個(gè)被調(diào)函數(shù)(注意第12行的末尾沒(méi)有分號(hào))。第12行定義了一個(gè)函數(shù)名為min,函數(shù)類型為float的函數(shù)。指定兩個(gè)形參a和b,形參的類型為float。主調(diào)函數(shù)main的第8行(z=min(x,y);)是一個(gè)函數(shù)調(diào)用語(yǔ)句,表示調(diào)用min函數(shù),此處函數(shù)名min后面圓括號(hào)內(nèi)的x和y是實(shí)參。x和y是主調(diào)函數(shù)main函數(shù)中定義的變量,a和b是被調(diào)函數(shù)min中定義的形參變量,通過(guò)函數(shù)調(diào)用,使兩個(gè)函數(shù)之間發(fā)生數(shù)據(jù)傳遞。實(shí)參x和y的值按順序?qū)?yīng)傳遞給被調(diào)函數(shù)中的形參a和b,x傳給a,y傳給b。在執(zhí)行被調(diào)函數(shù)min后,其返回值c作為函數(shù)的返回值返回給主調(diào)函數(shù),賦給變量z。

7.3函數(shù)的調(diào)用7.3.3函數(shù)的參數(shù)傳遞

名師點(diǎn)睛關(guān)于形參和實(shí)參的說(shuō)明如下:(1)函數(shù)中指定的形參變量,在未出現(xiàn)函數(shù)調(diào)用時(shí),并不占用內(nèi)存單元。在發(fā)生函數(shù)調(diào)用時(shí),被調(diào)函數(shù)的形參被臨時(shí)分配內(nèi)存單元,調(diào)用結(jié)束后,形參所占的內(nèi)存單元被自動(dòng)釋放。(2)函數(shù)一旦被定義,就可多次調(diào)用,但必須保證形參和實(shí)參數(shù)據(jù)類型一致。如果實(shí)參和形參數(shù)據(jù)類型不一致,則按不同類型數(shù)值的賦值規(guī)則進(jìn)行轉(zhuǎn)換。例如,實(shí)參a為float型變量,其值為5.8,而形參x為int型,則在傳遞時(shí)先將實(shí)數(shù)5.8轉(zhuǎn)換成整數(shù)5,然后送到形參x。(3)實(shí)參可以是常量、變量或表達(dá)式,但要求它們有確定的值。(4)在被定義的函數(shù)中,必須指定形參的數(shù)據(jù)類型。(5)C語(yǔ)言規(guī)定,實(shí)參對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回給實(shí)參。

7.3函數(shù)的調(diào)用7.3.3函數(shù)的參數(shù)傳遞【例7-6】閱讀下面的程序,試分析運(yùn)行結(jié)果。#include<stdio.h>intswap(inti,intj){intt;

t=i;i=j;j=t;

printf("Infunctioni=%d,j=%d\n",i,j);}intmain(){

inti=2,j=3;

swap(i,j);

printf("Outfunctioni=%d,j=%d\n",i,j);

return0;}

7.3函數(shù)的調(diào)用7.3.3函數(shù)的參數(shù)傳遞【運(yùn)行結(jié)果】程序運(yùn)行結(jié)果如圖所示。【程序說(shuō)明】該程序中的swap函數(shù)的作用是將形參i和j兩數(shù)互換,因此,在函數(shù)內(nèi)部輸出i和j時(shí),兩數(shù)實(shí)現(xiàn)了交換。但是,C語(yǔ)言中規(guī)定:只能把實(shí)參數(shù)值傳遞給形參,而形參不能把數(shù)值傳遞給實(shí)參。因此,main函數(shù)中的i和j還是原來(lái)的值,沒(méi)有實(shí)現(xiàn)交換。

7.3函數(shù)的調(diào)用7.3.3函數(shù)的參數(shù)傳遞一般情況下,主調(diào)函數(shù)調(diào)用完被調(diào)函數(shù)后,都希望能夠得到一個(gè)確定的值,這就是函數(shù)的返回值。在C語(yǔ)言中,函數(shù)返回值是通過(guò)return語(yǔ)句來(lái)實(shí)現(xiàn)的。return語(yǔ)句的一般形式有三種:return(表達(dá)式);return表達(dá)式;return;下面對(duì)返回語(yǔ)句和函數(shù)返回值作一些說(shuō)明。(1)return語(yǔ)句可使函數(shù)從被調(diào)函數(shù)中退出,返回到調(diào)用它的代碼處,并向調(diào)用函數(shù)返回一個(gè)確定的值。如果需要從被調(diào)函數(shù)帶回一個(gè)函數(shù)值(供主調(diào)函數(shù)使用),被調(diào)函數(shù)中必須包含return語(yǔ)句且return中帶表達(dá)式,此時(shí)使用return語(yǔ)句的前兩種形式均可。如果不需要從被調(diào)函數(shù)帶回函數(shù)值,應(yīng)該用不帶表達(dá)式的return語(yǔ)句;也可以不要return語(yǔ)句,這時(shí)被調(diào)函數(shù)一直執(zhí)行到函數(shù)體的末尾,然后返回主調(diào)函數(shù)。在這種情況下,會(huì)返回一個(gè)不確定的函數(shù)值,因此,一般不提倡使用這種方法返回。(2)一個(gè)函數(shù)中可以有多個(gè)return語(yǔ)句,執(zhí)行到哪一個(gè)return語(yǔ)句,哪一個(gè)語(yǔ)句就起作用。(3)在定義函數(shù)時(shí)應(yīng)當(dāng)指定函數(shù)的類型,并且函數(shù)的類型一般應(yīng)與return語(yǔ)句中表達(dá)式的類型一致。當(dāng)二者不一致時(shí),應(yīng)以函數(shù)的類型為準(zhǔn),即函數(shù)的類型決定返回值的類型。對(duì)于數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。

7.3函數(shù)的調(diào)用7.3.4返回語(yǔ)句和函數(shù)返回值【例7-7】將例7-5中程序稍作改動(dòng),修改后的程序代碼如下所示,分析其運(yùn)行結(jié)果。#include<stdio.h>intmain(){ floatx,y,z; intmin(floata,floatb); /*函數(shù)聲明*/ printf("Pleasee

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論