糯米文學吧

位置:首頁 > 計算機 > 計算機二級

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

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標識符説明所用的函數為外部函數。