C語言程序設(shè)計(jì)課件-第四章_第1頁
C語言程序設(shè)計(jì)課件-第四章_第2頁
C語言程序設(shè)計(jì)課件-第四章_第3頁
C語言程序設(shè)計(jì)課件-第四章_第4頁
C語言程序設(shè)計(jì)課件-第四章_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本章的主要內(nèi)容包括:

C語言函數(shù)的概念,如何調(diào)用C提供的庫函數(shù),如何自己來定義函數(shù),并調(diào)用這些函數(shù)。中的數(shù)據(jù)表示

多文件組成C程序的方法

變量生存期作用域

C語言的數(shù)學(xué)函數(shù)。第四章函數(shù)和程序結(jié)構(gòu)回首頁本章的主要內(nèi)容包括:第四章函數(shù)和程序結(jié)構(gòu)回首頁1問題:(1)程序越來越長。難于理解且可讀性下降。(2)重復(fù)代碼增多,某段程序可能被執(zhí)行多次。(3)某一問題中的代碼,無法在其它同類問題中再用。必須重復(fù)原來的設(shè)計(jì)編碼過程。函數(shù)是一種機(jī)制,能夠有效地分解復(fù)雜的描述,控制程序規(guī)模和復(fù)雜性。需要抽象成函數(shù)的程序段:(1)功能獨(dú)立、具有獨(dú)立邏輯意義的程序段(2)重復(fù)出現(xiàn)的代碼段函數(shù)機(jī)制提供的好處:(1)函數(shù)可以被多次調(diào)用,減少程序長度,保持函數(shù)意義的一致性。(2)增加程序可讀性。(3)模塊化、結(jié)構(gòu)化更強(qiáng)。

兩種觀點(diǎn):從函數(shù)外部調(diào)用者的角度。

從函數(shù)內(nèi)部實(shí)現(xiàn)者的角度。4.1概述問題:(1)程序越來越長。難于理解且可讀性下降。4.1概述2C程序中調(diào)用庫函數(shù)需要兩步:1.使用include命令指出關(guān)于庫函數(shù)的相關(guān)定義和說明。include命令必須以“#”開頭,系統(tǒng)提供的頭文件以.h作為文件后綴,文件名用一隊(duì)尖括號<>或一對雙撇號””括起來。#include開頭的程序行不是C語句,末尾不加“;”號。

2.調(diào)用標(biāo)準(zhǔn)庫函數(shù)調(diào)用庫函數(shù)的形式為:函數(shù)名(參數(shù)表)(1)表達(dá)式中調(diào)用:函數(shù)是表達(dá)式的一個(gè)運(yùn)算對象。如y=z*sin(x)+0.5;(2)作為獨(dú)立語句:可看作表達(dá)式語句如printf(“%d\n”,a);4.2庫函數(shù)C程序中調(diào)用庫函數(shù)需要兩步:4.2庫函數(shù)3C語言中定義函數(shù)的一般形式為:函數(shù)返回值類型名

函數(shù)名(類型名

形參1,類型名

形參2…)

/*頭部*/{說明部分/*函數(shù)體*/

語句部分

}return語句的形式如下:return表達(dá)式;

return(表達(dá)式);或

return;return的作用:退出函數(shù),并帶回函數(shù)值。4.3函數(shù)定義C語言中定義函數(shù)的一般形式為:4.3函數(shù)定義44.4.1函數(shù)的調(diào)用函數(shù)調(diào)用的形式為:函數(shù)名(實(shí)際參數(shù)列表)調(diào)用函數(shù)時(shí)要注意以下幾點(diǎn):(1)調(diào)用名字必須與定義名字完全一致。(2)實(shí)參個(gè)數(shù)與形參個(gè)數(shù)一致,類型一致,如不匹配,進(jìn)行自動(dòng)轉(zhuǎn)換,不兼容的賦值轉(zhuǎn)換(某些類型之間不能進(jìn)行賦值,如指針和浮點(diǎn)類型之間)并不給出錯(cuò)信息,程序繼續(xù)運(yùn)行,但結(jié)果不正確。(3)可以嵌套調(diào)用。如a函數(shù)調(diào)用b函數(shù),b函數(shù)中又調(diào)用c函數(shù)。C語言規(guī)定所有的函數(shù)都是互相平行、獨(dú)立的。不容許嵌套定義(在一個(gè)函數(shù)的定義中,包含另一個(gè)函數(shù)的完整定義),但可以嵌套調(diào)用。

4.4函數(shù)的調(diào)用和說明4.4.1函數(shù)的調(diào)用4.4函數(shù)的調(diào)用和說明54.4.2函數(shù)說明

在調(diào)用之前對函數(shù)進(jìn)行說明,稱為函數(shù)的原型說明。形式如下:類型名

函數(shù)名(參數(shù)類型列表或參數(shù)列表);形式上可理解為函數(shù)定義的首部加分號“;”,它的作用是檢查調(diào)用時(shí)參數(shù)的個(gè)數(shù)和類型正確與否。因此參數(shù)列表中,只需類型名即可,如有形參名,可以是任意的用戶標(biāo)識符,不一定要和函數(shù)定義的形參相同。

4.4函數(shù)的調(diào)用和說明4.4.2函數(shù)說明4.4函數(shù)的調(diào)用和說明6C語言中,調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞有三種方式:(1)實(shí)參和形參之間數(shù)據(jù)傳遞(2)return語句把函數(shù)值返回調(diào)用函數(shù)。(3)通過全局變量。(全局變量在本章稍后討論)C語言中實(shí)參和形參之間數(shù)據(jù)傳遞的方式叫“值傳遞”,數(shù)據(jù)只能從實(shí)參單向傳遞給形參。函數(shù)調(diào)用時(shí),首先計(jì)算實(shí)參表達(dá)式的值,求出的值分別賦給對應(yīng)的形參,進(jìn)入函數(shù)體執(zhí)行,形參本身就是局部于函數(shù)的變量,調(diào)用時(shí)接收實(shí)參的值。函數(shù)內(nèi)部對形參的賦值與實(shí)參變量毫無關(guān)系。實(shí)參變量的值不會(huì)被改變。實(shí)參與形參傳遞值時(shí),隱含著可能的轉(zhuǎn)換。如轉(zhuǎn)換不能進(jìn)行,編譯時(shí)產(chǎn)生類型錯(cuò)誤。C的函數(shù)調(diào)用機(jī)制很簡單,值傳遞是C語言實(shí)參形參結(jié)合的唯一方法,續(xù)章節(jié)中,我們會(huì)看到數(shù)組名和指針做函數(shù)參數(shù)的情形,它們進(jìn)行實(shí)參形參結(jié)合的方式離不開值傳遞這個(gè)本質(zhì)。

4.5調(diào)用函數(shù)和被調(diào)函數(shù)的數(shù)據(jù)傳遞C語言中,調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞有三種方式:4.57遞歸函數(shù)是指在函數(shù)執(zhí)行過程中,直接或間接調(diào)用函數(shù)本身的函數(shù)。前者稱簡單遞歸,后者稱間接遞歸。遞歸程序的執(zhí)行過程遞歸函數(shù)的特點(diǎn):有一個(gè)明確的結(jié)束遞歸的條件。遞歸函數(shù)的效率遞歸與遞推的關(guān)系

4.7函數(shù)實(shí)例

4.6遞歸函數(shù)遞歸函數(shù)是指在函數(shù)執(zhí)行過程中,直接或間接調(diào)用函數(shù)本身的函數(shù)。84.8.1程序結(jié)構(gòu)

C語言規(guī)定部不允許在一個(gè)函數(shù)的內(nèi)部定義另一個(gè)函數(shù),這樣,所有函數(shù)都定義在程序的表層,整個(gè)程序的結(jié)構(gòu)比較簡單。程序結(jié)構(gòu)討論C程序函數(shù)及數(shù)據(jù)、變量定義的組織方法,尤其是需要多個(gè)文件組織程序時(shí)的程序單元、內(nèi)容的組織問題。4.8.2變量的作用域和存在期在程序中定義一個(gè)變量時(shí)有幾個(gè)方面的含義:(1)給變量一個(gè)名字,在程序中通過名字可以操作該變量的存儲(chǔ)空間,進(jìn)行取值和賦值;(2)定義了該變量存儲(chǔ)空間中數(shù)據(jù)的存在形式、范圍和運(yùn)算;(3)程序中哪些地方可以使用該變量;(4)程序運(yùn)行過程中,該變量的存儲(chǔ)空間什么時(shí)候分配和撤消。

4.8變量的作用域和生存期4.8.1程序結(jié)構(gòu)4.8變量的作用域和生存期94.8.2變量的作用域和存在期變量的作用域:源程序中的某一部分,在這個(gè)范圍里,變量定義是有效的,可以使用該變量的名字進(jìn)行與該變量有關(guān)的操作每個(gè)變量都有一個(gè)確定“作用域”,由變量定義出現(xiàn)的位置確定。作用域講變量的作用范圍,一個(gè)定義的作用域是源程序中的一段,可以從源程序正文中把有關(guān)的一段劃出來。因此作用域是靜態(tài)概念。與程序執(zhí)行過程無干。存在期:變量在程序中存在的那段時(shí)期稱為該變量的“”。存在期是動(dòng)態(tài)概念。講的是程序執(zhí)行的一段時(shí)期,在一個(gè)變量的存在期里,它所占的存儲(chǔ)單元一直保持,只要不對變量重新賦值,單元中的值就保持不變。內(nèi)存中供程序使用的存儲(chǔ)空間分為三部分:程序區(qū)、靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)。

4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期104.8.2變量的作用域和存在期存儲(chǔ)類別指的是變量在內(nèi)存中的存儲(chǔ)位置,有靜態(tài)和動(dòng)態(tài)兩種存儲(chǔ)類別。具體有四種與存儲(chǔ)類別有關(guān)的說明符:auto(自動(dòng))static(靜態(tài))register(寄存器)extern(外部)這些說明符通常與類型名一起出現(xiàn),可以放在類型名的左邊,也可以放在類型名的右邊。前三種存儲(chǔ)類別的聲明和定義連用,不能分開。4.8.2.1全局變量的作用域和存在期在函數(shù)之外任意位置定義的變量,稱全局變量,也叫外部變量。它的作用域?yàn)閺亩x變量的位置開始到本源文件結(jié)束。全局變量只有靜態(tài)一種存儲(chǔ)類別,它的存在期是整個(gè)程序的運(yùn)行期間。討論全局變量定義和使用時(shí)的注意事項(xiàng)討論在不同的函數(shù)間使用同一個(gè)全局變量進(jìn)行通信的特點(diǎn)及利弊。討論使用extern和static兩種說明符定義全局變量的不同點(diǎn)。

4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期114.8.2變量的作用域和存在期4.8.2.2局部變量的作用域和存在期局部變量是在一個(gè)函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量,只在函數(shù)或復(fù)合語句體范圍內(nèi)有效,在此函數(shù)或復(fù)合語句體外不能使用這些變量。可以使用auto(自動(dòng))、static(靜態(tài))、register(寄存器)說明符。

1.auto變量局部變量定義時(shí)使用auto說明符或沒有指定存儲(chǔ)類,系統(tǒng)就認(rèn)為所定義的變量具有自動(dòng)類別。系統(tǒng)對自動(dòng)變量是動(dòng)態(tài)分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前。自動(dòng)變量的作用域是從定義的位置起,到函數(shù)體或復(fù)合體結(jié)束為止。它的存儲(chǔ)單元在進(jìn)入這些局部變量所在的函數(shù)體(或復(fù)合體)時(shí)生成,退出其所在函數(shù)體(或復(fù)合體)時(shí)消失,這就是自動(dòng)變量的存在期。當(dāng)再次進(jìn)入函數(shù)體(或復(fù)合體)時(shí),系統(tǒng)將為它們另行分配存儲(chǔ)單元,因此,變量的值不可能被保留。討論使用自動(dòng)變量的優(yōu)點(diǎn)。4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期124.8.2變量的作用域和存在期4.8.2.2局部變量的作用域和存在期2.register變量寄存器變量也是自動(dòng)變量,它與自動(dòng)變量的區(qū)別僅在于:用register說明的變量建議編譯程序?qū)⒆兞康闹当A粼贑PU的寄存器中,而不象一般變量那樣,占內(nèi)存單元。局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前。討論寄存器變量的特點(diǎn)和使用注意事項(xiàng)。3.static變量在函數(shù)體(或復(fù)合體)內(nèi)部用static說明的變量,稱靜態(tài)局部變量。靜態(tài)局部變量的作用域和自動(dòng)變量、寄存器變量一樣,但其存在期與它們有本質(zhì)的區(qū)別,要一直延長到程序運(yùn)行結(jié)束。靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)占據(jù)永久性的存儲(chǔ)單元,函數(shù)退出后下次再進(jìn)入該函數(shù),靜態(tài)局部變量仍使用原來的存儲(chǔ)單元。討論靜態(tài)變量的特點(diǎn)和使用注意事項(xiàng)4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期13外部變量、靜態(tài)變量(存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū))的定義在程序開始前已經(jīng)完成,其初始化也在程序執(zhí)行前完成,且只進(jìn)行一次。對初始化表達(dá)式有嚴(yán)格的限制,只能使用不需要執(zhí)行程序(在編譯階段)就能求出一個(gè)常量值的表達(dá)式。對外部變量、靜態(tài)變量進(jìn)行初始化的方法是:直接用字面量或用字面量、符號常量及基本運(yùn)算符號構(gòu)造表達(dá)式。不能包括各種涉及賦值的運(yùn)算(如++、--等)。如果在定義時(shí)不寫初始化,則系統(tǒng)建立時(shí)自動(dòng)初始化為0。對存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)的局部變量來說,其存儲(chǔ)單元是程序執(zhí)行過程中在調(diào)用對應(yīng)函數(shù)或復(fù)合體時(shí)動(dòng)態(tài)分配的,對初始化表達(dá)式形式?jīng)]有限制,符合類型約束即可。由于每次調(diào)用后存儲(chǔ)單元已釋放,下次調(diào)用時(shí)又重新另分配存儲(chǔ)單元,因此,每次建立時(shí)均需重新初始化。如果定義時(shí)不寫初始化,所分配單元中的值是不確定的。此時(shí),程序在使用該變量前,一定要有使變量存儲(chǔ)單元賦值的操作,否則,變量的值是不確定的。許多編譯系統(tǒng)對這類問題會(huì)提出警告。4.8.3變量初始化

外部變量、靜態(tài)變量(存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū))的定義在程序開始前已經(jīng)14討論內(nèi)部函數(shù)和外部函數(shù)的特點(diǎn)。使用extern和static說明符的方法。使用內(nèi)部函數(shù)和外部函數(shù)的好處。4.9多文件程序的組織和調(diào)試方法4.9.1多文件程序的組織方法

討論教材中關(guān)于多文件程序組織方法的5點(diǎn)指導(dǎo)意見4.9.2多文件程序的運(yùn)行調(diào)試方法(1)編輯源文件(2)建立項(xiàng)目文件(3)打開項(xiàng)目文件(4)編譯連接(5)執(zhí)行4.8.4內(nèi)部函數(shù)和外部函數(shù)

討論內(nèi)部函數(shù)和外部函數(shù)的特點(diǎn)。4.8.4內(nèi)部函數(shù)和外部函數(shù)15第四章函數(shù)和程序結(jié)構(gòu)本章主要知識點(diǎn):

C語言關(guān)于函數(shù)的規(guī)定。定義方法、說明規(guī)定、返回值、函數(shù)返回和函數(shù)調(diào)用。函數(shù)之間參數(shù)傳遞的規(guī)定。形參與實(shí)參的對應(yīng)關(guān)系,參數(shù)傳遞方式,void型函數(shù)。變量的存儲(chǔ)類型。變量存在期與作用域的概念,4種存儲(chǔ)變量類型的說明方式、特點(diǎn)和使用范圍,不同存儲(chǔ)類型變量在使用時(shí)的區(qū)別,變量的初始化方法,在函數(shù)間使用外部變量傳遞數(shù)據(jù)的規(guī)定。多文件程序的組織和實(shí)現(xiàn)方法常見庫函數(shù)的使用方法。掌握本章內(nèi)容的關(guān)鍵是理解函數(shù)的參數(shù)傳遞機(jī)制及變量作用域和存在期的概念。回本章首頁第四章函數(shù)和程序結(jié)構(gòu)本章主要知識點(diǎn):回本章首頁16本章的主要內(nèi)容包括:

C語言函數(shù)的概念,如何調(diào)用C提供的庫函數(shù),如何自己來定義函數(shù),并調(diào)用這些函數(shù)。中的數(shù)據(jù)表示

多文件組成C程序的方法

變量生存期作用域

C語言的數(shù)學(xué)函數(shù)。第四章函數(shù)和程序結(jié)構(gòu)回首頁本章的主要內(nèi)容包括:第四章函數(shù)和程序結(jié)構(gòu)回首頁17問題:(1)程序越來越長。難于理解且可讀性下降。(2)重復(fù)代碼增多,某段程序可能被執(zhí)行多次。(3)某一問題中的代碼,無法在其它同類問題中再用。必須重復(fù)原來的設(shè)計(jì)編碼過程。函數(shù)是一種機(jī)制,能夠有效地分解復(fù)雜的描述,控制程序規(guī)模和復(fù)雜性。需要抽象成函數(shù)的程序段:(1)功能獨(dú)立、具有獨(dú)立邏輯意義的程序段(2)重復(fù)出現(xiàn)的代碼段函數(shù)機(jī)制提供的好處:(1)函數(shù)可以被多次調(diào)用,減少程序長度,保持函數(shù)意義的一致性。(2)增加程序可讀性。(3)模塊化、結(jié)構(gòu)化更強(qiáng)。

兩種觀點(diǎn):從函數(shù)外部調(diào)用者的角度。

從函數(shù)內(nèi)部實(shí)現(xiàn)者的角度。4.1概述問題:(1)程序越來越長。難于理解且可讀性下降。4.1概述18C程序中調(diào)用庫函數(shù)需要兩步:1.使用include命令指出關(guān)于庫函數(shù)的相關(guān)定義和說明。include命令必須以“#”開頭,系統(tǒng)提供的頭文件以.h作為文件后綴,文件名用一隊(duì)尖括號<>或一對雙撇號””括起來。#include開頭的程序行不是C語句,末尾不加“;”號。

2.調(diào)用標(biāo)準(zhǔn)庫函數(shù)調(diào)用庫函數(shù)的形式為:函數(shù)名(參數(shù)表)(1)表達(dá)式中調(diào)用:函數(shù)是表達(dá)式的一個(gè)運(yùn)算對象。如y=z*sin(x)+0.5;(2)作為獨(dú)立語句:可看作表達(dá)式語句如printf(“%d\n”,a);4.2庫函數(shù)C程序中調(diào)用庫函數(shù)需要兩步:4.2庫函數(shù)19C語言中定義函數(shù)的一般形式為:函數(shù)返回值類型名

函數(shù)名(類型名

形參1,類型名

形參2…)

/*頭部*/{說明部分/*函數(shù)體*/

語句部分

}return語句的形式如下:return表達(dá)式;

return(表達(dá)式);或

return;return的作用:退出函數(shù),并帶回函數(shù)值。4.3函數(shù)定義C語言中定義函數(shù)的一般形式為:4.3函數(shù)定義204.4.1函數(shù)的調(diào)用函數(shù)調(diào)用的形式為:函數(shù)名(實(shí)際參數(shù)列表)調(diào)用函數(shù)時(shí)要注意以下幾點(diǎn):(1)調(diào)用名字必須與定義名字完全一致。(2)實(shí)參個(gè)數(shù)與形參個(gè)數(shù)一致,類型一致,如不匹配,進(jìn)行自動(dòng)轉(zhuǎn)換,不兼容的賦值轉(zhuǎn)換(某些類型之間不能進(jìn)行賦值,如指針和浮點(diǎn)類型之間)并不給出錯(cuò)信息,程序繼續(xù)運(yùn)行,但結(jié)果不正確。(3)可以嵌套調(diào)用。如a函數(shù)調(diào)用b函數(shù),b函數(shù)中又調(diào)用c函數(shù)。C語言規(guī)定所有的函數(shù)都是互相平行、獨(dú)立的。不容許嵌套定義(在一個(gè)函數(shù)的定義中,包含另一個(gè)函數(shù)的完整定義),但可以嵌套調(diào)用。

4.4函數(shù)的調(diào)用和說明4.4.1函數(shù)的調(diào)用4.4函數(shù)的調(diào)用和說明214.4.2函數(shù)說明

在調(diào)用之前對函數(shù)進(jìn)行說明,稱為函數(shù)的原型說明。形式如下:類型名

函數(shù)名(參數(shù)類型列表或參數(shù)列表);形式上可理解為函數(shù)定義的首部加分號“;”,它的作用是檢查調(diào)用時(shí)參數(shù)的個(gè)數(shù)和類型正確與否。因此參數(shù)列表中,只需類型名即可,如有形參名,可以是任意的用戶標(biāo)識符,不一定要和函數(shù)定義的形參相同。

4.4函數(shù)的調(diào)用和說明4.4.2函數(shù)說明4.4函數(shù)的調(diào)用和說明22C語言中,調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞有三種方式:(1)實(shí)參和形參之間數(shù)據(jù)傳遞(2)return語句把函數(shù)值返回調(diào)用函數(shù)。(3)通過全局變量。(全局變量在本章稍后討論)C語言中實(shí)參和形參之間數(shù)據(jù)傳遞的方式叫“值傳遞”,數(shù)據(jù)只能從實(shí)參單向傳遞給形參。函數(shù)調(diào)用時(shí),首先計(jì)算實(shí)參表達(dá)式的值,求出的值分別賦給對應(yīng)的形參,進(jìn)入函數(shù)體執(zhí)行,形參本身就是局部于函數(shù)的變量,調(diào)用時(shí)接收實(shí)參的值。函數(shù)內(nèi)部對形參的賦值與實(shí)參變量毫無關(guān)系。實(shí)參變量的值不會(huì)被改變。實(shí)參與形參傳遞值時(shí),隱含著可能的轉(zhuǎn)換。如轉(zhuǎn)換不能進(jìn)行,編譯時(shí)產(chǎn)生類型錯(cuò)誤。C的函數(shù)調(diào)用機(jī)制很簡單,值傳遞是C語言實(shí)參形參結(jié)合的唯一方法,續(xù)章節(jié)中,我們會(huì)看到數(shù)組名和指針做函數(shù)參數(shù)的情形,它們進(jìn)行實(shí)參形參結(jié)合的方式離不開值傳遞這個(gè)本質(zhì)。

4.5調(diào)用函數(shù)和被調(diào)函數(shù)的數(shù)據(jù)傳遞C語言中,調(diào)用函數(shù)和被調(diào)函數(shù)之間的數(shù)據(jù)傳遞有三種方式:4.523遞歸函數(shù)是指在函數(shù)執(zhí)行過程中,直接或間接調(diào)用函數(shù)本身的函數(shù)。前者稱簡單遞歸,后者稱間接遞歸。遞歸程序的執(zhí)行過程遞歸函數(shù)的特點(diǎn):有一個(gè)明確的結(jié)束遞歸的條件。遞歸函數(shù)的效率遞歸與遞推的關(guān)系

4.7函數(shù)實(shí)例

4.6遞歸函數(shù)遞歸函數(shù)是指在函數(shù)執(zhí)行過程中,直接或間接調(diào)用函數(shù)本身的函數(shù)。244.8.1程序結(jié)構(gòu)

C語言規(guī)定部不允許在一個(gè)函數(shù)的內(nèi)部定義另一個(gè)函數(shù),這樣,所有函數(shù)都定義在程序的表層,整個(gè)程序的結(jié)構(gòu)比較簡單。程序結(jié)構(gòu)討論C程序函數(shù)及數(shù)據(jù)、變量定義的組織方法,尤其是需要多個(gè)文件組織程序時(shí)的程序單元、內(nèi)容的組織問題。4.8.2變量的作用域和存在期在程序中定義一個(gè)變量時(shí)有幾個(gè)方面的含義:(1)給變量一個(gè)名字,在程序中通過名字可以操作該變量的存儲(chǔ)空間,進(jìn)行取值和賦值;(2)定義了該變量存儲(chǔ)空間中數(shù)據(jù)的存在形式、范圍和運(yùn)算;(3)程序中哪些地方可以使用該變量;(4)程序運(yùn)行過程中,該變量的存儲(chǔ)空間什么時(shí)候分配和撤消。

4.8變量的作用域和生存期4.8.1程序結(jié)構(gòu)4.8變量的作用域和生存期254.8.2變量的作用域和存在期變量的作用域:源程序中的某一部分,在這個(gè)范圍里,變量定義是有效的,可以使用該變量的名字進(jìn)行與該變量有關(guān)的操作每個(gè)變量都有一個(gè)確定“作用域”,由變量定義出現(xiàn)的位置確定。作用域講變量的作用范圍,一個(gè)定義的作用域是源程序中的一段,可以從源程序正文中把有關(guān)的一段劃出來。因此作用域是靜態(tài)概念。與程序執(zhí)行過程無干。存在期:變量在程序中存在的那段時(shí)期稱為該變量的“”。存在期是動(dòng)態(tài)概念。講的是程序執(zhí)行的一段時(shí)期,在一個(gè)變量的存在期里,它所占的存儲(chǔ)單元一直保持,只要不對變量重新賦值,單元中的值就保持不變。內(nèi)存中供程序使用的存儲(chǔ)空間分為三部分:程序區(qū)、靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)。

4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期264.8.2變量的作用域和存在期存儲(chǔ)類別指的是變量在內(nèi)存中的存儲(chǔ)位置,有靜態(tài)和動(dòng)態(tài)兩種存儲(chǔ)類別。具體有四種與存儲(chǔ)類別有關(guān)的說明符:auto(自動(dòng))static(靜態(tài))register(寄存器)extern(外部)這些說明符通常與類型名一起出現(xiàn),可以放在類型名的左邊,也可以放在類型名的右邊。前三種存儲(chǔ)類別的聲明和定義連用,不能分開。4.8.2.1全局變量的作用域和存在期在函數(shù)之外任意位置定義的變量,稱全局變量,也叫外部變量。它的作用域?yàn)閺亩x變量的位置開始到本源文件結(jié)束。全局變量只有靜態(tài)一種存儲(chǔ)類別,它的存在期是整個(gè)程序的運(yùn)行期間。討論全局變量定義和使用時(shí)的注意事項(xiàng)討論在不同的函數(shù)間使用同一個(gè)全局變量進(jìn)行通信的特點(diǎn)及利弊。討論使用extern和static兩種說明符定義全局變量的不同點(diǎn)。

4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期274.8.2變量的作用域和存在期4.8.2.2局部變量的作用域和存在期局部變量是在一個(gè)函數(shù)內(nèi)部或復(fù)合語句內(nèi)部定義的變量,只在函數(shù)或復(fù)合語句體范圍內(nèi)有效,在此函數(shù)或復(fù)合語句體外不能使用這些變量??梢允褂胊uto(自動(dòng))、static(靜態(tài))、register(寄存器)說明符。

1.auto變量局部變量定義時(shí)使用auto說明符或沒有指定存儲(chǔ)類,系統(tǒng)就認(rèn)為所定義的變量具有自動(dòng)類別。系統(tǒng)對自動(dòng)變量是動(dòng)態(tài)分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前。自動(dòng)變量的作用域是從定義的位置起,到函數(shù)體或復(fù)合體結(jié)束為止。它的存儲(chǔ)單元在進(jìn)入這些局部變量所在的函數(shù)體(或復(fù)合體)時(shí)生成,退出其所在函數(shù)體(或復(fù)合體)時(shí)消失,這就是自動(dòng)變量的存在期。當(dāng)再次進(jìn)入函數(shù)體(或復(fù)合體)時(shí),系統(tǒng)將為它們另行分配存儲(chǔ)單元,因此,變量的值不可能被保留。討論使用自動(dòng)變量的優(yōu)點(diǎn)。4.8變量的作用域和生存期4.8.2變量的作用域和存在期4.8變量的作用域和生存期284.8.2變量的作用域和存在期4.8.2.2局部變量的作用域和存在期2.register變量寄存器變量也是自動(dòng)變量,它與自動(dòng)變量的區(qū)別僅在于:用register說明的變量建議編譯程序?qū)⒆兞康闹当A粼贑PU的寄存器中,而不象一般變量那樣,占內(nèi)存單元。局部變量的定義必須放在函數(shù)體或復(fù)合體中所有可執(zhí)行語句之前。討論寄存器變量的特點(diǎn)和使用注意事項(xiàng)。3.static變量在函數(shù)體(或復(fù)合體)內(nèi)部用static說明的變量,稱靜態(tài)局部變量。靜態(tài)局部變量的作用域和自動(dòng)變量、寄存器變量一樣,但其存在期與它們有本質(zhì)的區(qū)別,要一直延長到程序運(yùn)行結(jié)束。靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)占據(jù)永久性的存儲(chǔ)單元,函數(shù)退出后下次再進(jìn)入該函數(shù),靜態(tài)局部變量仍使用原來的存儲(chǔ)單元。討論靜態(tài)變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論