天學通linux c編程電子教案第9講函數(shù)_第1頁
天學通linux c編程電子教案第9講函數(shù)_第2頁
天學通linux c編程電子教案第9講函數(shù)_第3頁
天學通linux c編程電子教案第9講函數(shù)_第4頁
天學通linux c編程電子教案第9講函數(shù)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

第9講函數(shù)演講人:馬玉軍

課程安排函數(shù)的理解自定義函數(shù)函數(shù)與指針的關系函數(shù)的返回值庫函數(shù)函數(shù)的理解什么是函數(shù):簡單的說,函數(shù)就是把一個程序功能封裝成一個整體。函數(shù)由類型名、函數(shù)名、參數(shù)列表、函數(shù)體等部分組成,一般形式如下所示。類型名函數(shù)名(參數(shù)列表){函數(shù)體;}函數(shù)這些部分的功能如下所示: 類型名:函數(shù)一般會返回一個數(shù)據(jù),這個數(shù)據(jù)就是函數(shù)返回值。返回值的數(shù)據(jù)類型就是函數(shù)的數(shù)據(jù)類型。函數(shù)的類型可以是所有的數(shù)據(jù)類型。如果沒有返回值,則聲明函數(shù)的類型為void。 函數(shù)名:函數(shù)的名稱。函數(shù)名的規(guī)則與變量命令的規(guī)則是相同的,函數(shù)名需要有效。 參數(shù)列表:函數(shù)輸入的參數(shù),函數(shù)需要使用這些參數(shù)進行運算。 函數(shù)體:完成函數(shù)運算功能的程序。在函數(shù)體中可以調(diào)用其他的函數(shù)。函數(shù)的理解函數(shù)的理解函數(shù)的理解按照函數(shù)的來源,可以將函數(shù)分為庫函數(shù)與用戶自定義函數(shù)。系統(tǒng)函數(shù)是編程平臺提供的函數(shù)。用戶自定義函數(shù)是用戶自己按編程的需要編寫的函數(shù)。這兩種函數(shù)的作用與區(qū)別如下所示。 庫函數(shù):由系統(tǒng)提供,用戶無須定義,也不必在程序中聲明的函數(shù)。在程序需要使用庫函數(shù)時,需在程序前包含該函數(shù)的頭文件。在前面章節(jié)里反復使用的printf、scanf等函數(shù)都是庫函數(shù)。 用戶定義函數(shù):用戶按需要寫的函數(shù)。對于用戶自定義函數(shù),不僅要在程序中定義函數(shù)本身,而且在主調(diào)函數(shù)模塊中還必須對該被調(diào)函數(shù)進行類型說明,然后才能使用。上一小節(jié)的函數(shù)max()就是一個用戶自定義函數(shù)。函數(shù)的返回值:所謂返回值,指的是函數(shù)運行以后會產(chǎn)生一個數(shù)據(jù),這個數(shù)據(jù)用return語句返回給主程序。有些函數(shù)是沒有返回值的,只執(zhí)行了一個運行或操作過程。從這個角度,可以把函數(shù)分為有返回值函數(shù)和無返回值函數(shù)兩種。1.有返回值函數(shù):這種函數(shù)被調(diào)用執(zhí)行以后,會向調(diào)用語句返回一個執(zhí)行結果,這個結果就是返回值。這種函數(shù)在定義時,需要指定函數(shù)的類型名。調(diào)用函數(shù)時,需要有一個變量來接受函數(shù)的返回值。例如9.1.1小節(jié)中的下列語句。01 s=max(a,b); 函數(shù)max會返回一個整型的結果,這個結果需要賦值給變量m。2.無返回值函數(shù):此類函數(shù)用于完成一定的處理過程,執(zhí)行完成后不向調(diào)用者返回結果。由于函數(shù)沒有返回值,用戶在定義此類函數(shù)時需要指定返回為“空類型”??疹愋偷恼f明符為“void”。例如下面的自定義函數(shù),就是用一個自定義函數(shù)輸出n個指定字符。函數(shù)的理解函數(shù)的理解參數(shù)指的是調(diào)用語句向被調(diào)用函數(shù)傳送的數(shù)據(jù)。從調(diào)用語句和被調(diào)用函數(shù)之間數(shù)據(jù)傳送的角度,又可將函數(shù)分為無參函數(shù)和有參函數(shù)兩種。無參函數(shù)指的是函數(shù)在定義、函數(shù)說明及函數(shù)調(diào)用中均不帶參數(shù)。調(diào)用語句和被調(diào)用函數(shù)之間不進行參數(shù)傳送。提示:無參函數(shù)通常用來完成一組指定的功能,不需要給函數(shù)傳遞數(shù)據(jù),但是函數(shù)可以向調(diào)用者返回一個結果。函數(shù)的理解與無參函數(shù)相對應的是有參函數(shù)。有參函數(shù)在定義、調(diào)用、聲明時都有參數(shù)。有參函數(shù)也稱為帶參函數(shù)。有在使用這些參數(shù)時,應該注意以下內(nèi)容。(1)在定義函數(shù)時,每一個參數(shù)都有一個具體的數(shù)據(jù)類型。(2)在調(diào)用函數(shù)時,參數(shù)列表中的參數(shù)要與函數(shù)定義時的參數(shù)個數(shù)相同,所有的參數(shù)一一對應。所給的參數(shù)數(shù)值應該有效。如果調(diào)用時,所給的參數(shù)不合法,或者類型不匹配、個數(shù)不相同,程序就會發(fā)生錯誤。函數(shù)定義時的參數(shù)被稱為形式參數(shù),只在函數(shù)體中有效。函數(shù)調(diào)用時的參數(shù)被稱為實際參數(shù),在主程序中是有效的變量。提示:形式參數(shù)僅在定義函數(shù)時有用,在程序運行時,形式參數(shù)將由實際參數(shù)代替。函數(shù)的理解自定義函數(shù)在程序中需要把各種模塊封裝為自定義函數(shù),在使用這個函數(shù)時,可以不考慮函數(shù)的內(nèi)部執(zhí)行過程。這樣可以使用簡化程序的設計,使代碼和模塊得到有效的重用。提示:C語言又稱為函數(shù)式的編程語言,除了應用系統(tǒng)的眾多庫函數(shù)外,經(jīng)常還用定義滿足自己需求的自定義函數(shù),函數(shù)構成了C程序的主體。自定義函數(shù)的編寫:編寫復雜程序時,需要將不同的功能分解為多個函數(shù),這樣可以簡化程序的執(zhí)行過程。在編寫自定義函數(shù)時,需要考慮的函數(shù)的參數(shù)與返回值。函數(shù)中調(diào)用函數(shù):在自定義函數(shù)中,可以調(diào)用另外一個自定義函數(shù)。這樣,就可以把復雜的程序功能分解為多個簡單的函數(shù)。函數(shù)的聲明:在C程序中,自定義函數(shù)需要寫在被調(diào)用函數(shù)的前面。如果前面的函數(shù)調(diào)用了后面的函數(shù),程序就會發(fā)生錯誤,提示程序中找不到相應的函數(shù)。如果需要調(diào)用后面的自定義函數(shù),需要在程序最前面聲明函數(shù)。提示:如果函數(shù)定義在主函數(shù)之前,則不需要進行事先聲明;如果函數(shù)定義在主函數(shù)之后,則必須在調(diào)用函數(shù)之前聲明函數(shù)。函數(shù)的聲明方法,是在程序的最前面,列出程序中可能調(diào)用的自定義函數(shù)。需要列出與函數(shù)定義相同的類型名、函數(shù)名、參數(shù)列表。自定義函數(shù)【范例9-7】函數(shù)的聲明實例。示例代碼9-7\源文件\09\9.7.c01 #include<stdio.h>02 voidmyresult(intx); /*聲明程序中的函數(shù)myresult。*/03 charresult(intaax); /*聲明函數(shù)result。*/04 /*函數(shù)聲明結束,下面是主函數(shù)。*/05 intmain() /*主函數(shù)將調(diào)用后面的函數(shù)。*/06 {07 inti=1; /*定義存放分數(shù)的變量,賦初值為1。*/08 while(i!=0) /*i的值不為0則提示輸入和判斷結果。*/09 {10 scanf("%d",&i); /*輸入一個數(shù)值。*/11 myresult(i); /*調(diào)用函數(shù)判斷等級,返回值賦值給r。*/12 }13 }14 voidmyresult(intx) /*定義一個有數(shù)值有效性判斷功能的函數(shù),無返回值。15 */16 {

略....28 }29 charresult(intx) /*定義一個分數(shù)評定函數(shù)。*/30 {

略....62 }自定義函數(shù)遞歸函數(shù):所謂遞歸函數(shù),指的是函數(shù)調(diào)用自身,用循環(huán)的方法實現(xiàn)運算。例如一個程序求出100以內(nèi)的整數(shù)和,可以用下面的思想。100以內(nèi)的整數(shù)和=100+99以內(nèi)的整數(shù)和;99以內(nèi)的整數(shù)和=99+98以內(nèi)的整數(shù)和;……2以內(nèi)的整數(shù)和=2+以1以內(nèi)的整數(shù)和;1以內(nèi)的整數(shù)和為1。用這種思路,可以用反復調(diào)用身函數(shù)的方法求出100以內(nèi)的整數(shù)和。這個程序的代碼如下所示。提示:編寫遞歸調(diào)用的函數(shù)時,需要注意指定遞歸返回的條件與返回值,否則可能導致出現(xiàn)死循環(huán)等錯誤,而達不到遞歸的效果。自定義函數(shù)自定義函數(shù)main函數(shù)的參數(shù)argc與argv:前面的例子中,main()函數(shù)都是沒有參數(shù)的。但編寫的程序常常需要從命令行中輸入?yún)?shù)。例如,Linux命令中復制文件的命令如下所示。

cp/root/1.txt/root/2.txt “cp”后面的兩個字符串就是這個程序的參數(shù)。在main()函數(shù)中,默認有argc與argv兩個參數(shù)。main函數(shù)的原型如下所示。01 intmain(intargc,char*argv[])main函數(shù)是有一個返回值的,如果程序執(zhí)行成功,則返回一個整型值1。程序中常常省略這個返回值。argc是一個整型變量,表示參數(shù)的個數(shù)。*argv[]是一個指針型數(shù)組,數(shù)組中的每一個指針指向一個參數(shù)的字符數(shù)組。下面的程序可以輸出程序啟動時后面的參數(shù)。函數(shù)與指針函數(shù)的參數(shù)與返回值可以是指針。使用指針變量可以在函數(shù)中對其他函數(shù)的變量進行調(diào)用。利用數(shù)組的頭指針,可以用指針移動的方法訪問數(shù)組中的每個元素,所以可用指針作為參數(shù)使函數(shù)訪問一個數(shù)組。值調(diào)用與引用調(diào)用:函數(shù)對參數(shù)的調(diào)用,有值調(diào)用和引用調(diào)用兩種方法。前面的例子都是值調(diào)用。函數(shù)對這兩種參數(shù)調(diào)用的處理方法是不同的。 值調(diào)用:進行函數(shù)調(diào)用時候,給形式參數(shù)分配內(nèi)存空間,并把實際參數(shù)的值直接傳遞給形式參數(shù)。這一過程是參數(shù)值的直接傳遞過程。一旦形式參數(shù)獲得了值,便于實際參數(shù)沒有關系。形式參數(shù)的變化對實際參數(shù)沒有任何影響。 引用調(diào)用:當用指針或數(shù)組作為函數(shù)的參數(shù)時,可以用指針來訪問實際參數(shù)的值。形式參數(shù)的變化,將直接引起實際參數(shù)的變化。注意:函數(shù)調(diào)用語句中的參數(shù)是實際參數(shù),被調(diào)用函數(shù)中的參數(shù)是形式參數(shù)。這一概念見本章9.1.5所述。函數(shù)與指針函數(shù)與指針引用調(diào)用與指針:雖然函數(shù)調(diào)用時默認是值調(diào)用,但是傳入的參數(shù)如果是指針,函數(shù)可以通過這個指針改變函數(shù)外部變量的值。參數(shù)的引用調(diào)用,就是通過指針對外部變量的訪問來實現(xiàn)的。指針可以同普通變量一樣,作為一個參數(shù)傳遞給一個函數(shù)。函數(shù)可以更改這一個指針和訪問指針指向的變量。下面的程序,是通過傳入的指針,來更改函數(shù)以外變量的值。函數(shù)與指針函數(shù)與指針函數(shù)與指針數(shù)組作為參數(shù):既然指針可以作為參數(shù)傳遞給一個函數(shù),函數(shù)可以通過指針訪問外部變量。數(shù)組在定義時,會返回一個頭指針??梢园堰@個頭指針作為函數(shù)的參數(shù),函數(shù)可以通過指針訪問數(shù)組中所有的變量。例如下面的代碼,就是把數(shù)組的指針作為函數(shù)的參數(shù),函數(shù)用指針來訪問一個數(shù)組。提示:數(shù)組名即為數(shù)組的首地址,可以作為指針變量來使用。函數(shù)與指針函數(shù)與指針數(shù)組作為函數(shù)參數(shù)實例數(shù)組作為函數(shù)參數(shù),可以方便的訪問函數(shù)外部的數(shù)組,這樣函數(shù)就可以對函數(shù)外的多個變量發(fā)生作用。本小節(jié)將講解一個數(shù)組作為函數(shù)參數(shù)的實例,實現(xiàn)下面這些功能。(1)定義3個字符串數(shù)組,前兩個字符串數(shù)組分別賦值。(2)自定義1個函數(shù),將3個字符串數(shù)組的指針作為參數(shù)。函數(shù)將第2個數(shù)組附加到第1個數(shù)組后面,然后保存到第3個數(shù)組上。(3)對數(shù)組的訪問是通過數(shù)組的指針完成的,函數(shù)沒有參數(shù)。函數(shù)與指針返回值函數(shù)執(zhí)行一個操作過程以后,一般需要返回一個處理結果。這個結果就是函數(shù)的返回值。函數(shù)可以用一個數(shù)值返回、用指針返回,也可以用指針直接訪問程序中的變量。函數(shù)的返回值,根據(jù)數(shù)據(jù)類型和處理方式的不同,一般有下面的幾種形式。函數(shù)對這幾種類型返回值的處理是不同的。無返回值:這種函數(shù)只是完成了一個處理過程。完成函數(shù)的運行以后,程序會自動中止運行。無返回值的函數(shù)需要用void來聲明。返回一個具體值:函數(shù)返回運算的結果。函數(shù)執(zhí)行的是一個運算,對參數(shù)進行處理以后,將結果作為一個具體數(shù)據(jù)類型的變量值來返回。這類函數(shù),在定義時需要聲明函數(shù)的數(shù)據(jù)類型。用指針來訪問主函數(shù)中的變量:9.3.3小節(jié)與9.3.4小節(jié)的講解的內(nèi)容,函數(shù)可以通過指針來訪問函數(shù)外部的變量。這種函數(shù)雖然沒有返回值,但是對外部變量產(chǎn)生了影響。指針訪問外部變量的方式,可以看作是一種特殊的返回值。返回一個指針:指針是一種特殊的數(shù)據(jù)類型。函數(shù)中的指針可以作為返回值返回給主函數(shù)。這類函數(shù)需要用指針數(shù)據(jù)類型來聲明。返回結果到參數(shù):如果參數(shù)中有一個指針,可以用這個指針直接訪問這個指針所指向的變量。這種方式可以看作是將結果返回到參數(shù)中。前三種情況前面的小節(jié)已經(jīng)講解。后面的小節(jié)將重點講解后面的兩種返回類型。返回值函數(shù)返回指針:指針是一種特殊的數(shù)據(jù)類型,表示指向一個變量的內(nèi)存地址。函數(shù)也可以返回一個指針。在主函數(shù)中,可以用這個指針來訪問所指向的變量。例如下面的程序,是用一個函數(shù)來選擇兩個數(shù)中較大的一個數(shù),返回較大數(shù)的指針。然后主函數(shù)通過這個指針輸出結果。程序的代碼如下所示。返回值返回值函數(shù)返回指針實例:本節(jié)將講解一個函數(shù)返回指針實例。自定義一個函數(shù),連接兩個字符串,兩個字符串的指針作為函數(shù)的參數(shù)。函數(shù)連接兩個字符串以后,返回連接以后字符串的指針。程序的代碼如下所示。返回值返回值函數(shù)返回結果到參數(shù):如果函數(shù)的參數(shù)是指針,函數(shù)可以訪問這個指針所指向的變量的值。這時函數(shù)就可以把結果返回給參數(shù)中的指針變量。如果函數(shù)的參數(shù)不是指針,函數(shù)是不能把結果返回給參數(shù)的。例如下面的代碼,是實現(xiàn)兩個數(shù)的加法,將結果返回給參數(shù)的指針。庫函數(shù)在C程序的編譯器中有大量的庫函數(shù)。庫函數(shù)可以完成復雜的程序功能。用戶在編程時可以直接調(diào)用系統(tǒng)的庫函數(shù)。庫函數(shù)是按照不同的功能封裝在多個頭文件中的。用戶需要調(diào)用庫函數(shù)時,需要在程序的最前面用include語句包含相關的頭文件。庫函數(shù)的常用功能與種類如下所示。字符類型分類函數(shù):對字符按照字母、數(shù)字、控制字符、分隔符、大小寫字母等方面進行分類進行測試。轉(zhuǎn)換函數(shù):用于字符或字符串的轉(zhuǎn)換??梢栽谧址兞亢透黝悢?shù)字變量之間進行轉(zhuǎn)換;在大、小

溫馨提示

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

最新文檔

評論

0/150

提交評論