c課件語言基礎05函數_第1頁
c課件語言基礎05函數_第2頁
c課件語言基礎05函數_第3頁
c課件語言基礎05函數_第4頁
c課件語言基礎05函數_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、在主調函數之前,可以不進行函數。V1.0函數的函數 函數和函數定義的區別的作用是把函數的名字、函數返回值類型以及形參的類型、個數和順序通知編譯器,以便于編譯器檢查函數調用的。 函數定義是指對函數功能的確立,包括指定函數名、函數體、返回值類型、形參及其類型等,它是一個完整的、。的函數V1.0函數的形參和實參 形式參數:在函數或,函數名后面括弧中的變量名,被稱為形式參數,簡稱形參。 實際參數:在函數調用時,函數名后面括弧中的表 稱為實際參數,簡稱實參。例:,被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 實參表形參表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 函數的形參和實參說明: 形參調用前不占內存,調用時才占用,調用后; 形參是函數的內部變量,只能在函數;對每個形參必須指明其名字和數據類型; 實參可以是、變量或表,并且必須有確定的值; 實參個數、類型必須與對應

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

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

7、函數的返回類型,服從表現為自動類型轉換。即函數返回類型決定了表的類型。 若無法進行類型轉換,則程序編譯報錯。 如果函數不返回任何值,函數定義為“無類型”void(或稱“空類型”)。例:void print_star()V1.0函數調用的3種形式 函數調用的一般形式 :有參數函數:函數名(實參列表) 無參數函數:函數名( ) 說明: 實參列表要用逗號隔開; 實參列表中的參數可以是、變量或表; 實參與形參個數相等,類型應一致; 實參與形參按順序對應,一一傳遞數據; 實參列表的求值順序與具體編譯器有關。V1.0函數調用的3種形式 把函數調用作為一個語句 : 一般形式:函數名(實參列表); 使用情況:

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

9、能出現在函數參數中。V1.0數組元素做函數參數 由于表可以做實參,數組元素可以作為表,因此,數組元素可以做函數的實參,并且可以傳遞給形參。 例如:找出數組中的最大數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數組名作函數參數 由于數組名

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

11、排序后的array數組。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;/*找到較小者下標*/ 07t=arrayk;08 arrayk=arrayi;09 arrayi=t;1011 這是數組作形參時常使用的技巧數組名作函數參數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 由于地址傳遞,數組 a已經 改變數組名作函數參數數組名做參數的好處: 由于只需向函數一個地址值,而無須全部需要處理的數據,因此既節約空間,又并提高了效率。 由于主調函數和被調函數是在相同的內存區域上對數據進行操作,因此可以實現數據的同步更

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

14、f(x)=終止表遞歸調用 兩種成分的作用:遞歸調用:記住本次調用現場,開始下次遞歸調用。終止表:返回上次調用現場。V1.0函數的遞歸調用用遞歸法求n! 。分析:根據數學知識可知:n! = n* (n-1)!算法:1f(n-1)*n(n=1)(n>1)f(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)!局部變量 定義:在函數內部或復合語句內部定義的變量稱作局部變量。 作用域:是指變量的可用范圍。局部變量的作用域:僅限于函數內或復合語句內。 注意: 主函數 ma

15、in 中定義的變量只在主函數中有效,主函數不能使用在其它函數中定義的變量。 不同函數中的同名變量互不影響,因為各自有各自的作用域。 形參也是局部變量。V1.0局部變量V1.000 #include<stdio.h>01 f1(int a)02 int b,c;03 在f1函數中a、b、c有效0405 f2(int a,int b)06 int c,d;在f2函數中 a、b、c、d有效07但與f1函數中的a、b、c不同0809void main()10 int m,n;11 在main函數中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在此范圍范圍內有效07內有效0809.10全局變量 定義:在函數外部定義的變量稱作全局變量(也稱外部變量)。 作用域:可以文件中所有的函數公用。 注意:從定義變量的位置開始到本文件結束,這段數可直接使用全局變量。的函如果在定義點之前的函數想使用全局變量,則應該在該函數之前用關鍵字 extern 作。如果在同一源文件中,全局變量和局部變量同名,則在 局部作用范圍內,全局變量不起作用。V1.0全局變量 優點:同一文件中的一些函數都可以使用全局變量,這增加了函數間數據。當某個函數改變了全局變量的值,其它函數

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

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

溫馨提示

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

評論

0/150

提交評論