程序設(shè)計(jì)語(yǔ)言課件_第1頁(yè)
程序設(shè)計(jì)語(yǔ)言課件_第2頁(yè)
程序設(shè)計(jì)語(yǔ)言課件_第3頁(yè)
程序設(shè)計(jì)語(yǔ)言課件_第4頁(yè)
程序設(shè)計(jì)語(yǔ)言課件_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

第七章函數(shù)C語(yǔ)言程序是由許多函數(shù)組合而成,其中主函數(shù)main是必須要有的,它是整個(gè)程序的入口和出口(不論main函數(shù)處于程序中的什么位置)。函數(shù)有庫(kù)函數(shù)和用戶自行編寫的函數(shù)兩種。如我們前面使用到的scanf()與printf()函數(shù)是系統(tǒng)提供的庫(kù)函數(shù),我們只要正確調(diào)用它就可以了,無(wú)須用戶自已編寫,但使用前請(qǐng)?jiān)诔绦蜷_頭處加下#include<頭文件名>,否則無(wú)法使用。對(duì)庫(kù)函數(shù)和用戶自行編寫好的函數(shù)(既函數(shù)定義)的使用,即函數(shù)調(diào)用格式如下:函數(shù)名(參數(shù)表)例如y=x2.5+1.3C程序中應(yīng)寫為y=pow(x,2.5)+1.3;x和2.5是pow的兩個(gè)參數(shù)第一節(jié)函數(shù)的定義和返回值與函數(shù)相關(guān)的概念一個(gè)較大的程序一般應(yīng)分為若干個(gè)程序模塊,每個(gè)模塊用來(lái)實(shí)現(xiàn)一個(gè)特定的功能。在C語(yǔ)言中用函數(shù)來(lái)實(shí)現(xiàn)模塊的功能。一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成。由主函數(shù)調(diào)用其他函數(shù),其他函數(shù)之間也可以相互調(diào)用,但是不能調(diào)用主函數(shù)。同一個(gè)函數(shù)可以被一個(gè)或多個(gè)函數(shù)調(diào)用任意多次。關(guān)于函數(shù)的幾點(diǎn)說(shuō)明如下:1)一個(gè)源程序文件由一個(gè)或多個(gè)函數(shù)組成。一個(gè)源文件是一個(gè)編譯單位,即以源程序?yàn)閱挝贿M(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。2)一個(gè)C程序由一個(gè)或多個(gè)源程序文件組成。一個(gè)源文件可以為多個(gè)C程序公用。3)C程序的執(zhí)行從main函數(shù)開始,調(diào)用其他函數(shù)后流程返回到main函數(shù),在main函數(shù)中結(jié)束整個(gè)程序的運(yùn)行。4)所有函數(shù)都是平行的,即在定義函數(shù)時(shí)是互相獨(dú)立的,一個(gè)函數(shù)并不從屬于另一個(gè)函數(shù),即函數(shù)不能嵌套定義。函數(shù)間可以互相調(diào)用,但不能調(diào)用main函數(shù);5)從用戶使用角度看,函數(shù)分為標(biāo)準(zhǔn)函數(shù)即庫(kù)函數(shù)和用戶自已定義的函數(shù)兩種。6)從函數(shù)的形式看,函數(shù)分為無(wú)參函數(shù)、有參函數(shù)兩種。函數(shù)的定義方法1、無(wú)參函數(shù)的定義形式類型標(biāo)識(shí)符函數(shù)名(){聲明部分語(yǔ)句部分}用類型標(biāo)識(shí)符指定函數(shù)值的類型,即函數(shù)應(yīng)該帶回來(lái)的值的類型。無(wú)參函數(shù)一般不需要帶回函數(shù)值,因此可以不寫類型標(biāo)識(shí)符。2、有參函數(shù)的定義形式類型標(biāo)識(shí)符函數(shù)名(類型名形式參數(shù)1,類型名形式參數(shù)2,……){聲明部分語(yǔ)句部分}如果在定義函數(shù)時(shí)不指定函數(shù)類型,系統(tǒng)會(huì)隱含指定函數(shù)類型為int型。例:doubleadd(doublea,doubleb){doubles;s=a+b;returns;}注:函數(shù)體中,除形參外,用到的其它變量必須在說(shuō)明部分進(jìn)行定義。這些變量只在函數(shù)被調(diào)用時(shí)才臨時(shí)開辟存儲(chǔ)單元,退出函數(shù)時(shí),開辟的空間全部被釋放。3、空函數(shù)的一般定義方式類型標(biāo)識(shí)符函數(shù)名(){}調(diào)用這樣的函數(shù)時(shí),什么工作也不做,沒(méi)有任何實(shí)際作用。只是先占一個(gè)位置,說(shuō)明此處要調(diào)用一個(gè)函數(shù)。這樣做的目的是使程序的結(jié)構(gòu)清楚,可讀性好,可擴(kuò)充性強(qiáng),對(duì)程序結(jié)構(gòu)影響不大。[例]以下敘述中正確的是()A)構(gòu)成C程序的基本單位是函數(shù)B)可以在一個(gè)函數(shù)中定義另一個(gè)函數(shù)C)main函數(shù)必須放在其他函數(shù)之前D)所有被調(diào)用的函數(shù)一定要在調(diào)用之前進(jìn)行定義答案:A函數(shù)的返回值通常,希望通過(guò)函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值,這就是函數(shù)的返回值。1)函數(shù)返回值一般由return語(yǔ)句帶回:格式一:return表達(dá)式;或return(表達(dá)式);利用這種形式的return語(yǔ)句控制函數(shù)返回時(shí)要帶回一個(gè)表達(dá)式,此表達(dá)式的值就是函數(shù)的返回值。格式二:return;如此使用return語(yǔ)句時(shí),只起控制流程作用,不帶回任何值,故此時(shí)函數(shù)亦為void型。如果需要從被調(diào)用函數(shù)帶回一個(gè)函數(shù)值(供主調(diào)函數(shù)使用),被調(diào)用函數(shù)中必須包含return語(yǔ)句。如果不需要從被調(diào)用函數(shù)帶回函數(shù)值可以不包含return語(yǔ)句。一個(gè)函數(shù)中可以有一個(gè)以上的return語(yǔ)句,執(zhí)行到哪一個(gè)return語(yǔ)句,哪一個(gè)語(yǔ)句就起作用。2)函數(shù)值的類型應(yīng)該在定義函數(shù)時(shí)指定。并且在定義函數(shù)時(shí)對(duì)函數(shù)值說(shuō)明的類型一般應(yīng)該和return語(yǔ)句中的表達(dá)式類型一致。3)如果函數(shù)值的類型和return語(yǔ)句中表達(dá)式的值不一致,則以函數(shù)類型為準(zhǔn)。對(duì)數(shù)值型數(shù)據(jù),可以自動(dòng)進(jìn)行類型轉(zhuǎn)換。即函數(shù)類型決定返回值的類型。4)如果被調(diào)用函數(shù)中沒(méi)有return語(yǔ)句,并不帶回一個(gè)確定的、用戶所希望得到的函數(shù)值,但實(shí)際上,函數(shù)并不是不帶回值,而只是不帶回有用的值,帶回的是一個(gè)不確定的值。5)為了明確表示“不帶回值”,可以用void定義為“無(wú)類型”或稱(“空類型”)。[例]以下函數(shù)值的類型是()func(floata){floats;s+=5*a-1;returns;}A)intB)voidC)floatD)不確定答案:A形式參數(shù)與實(shí)在參數(shù)、參數(shù)值的傳遞1、形式參數(shù)與實(shí)在參數(shù)在調(diào)用函數(shù)時(shí),大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的變量名稱為“形式參數(shù)”(簡(jiǎn)稱“形參”),在主調(diào)函數(shù)中調(diào)用一個(gè)函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)(可以是一個(gè)表達(dá)式)稱為“實(shí)際參數(shù)”(簡(jiǎn)稱“實(shí)參”)。關(guān)于形參和實(shí)參的幾點(diǎn)說(shuō)明:1)在定義函數(shù)中指定的形參,在未出現(xiàn)函數(shù)調(diào)用時(shí),它們并不占內(nèi)存的存儲(chǔ)單元。只有在發(fā)生函數(shù)調(diào)用時(shí),函數(shù)的形參才分配內(nèi)存單元;2)實(shí)參可以是常量、變量或表達(dá)式;3)在被定義的函數(shù)中,必須指定形參的類型;4)實(shí)參與形參的類型應(yīng)相同或賦值兼容;5)C語(yǔ)言規(guī)定,實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回給實(shí)參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。2、參數(shù)值的傳遞參數(shù)值的傳遞分兩種:值傳遞和傳地址。傳地址一般是指指針變量作形參,后面章節(jié)介紹。[例]有以下函數(shù)調(diào)用語(yǔ)句:fun(x+y,(a,b),fun(n+k,a,(x,y)));則函數(shù)fun的形參個(gè)數(shù)為_______。答案:3第二節(jié)函數(shù)的調(diào)用

a、調(diào)用的一般形式1、函數(shù)名(實(shí)在參數(shù)表);

函數(shù)的調(diào)用可作為表達(dá)式出現(xiàn)在允許表達(dá)式出現(xiàn)的任何地方。2、函數(shù)名();

這種用法可以僅進(jìn)行某些操作而沒(méi)有返回值,這時(shí)函數(shù)的調(diào)用可作用一條獨(dú)立的語(yǔ)句。b、注意:1.函數(shù)必須先定義,后調(diào)用,即函數(shù)應(yīng)在main函數(shù)之前定義。函數(shù)返回值類型為int或char時(shí),被調(diào)用函數(shù)的定義也可以放在調(diào)用位置之后,即在main函數(shù)之后定義。例:voidmain(){printf("%d\n",add(2,3));}add(inta,intb){returna+b;}2.函數(shù)可以直接或間接的調(diào)用自己,稱為遞歸調(diào)用3.實(shí)在參數(shù)個(gè)數(shù)必須與形式參數(shù)個(gè)數(shù)一致。實(shí)參可以是表達(dá)式,在類型上應(yīng)按位置與形參一一對(duì)應(yīng)匹配。如果類型不匹配,C編譯程序按賦值兼容的規(guī)則進(jìn)行轉(zhuǎn)換,如形參為double類型,而實(shí)參為int類型,這時(shí)實(shí)參代入形參時(shí),將轉(zhuǎn)為double類型。如果實(shí)參與形參類型不賦值兼容,通常程序并不報(bào)錯(cuò),但不會(huì)得到正確結(jié)果,因此注意實(shí)參與形參一定要保證類型匹配。c、函數(shù)調(diào)用的方式按函數(shù)在程序中出現(xiàn)位置分,可以有三種函數(shù)調(diào)用方式:1)函數(shù)語(yǔ)句:把函數(shù)調(diào)用作為一個(gè)語(yǔ)句,這時(shí)不要求函數(shù)返回值,只要求函數(shù)完成一定的操作;2)函數(shù)表達(dá)式:函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,這種表達(dá)式稱為函數(shù)表達(dá)式。這時(shí)要求函數(shù)返回一個(gè)確定的值以參加表達(dá)式的運(yùn)算;3)函數(shù)參數(shù):函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。函數(shù)調(diào)用作為函數(shù)的參數(shù),實(shí)質(zhì)上也是函數(shù)表達(dá)式形式調(diào)用的一種,因?yàn)楹瘮?shù)的參數(shù)本來(lái)就要求是表達(dá)式形式。d、對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型在一個(gè)函數(shù)中調(diào)用另一個(gè)函數(shù)(即被調(diào)用函數(shù))需要具備的條件:1)被調(diào)用函數(shù)必須是已經(jīng)存在的函數(shù)(是庫(kù)函數(shù)或用戶自定義的函數(shù));2)如果使用庫(kù)函數(shù),應(yīng)該在程序開頭用#include命令將有關(guān)庫(kù)函數(shù)在被調(diào)用時(shí)所需用到的信息包含到本程序中來(lái);3)如果使用用戶自定義的函數(shù),而且該函數(shù)與被調(diào)用它的函數(shù)(即主調(diào)函數(shù))在同一個(gè)文件中,一般還應(yīng)該在主調(diào)函數(shù)中對(duì)被調(diào)用函數(shù)作聲明,即向編譯系統(tǒng)聲明將要調(diào)用此函數(shù),并將有關(guān)信息通知編譯系統(tǒng)。第三節(jié)函數(shù)的聲明上節(jié)說(shuō)過(guò)返回值為int或char時(shí),函數(shù)可以在調(diào)用后定義,如果想即在調(diào)用后定義,而且返回值不是int或char的其它類型,應(yīng)在調(diào)用前對(duì)函數(shù)進(jìn)行聲明。其聲明的一般形式如下:類型名函數(shù)名(參數(shù)類型1,參數(shù)類型2,…..)如doubleadd(double,double)函數(shù)說(shuō)明可以是一條獨(dú)立的語(yǔ)句,如:

doubleadd(double,double);也可以與普通變量一起在定義語(yǔ)句中定義。如:

doublex,y,add(double,double);例:voidmain(){doubleadd(double,double);printf("%f\n",add(2,3));}doubleadd(doublea,doubleb){returna+b;}注意:函數(shù)聲明的位置當(dāng)某函數(shù)聲明在所有函數(shù)前部,該函數(shù)可以在所有函數(shù)中使用。但如果聲明在某函數(shù)內(nèi),那么該函數(shù)就只能在該函數(shù)中使用,如在main函數(shù)中聲明,就只能在main中使用該函數(shù)。doubleadd(double,double);doublereduce(){returnadd(2,3)-1;}voidmain(){printf("%f\n",add(2,3));printf("%f\n",reduce());}doubleadd(doublea,doubleb){returna+b;}注意:對(duì)函數(shù)的定義和聲明并不是一回事。定義:是指對(duì)函數(shù)功能的確立,包括指定函數(shù)名、函數(shù)類型、形參及其類型、函數(shù)體等,它是一個(gè)完整的、獨(dú)立的函數(shù)單位。聲明:聲明的作用則是把函數(shù)名、函數(shù)類型以及形參的類型、個(gè)數(shù)和順序通知編譯系統(tǒng),以便在調(diào)用該函數(shù)時(shí)系統(tǒng)按此進(jìn)行對(duì)照檢查(例如函數(shù)名是否正確,實(shí)參與形參的類型和個(gè)數(shù)是否一致)。第四節(jié)函數(shù)的數(shù)據(jù)傳遞

C語(yǔ)言中,可通過(guò)三種方式進(jìn)行函數(shù)的數(shù)據(jù)傳遞。

1.實(shí)在參數(shù)和形式參數(shù)之間進(jìn)行數(shù)據(jù)傳遞,是由函數(shù)外向函數(shù)內(nèi)傳遞數(shù)據(jù)。

2.通過(guò)return語(yǔ)句把函數(shù)值返回調(diào)用函數(shù),是由函數(shù)內(nèi)向函數(shù)外傳遞數(shù)據(jù)。

3.通過(guò)全局變量。注:全局變量指在所有函數(shù)前定義的變量。intg_var;add(){g_var=g_var+3;}main(){g_var=2;add();printf("%d\n",g_var);}注意:在C語(yǔ)言中數(shù)據(jù)只能從實(shí)參單向傳遞給形參,稱為值傳遞方式。也就是說(shuō)當(dāng)用簡(jiǎn)單變量作為實(shí)參時(shí),函數(shù)中實(shí)參對(duì)應(yīng)的形參值發(fā)生改變,作為實(shí)參的變量不能被改變。:voidmain(){intx=2,y=3,z=0;printf("(1)x=%dy=%dz=%d\n",x,y,z);try(x,y,z);printf("(4)x=%dy=%dz=%d\n",x,y,z);}try(intx,inty,intz){printf("(2)x=%dy=%dz=%d\n",x,y,z);z=x+y;x=x*x;y=y*y;printf("(3)x=%dy=%dz=%d\n",x,y,z);}第五節(jié)程序舉例例1、編寫函數(shù)isprime(inta),用來(lái)判斷自變量a是否為素?cái)?shù)。若是素?cái)?shù),函數(shù)返回整數(shù)1,否則返回0。見(jiàn)示例文件:7-1-1.c#include<stdio.h>intisprime(int);voidmain(){ intx; printf("請(qǐng)輸入一個(gè)整數(shù)給x:"); scanf("%d",&x); if(isprime(x)) {printf("%d是素?cái)?shù)\n",x);} else {printf("%d不是素?cái)?shù)\n",x);}}intisprime(inta){ inti; for(i=2;i<=a/2;

溫馨提示

  • 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)論