c課件語言基礎(chǔ)05函數(shù)_第1頁
c課件語言基礎(chǔ)05函數(shù)_第2頁
c課件語言基礎(chǔ)05函數(shù)_第3頁
c課件語言基礎(chǔ)05函數(shù)_第4頁
c課件語言基礎(chǔ)05函數(shù)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、東軟睿道內(nèi)部公開文件編號: D000-C語言基礎(chǔ)版本:1.0.0-0.0.02015-6-1東軟睿道教育(所有,)Copyright © Neusoft Educational Information Technology Co.,sV1.0文件修改V1.0修改編號版本修改條款及內(nèi)容修改日期11.0.0-0.0.0創(chuàng)建2015-6-1C語言編程基礎(chǔ)函數(shù)V1.0函數(shù)的 從函數(shù)的參數(shù)形式看,函數(shù)可分為兩類: 無參函數(shù); 有參函數(shù) 。 無參函數(shù)的定義形式返回值類型 函數(shù)名(部分;語句; 例如:void print_message()printf(“n Hello!”);)V1.0無參數(shù)函數(shù)

2、的 有參函數(shù)的定義形式返回值類型 函數(shù)名(形式參數(shù)列表)部分語句 例如:int max (int x, int y)/*求x和y二者中大者,x,y為形參*/int z; z=x>y?x:y; return (z);/*函數(shù)體中變量的*/*將z作為函數(shù)返回值*/V1.0函數(shù)的函數(shù): 同變量一樣,函數(shù)的調(diào)用也應(yīng)該遵循“先原則。,后使用”的 函數(shù)的一般形式如下:返回值類型 函數(shù)名(類型1,類型2,); 或返回值類型函數(shù)名(類型1 形參1,類型2 形參2,);以下的2中函數(shù)方法都是合法的:float max(int, int);floatmax(int x, int y); 說明: 被調(diào)函數(shù)定義

3、在主調(diào)函數(shù)之前,可以不進(jìn)行函數(shù)。V1.0函數(shù)的函數(shù) 函數(shù)和函數(shù)定義的區(qū)別的作用是把函數(shù)的名字、函數(shù)返回值類型以及形參的類型、個(gè)數(shù)和順序通知編譯器,以便于編譯器檢查函數(shù)調(diào)用的。 函數(shù)定義是指對函數(shù)功能的確立,包括指定函數(shù)名、函數(shù)體、返回值類型、形參及其類型等,它是一個(gè)完整的、。的函數(shù)V1.0函數(shù)的形參和實(shí)參 形式參數(shù):在函數(shù)或,函數(shù)名后面括弧中的變量名,被稱為形式參數(shù),簡稱形參。 實(shí)際參數(shù):在函數(shù)調(diào)用時(shí),函數(shù)名后面括弧中的表 稱為實(shí)際參數(shù),簡稱實(shí)參。例:,被V1.001 int max( int x, int y,int z) 02 int m;03 m=x>y?x:y;04 m=m>

4、;z?m:z;05 return(m);06 實(shí)參表形參表00 #include <stdio.h>01 int max( int x, int y, int z); 02 void main( ) 03int a,b,c,m;04scanf (“%d,%d,&a,&b);05 m=max(a,b,c);06 printf(“Max is %d”,m); 07 函數(shù)的形參和實(shí)參說明: 形參調(diào)用前不占內(nèi)存,調(diào)用時(shí)才占用,調(diào)用后; 形參是函數(shù)的內(nèi)部變量,只能在函數(shù);對每個(gè)形參必須指明其名字和數(shù)據(jù)類型; 實(shí)參可以是、變量或表,并且必須有確定的值; 實(shí)參個(gè)數(shù)、類型必須與對應(yīng)

5、的形參一致,類型不一致會發(fā)生 類型轉(zhuǎn)換; 實(shí)參對形參的數(shù)據(jù)傳遞是值傳遞,即單向傳遞,只由實(shí)參傳遞給形參,反之不可。調(diào)用結(jié)束后,只有形參單元被實(shí)參單元中的值不變。,V1.0函數(shù)的返回值 定義:通過函數(shù)調(diào)用使主調(diào)函數(shù)得到一個(gè)確定的值,稱為函數(shù)的返回值。例如:c=max(3, 5);此時(shí)函數(shù)的返回值是5,因此c=5。 函數(shù)返回語句return函數(shù)返回值是通過 return語句獲得的。 return語句將被調(diào)函數(shù)的確定的值交給主調(diào)函數(shù)。V1.0函數(shù)的返回值 return語句的一般形式: return(函數(shù)返回值); 說明:或return函數(shù)返回值; “函數(shù)返回值”可以用、變量或表表示。 一個(gè)函數(shù)中可以

6、有多個(gè)return語句,但是一次函數(shù)執(zhí)行只能執(zhí)行其中的一個(gè)。當(dāng)執(zhí)行到某個(gè)return語句時(shí),則終止本次函數(shù)執(zhí)行,并帶回函數(shù)值。 若函數(shù)體內(nèi)沒有return語句,就一直將函數(shù)的語句,再返回調(diào)用函數(shù),將一個(gè)不確定的值帶回。 return后面可以無“返回值”(即 return ;),則該return語句只起到終止函數(shù)執(zhí)行、返回主調(diào)函數(shù)的作用。V1.0return (x>y? x:y);z=x>y? x:y; return(z);函數(shù)的返回值函數(shù)返回值的類型 函數(shù)應(yīng)該指定函數(shù)返回值的類型,該類型應(yīng)與return表的類型一致。 說明: 若函數(shù)返回類型和return表的類型不一致,表數(shù)據(jù)要服從

7、函數(shù)的返回類型,服從表現(xiàn)為自動類型轉(zhuǎn)換。即函數(shù)返回類型決定了表的類型。 若無法進(jìn)行類型轉(zhuǎn)換,則程序編譯報(bào)錯(cuò)。 如果函數(shù)不返回任何值,函數(shù)定義為“無類型”void(或稱“空類型”)。例:void print_star()V1.0函數(shù)調(diào)用的3種形式 函數(shù)調(diào)用的一般形式 :有參數(shù)函數(shù):函數(shù)名(實(shí)參列表) 無參數(shù)函數(shù):函數(shù)名( ) 說明: 實(shí)參列表要用逗號隔開; 實(shí)參列表中的參數(shù)可以是、變量或表; 實(shí)參與形參個(gè)數(shù)相等,類型應(yīng)一致; 實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù); 實(shí)參列表的求值順序與具體編譯器有關(guān)。V1.0函數(shù)調(diào)用的3種形式 把函數(shù)調(diào)用作為一個(gè)語句 : 一般形式:函數(shù)名(實(shí)參列表); 使用情況:

8、這種方式常用于調(diào)用一個(gè)可以忽略返回值或沒有返回值的函數(shù)時(shí)。如, 的調(diào)用。對scanf函數(shù)和printf函數(shù) 函數(shù)調(diào)用出現(xiàn)在表(函數(shù)表)中: 一般形式: 變量名=函數(shù)表 使用情況:這種方式用于調(diào)用帶返回值的函數(shù),函數(shù)的返回值將參加所在表的運(yùn)算。如:a =3+ max(num1,num2);注意:無返回值函數(shù)的調(diào)用,不能出現(xiàn)在表中。V1.0函數(shù)調(diào)用的3種形式 函數(shù)調(diào)用出現(xiàn)在函數(shù)參數(shù)中: 一般形式: 函數(shù)名(實(shí)參,函數(shù)名(實(shí)參) 使用情況:這種方式用于調(diào)用帶返回值的函數(shù),函數(shù)的返 回值將作為另一個(gè)函數(shù)的參數(shù)。如:a = max(max(num1,num2), num3);注意:無返回值函數(shù)的調(diào)用,不

9、能出現(xiàn)在函數(shù)參數(shù)中。V1.0數(shù)組元素做函數(shù)參數(shù) 由于表可以做實(shí)參,數(shù)組元素可以作為表,因此,數(shù)組元素可以做函數(shù)的實(shí)參,并且可以傳遞給形參。 例如:找出數(shù)組中的最大數(shù)int max(int a, int b)int main(void)return a > b ? a : b;int arr = 3, 4, 6, 5, 8, 10;int tmp, cnt; tmp = arr0;for(cnt = 1; cnt < 6; +cnt) tmp = max(tmp, arrcnt);printf(“Max value is : %dn”, tmp);V1.0數(shù)組名作函數(shù)參數(shù) 由于數(shù)組名

10、代表的是數(shù)組在內(nèi)存中存放區(qū)域的首地址。把數(shù) 組名作為函數(shù)參數(shù)來實(shí)現(xiàn)大量數(shù)據(jù)的傳遞是絕佳的傳遞方法。 數(shù)組名做函數(shù)參數(shù)的具體方法: 在主調(diào)函數(shù)中定義數(shù)組; 被調(diào)函數(shù)中形參是與實(shí)參類型一致的數(shù)組; 形參數(shù)組可以不指定數(shù)組大?。ㄟ@里指一維數(shù)組)。 說明: 數(shù)組名做函數(shù)的實(shí)參和形參時(shí),不是“值傳遞”,而是“ 址傳遞”。因此,形參數(shù)組元素的值如果發(fā)生變化,會使 實(shí)參數(shù)組對應(yīng)元素的值發(fā)生同樣的改變。V1.0數(shù)組名作函數(shù)參數(shù)舉例:用選擇法對數(shù)組中10個(gè)整數(shù)按由小到大排序。 程序設(shè)計(jì):函數(shù)sort(array, n) :對數(shù)組元素按升序排序。主程序 : 為array數(shù)組輸入數(shù)據(jù),調(diào)用 sort 函數(shù)排序,輸出

11、排序后的array數(shù)組。V1.001 void sort (int array , int n) 02 int v, j, k, t;03for (i=0; i<n; i+) 04k=i;05for (j=i+1; j<n; j+)06if (arrayj<arrayk) k=j;/*找到較小者下標(biāo)*/ 07t=arrayk;08 arrayk=arrayi;09 arrayi=t;1011 這是數(shù)組作形參時(shí)常使用的技巧數(shù)組名作函數(shù)參數(shù)V1.012 #include<stdio.h>13 void main ( ) 14 int a10, i;15printf(“

12、enter array: n”); 16for (i=0; i<10; i+)17scanf (“ %d ”,&ai); 18sort(a, 10);19printf(“the sorted array: n”); 20for (i=0; i<10; i+)21 printf (“ %d ”, ai);22 printf(“n”); 23 由于地址傳遞,數(shù)組 a已經(jīng) 改變數(shù)組名作函數(shù)參數(shù)數(shù)組名做參數(shù)的好處: 由于只需向函數(shù)一個(gè)地址值,而無須全部需要處理的數(shù)據(jù),因此既節(jié)約空間,又并提高了效率。 由于主調(diào)函數(shù)和被調(diào)函數(shù)是在相同的內(nèi)存區(qū)域上對數(shù)據(jù)進(jìn)行操作,因此可以實(shí)現(xiàn)數(shù)據(jù)的同步更

13、新。V1.0函數(shù)的嵌套調(diào)用 定義:在一個(gè)函數(shù)的執(zhí)行過程中,又調(diào)用另一個(gè)函數(shù)。 在定義一個(gè)函數(shù)時(shí),若該函數(shù)體內(nèi)包含另一個(gè)函數(shù)的定義,是嵌套定義。C語言函數(shù)不能嵌套定義。函數(shù)嵌套調(diào)用圖示:13245調(diào)調(diào)9876V1.0結(jié)束用B函數(shù)用A函數(shù)B函數(shù)A函數(shù)main函數(shù)void B()void A() B(); void main() A(); 函數(shù)的遞歸調(diào)用 定義: 在函數(shù)的執(zhí)行過程中直接或間接地調(diào)用該函數(shù)本身。 C語言的特點(diǎn)之一就是 遞歸的形式可分為:直接遞歸調(diào)用函數(shù)遞歸調(diào)用。間接遞歸調(diào)用V1.0函數(shù)的遞歸調(diào)用 說明:遞歸應(yīng)避免出現(xiàn)無終止的遞歸,因此應(yīng)該給出限制遞 歸次數(shù)的條件。 遞歸調(diào)用的一般算法:

14、f(x)=終止表遞歸調(diào)用 兩種成分的作用:遞歸調(diào)用:記住本次調(diào)用現(xiàn)場,開始下次遞歸調(diào)用。終止表:返回上次調(diào)用現(xiàn)場。V1.0函數(shù)的遞歸調(diào)用用遞歸法求n! 。分析:根據(jù)數(shù)學(xué)知識可知:n! = n* (n-1)!算法:1f(n-1)*n(n=1)(n>1)f(n)=實(shí)現(xiàn):V1.0int fac(int n) int f; if(n=1)f=1;elsef=fac(n-1)*n;return f;(n-1)! = (n-1)*(n-2)!局部變量 定義:在函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量稱作局部變量。 作用域:是指變量的可用范圍。局部變量的作用域:僅限于函數(shù)內(nèi)或復(fù)合語句內(nèi)。 注意: 主函數(shù) ma

15、in 中定義的變量只在主函數(shù)中有效,主函數(shù)不能使用在其它函數(shù)中定義的變量。 不同函數(shù)中的同名變量互不影響,因?yàn)楦髯杂懈髯缘淖饔糜颉?形參也是局部變量。V1.0局部變量V1.000 #include<stdio.h>01 f1(int a)02 int b,c;03 在f1函數(shù)中a、b、c有效0405 f2(int a,int b)06 int c,d;在f2函數(shù)中 a、b、c、d有效07但與f1函數(shù)中的a、b、c不同0809void main()10 int m,n;11 在main函數(shù)中m、n有效12局部變量V1.000 #include<stdio.h>01 voi

16、dmain() 02int a,b; 03.04 int c05 c=a+b;a、b在此06c在此范圍范圍內(nèi)有效07內(nèi)有效0809.10全局變量 定義:在函數(shù)外部定義的變量稱作全局變量(也稱外部變量)。 作用域:可以文件中所有的函數(shù)公用。 注意:從定義變量的位置開始到本文件結(jié)束,這段數(shù)可直接使用全局變量。的函如果在定義點(diǎn)之前的函數(shù)想使用全局變量,則應(yīng)該在該函數(shù)之前用關(guān)鍵字 extern 作。如果在同一源文件中,全局變量和局部變量同名,則在 局部作用范圍內(nèi),全局變量不起作用。V1.0全局變量 優(yōu)點(diǎn):同一文件中的一些函數(shù)都可以使用全局變量,這增加了函數(shù)間數(shù)據(jù)。當(dāng)某個(gè)函數(shù)改變了全局變量的值,其它函數(shù)

17、得到改變后的全局變量值。為函數(shù)增加了向外界傳遞數(shù)據(jù)的渠 道,如同多了返回值。 缺點(diǎn):全局 變量在程序的全部執(zhí)行過程中都占用單元。使用全局變量不符合程序設(shè)計(jì)中要求模塊間“強(qiáng)內(nèi)聚性、弱偶合性”的原則。會降低程序的可讀性和可維護(hù)性。V1.0變量的屬性及定義 C語言變量的屬性包括:數(shù)據(jù)類型和 數(shù)據(jù)類型:整型,實(shí)型,字符型類型類型:用來規(guī)定數(shù)據(jù)在內(nèi)存中的 auto (自動的) register(寄存器的) static (靜態(tài)的) extern(外部的)分類,類型包括 定義變量的一般形式:類型 數(shù)據(jù)類型 變量名如: auto int a; static int b; register int d;V1.

18、0靜態(tài)局部變量與靜態(tài)全局變量 static可用于修飾局部變量和全局變量靜態(tài)局部變量 定義: static修飾的局部變量稱為靜態(tài)局部變量 作用域:僅限于定義它的函數(shù)內(nèi)部 注意: 存放在靜態(tài)區(qū),整個(gè)程序運(yùn)行期間都不。 編譯初值,每次調(diào)用時(shí)不再賦初值,只保留調(diào)用結(jié)束時(shí)變量的修改值。 如果靜態(tài)局部變量沒賦初值,編譯時(shí)自動賦0。V1.0靜態(tài)局部變量與靜態(tài)全局變量靜態(tài)全局變量定義: static修飾的全局變量稱為靜態(tài)全局變量作用域:只能在本文件中被使用,其他的源文件不能使用。注意: 存放在靜態(tài)區(qū),整個(gè)程序運(yùn)行期間都不。 如果靜態(tài)全局變量沒賦初值,編譯時(shí)自動賦0。V1.0寄存器變量寄存器:它是CPU的組成部分,是用來暫時(shí)存放數(shù)據(jù)的裝置。寄存器變量:直接放置在CPU的寄存器中的變量稱為寄存器變量。引入寄存器變量是為了提高“存取”速度。用register修飾的局部變量被稱為寄存器變量 例如:register int i;i是寄存器變量,其數(shù)據(jù)類型是整型。寄存器變量并不放在棧區(qū)中,而是放在寄存器中。寄存器變量的作用域僅限于函數(shù)內(nèi)或復(fù)合語句內(nèi)。注意: 只有局部變量(非靜態(tài)的)和形式參數(shù)可以作為寄存器變量。 由于計(jì)算機(jī)的寄存器數(shù)量有限,不宜定義太多寄存器變量。不同的計(jì)算機(jī)平臺使用的寄存器個(gè)數(shù)是不同的。V1.0靜態(tài)函數(shù)和全局函數(shù)靜態(tài)函數(shù) 定義:如果一個(gè)函數(shù)只能被本文件中其它函數(shù)調(diào)用,稱為靜 態(tài)函數(shù)。 定

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論