當前位置:才華齋>計算機>計算機二級>

計算機二級C語言程式設計考點解析:函式

計算機二級 閱讀(9.71K)

2017下半年計算機等級考試時間9月23日-26日,目前進入了衝刺的階段。下面我們來看看計算機二級C語言程式設計考點解析:函式。

計算機二級C語言程式設計考點解析:函式

庫函式的正確呼叫

1.C語言提供了豐富的庫函式,包括常用數學函式、對字元和字串處理函式、輸入輸出處理函式等。在呼叫庫函式時要注意以下幾點:

(1)呼叫C語言標準庫函式時必須在源程式中用include命令,include命令的格式是:

#include″標頭檔案名″

include命令必須以#號開頭,系統提供的標頭檔案名都以.h作為字尾,標頭檔案名用一對雙引號″″或一對尖括號〈〉括起來。

(2)標準庫函式的呼叫形式:

函式名(引數表)

2.在C語言中庫函式的呼叫可以以兩種形式出現:出現在表示式中;作為獨立的語句完成某種操作。

函式的定義方法

1.C語言函式的一般形式為:

函式返回值的型別名函式名(型別名形參1,型別名形參2,…)

{

說明部分

語句部分

}

定義的第一行是函式的首部,{}中的是函式體。

2.在老的C語言版本中,函式的首部用以下形式:

函式返回值的型別名函式名(形參1,形參2…)

形參型別說明;

新的ANSI標準C相容這種形式的函式首部說明。

3.函式名和形參名是由使用者命名的識別符號。在同一程式中,函式名必須唯一。形式引數名只要在同一函式中唯一即可,可以與函式中的變數同名。

4.C語言規定不能在一個函式內部再定義函式。

5.若在函式的首部省略了函式返回值的型別名,把函式的首部寫成:

函式名(型別名形參1,型別名形參2,…)

則C預設函式返回值的型別為int型別。

6.當沒有形參時,函式名後面的一對圓括號不能省略。

函式的型別和返回值

1.函式的型別由函式定義中的函式返回值的型別名確定,函式的型別可以是任何簡單型別,如整型、字元型、指標型、雙精度型等,它指出了函式返回值的具體型別。當函式返回的是整型值時,可以省略函式型別名。當函式只完成特定的操作而沒有或不需要返回值時,可用型別名void(空型別)。

2.函式返回值就是return語句中表達式的值。當程式執行到return語句時,程式的流程就返回到呼叫該函式的地方(通常稱為退出呼叫函式),並帶回函式值。

形式引數與實際引數,引數值的傳遞

1.在函式定義中,出現的引數名稱為形參(形式引數),在呼叫函式時,使用的引數值稱為實參(實際引數)。

2.呼叫函式和被呼叫函式之間的引數值的傳遞是″按值″進行的,即資料只能從實參單向傳遞給形參。也就是說,當簡單變數作為實參時,使用者不能在函式中改變對應實參的值。

函式的正確呼叫(巢狀呼叫,遞迴呼叫)

1.呼叫函式時,函式名必須與被呼叫的函式名字完全一樣。實參的個數與型別和形參的個數與型別一致。

2.C語言規定:函式必須先定義,後呼叫,也就是被呼叫函式必須在呼叫之前加以說明,或被呼叫函式整個放在呼叫函式之前。但對返回值型別為int或char型別的函式可以放在呼叫函式的後面。

3.C語言中函式定義都是互相平行、獨立的,C語言不允許巢狀定義函式,但允許巢狀呼叫函式,也就是說,在呼叫一個函式的過程中,又呼叫另一個函式。

4.在C程式中,呼叫一個函式的過程中又出現直接或間接地呼叫該函式本身,稱為函式的遞迴呼叫。

5.遞迴呼叫函式是C語言的特點之一,有時遞迴呼叫會使求解的問題變得更簡單明瞭。

區域性變數和全域性變數

1.區域性變數

在一函式內部所定義的變數稱為區域性變數,區域性變數只在本函式範圍內有效。

注意:

①不同函式可以使用相同的區域性變數名,它們將代表不同的物件,互不干擾;

②一個函式的形參也為區域性變數;

③在函式內部,複合語句也可定義變數,這些變數也為區域性變數,只在此複合語句中有效。

2.全域性變數

在C語言中,程式的編譯單位是源程式檔案,一個源程式檔案中包含一個或多個函式。在函式之外所定義的變數稱為外部變數,也稱為全域性變數。全域性變數可以被包含它的源程式檔案中的其他函式所共用,作用域為從定義變數的位置開始到源程式檔案結束,全域性變數可以增加函式之間資料的聯絡。

注意:當在同一個源程式檔案中,全域性變數與區域性變數同名時,在區域性變數的作用範圍內,全域性變數不起作用,區域性變數起作用。

變數的儲存類別、作用域及生存期

1.變數的儲存類別

在C語言中,有兩類儲存類別:自動類別及靜態類別。

有4個與兩種儲存類別有關的說明符:auto(自動)、register(暫存器)、static(靜態)和extern(外部),這些說明符一般與型別說明一起出現,一般放在型別名的左邊,例如:

autolongI,j;

也可寫成:

longautoI,j;

(1)自動變數:自動變數是C程式中使用最多的一種變數,這種變數的建立和撤消都是在系統中自動進行的。

格式:[auto]資料型別變數名[=初始化表示式],…;

上面的說明格式中,方括號中是可省略的部分,auto為自動類別識別符號,若省略auto,系統預設的儲存類別也為自動類別。

注意:函式的形參也為自動類別,在定義時不必加儲存類別識別符號。

(2)暫存器變數:暫存器變數與自動變數的性質相同,其區別只在於儲存的位置不同,暫存器變數儲存在CPU的暫存器中,而自動變數儲存在記憶體中的動態儲存區,暫存器變數的存取速度要快些。

格式:register資料型別,變數名[=初始化表示式],…;

上面的說明格式中,register為暫存器變數的儲存類別識別符號。

說明:

①CPU中暫存器的數目是有限的`,因此只能把少數的變數說明為暫存器變數;

②暫存器變數是存放在暫存器中的,而不是存放於記憶體中,所以,暫存器變數無地址;

③暫存器變數的說明應儘量放在靠近要使用的地方,用完後儘快釋放,這樣可提高使用效率。

(3)靜態變數:靜態類別變數的儲存空間在程式的整個執行期間是固定的。

格式:static資料型別變數名[=初始化表示式],…;

在上面的說明格式中,static為靜態變數的儲存類別識別符號。

靜態變數的初始化在編譯時進行,定義時可用常量或表示式進行顯式初始化。對於沒有初始化的靜態變數,自動初始化為0(整型)或0.0(實型)。

注意:靜態變數具有可繼承性,這與自動變數有所不同。

(4)外部變數:使用extern可使外部變數使用範圍擴充到需要使用它的函式。外部變數可作顯式的初始化,若不作初始化,系統將自動地初始化為0或0.0。

格式:[extern]資料型別,變數名[=初始化表示式],…;

上面的說明格式中,extern使外部變數的作用範圍擴大到其他源程式檔案中。

注意:區域性變數既可以說明為自動類別,也可以說明為靜態類別;全域性變數只能說明為靜態類別。

2.變數的作用域及生存期

在C語言中,變數必須先說明後使用,在程式中一個已定義的變數的使用範圍就是此變數的作用域。經過賦值的變數在程式執行期間能保持其值的時間範圍為該變數的生存期。

(1)區域性變數的使用域及生存期

①自動變數的使用域及生存期

自動變數的儲存單元被分配在記憶體的動態儲存區,每當進函式體(或複合語句)時,系統自動為自動變數分配儲存單元,退出時自動釋放這些儲存單元。自動變數的作用域為從定義的位置起,到函式體(或複合語句)結束為止。

自動變數在進入到定義它們的函式體(或複合語句)時生成,在退出所在的函式體(或複合語句)時消失,這就是自動變數的生存期。

使用自動變數的優點是使各函式之間造成資訊分隔,不同函式中使用同名變數時不會相互影響。

②暫存器變數的使用域及生存期

暫存器變數的使用域及生存期與自動變數相同。

③靜態儲存類別的區域性變數

在函式體(或複合語句)內部,用static說明的變數靜態儲存類別的區域性變數,這種變數的作用域與自動(或暫存器)變數的作用域相同,但是生存期有所不同。

在整個程式執行期間,靜態區域性變數在記憶體的靜態儲存區中佔據著永久的儲存單元,甚至在退出函式後下次再進入函式時,靜態區域性變數仍使用原來的儲存單元。由於不釋放儲存單元,所以這些儲存單元中的值將會被保留下來。靜態區域性變數的生存期將一直延長到程式執行結束。

靜態區域性變數適合於在函式呼叫之間必須保留區域性變數值的獨立變數。

(2)全域性變數的作用域及生存期

全域性變數的作用域為從變數定義的位置開始,到整個源程式檔案結束為止。生存期為整個程式的執行期間。

注意:全域性變數在整個程式執行期間都佔用記憶體空間。全域性變數必須在函式以外定義,因而降低了函式的通用性,影響函式的獨立性。使用全域性變數時,當全域性變數的值意外改變時,會引起副作用,這種錯誤一般難以查詢。

①在同一編譯單位內用extern識別符號來擴充套件全域性變數的作用域

當全域性變數定義後,在引用函式前,應在引用它的函式中用extern對此全域性變數進行說明,以便使編輯程式確定此外部變數已被定義,不必再為它分配儲存單元,此時的作用域從extern說明開始,到此函式結束。

注意:全域性變數的定義只能出現一次,這時不可使用extern識別符號。如果多次引用全域性變數,這時必須用extern識別符號。

②在不同編譯單位內用extern識別符號來擴充套件全域性變數的作用域

C語言中的不同函式可以存放在不同的源程式檔案中,每個源程式檔案可以單獨進行編譯,進行語法檢查,再生成目標檔案,最後用系統提供的連線程式把多個目標檔案連線成一個可執行程式。

當程式由多個源程式檔案組成時,若每個檔案中都要引用同一個全域性變數,這時如在每個源程式檔案中都定義一個所需的同名全域性變數,將在連線時產生重複定義錯誤。解決的辦法是在其中一個源程式檔案中定義所有全域性變數,而在其他用到全域性變數的源程式檔案中用extern對這些變數進行說明,以表明它們已在其他編譯單元中被定義。

③靜態全域性變數

當用static識別符號說明全域性變數時,全域性變數為靜態全域性變數。靜態全域性變數只能在定義它的源程式檔案中使用,不能被其他源程式檔案使用。

內部函式及外部函式

根據函式能否被其他源程式檔案所呼叫,可將函式分為內部函式和外部函式。

1.內部函式

內部函式是指一個函式只能由定義它的源程式檔案所呼叫,內部函式又稱為靜態函式。

格式:static類標函式名(型別名形引數1,型別名形引數2,…)

上面的定義格式中,static用於說明函式為內部函式。

2.外部函式

外部函式是指可以被其他源程式所呼叫的函式。

格式[extern]型別識別符號函式名(型別名形引數1,型別名形引數2,…)

上面定義格式中,extern表明所定義的函式為外部函式,當extern被省略時,隱含為外部函式。

注意:在要呼叫此函式的源程式檔案中,一般要用extern識別符號說明所用的函式為外部函式。