《VC++程序設(shè)計》講稿.doc_第1頁
《VC++程序設(shè)計》講稿.doc_第2頁
《VC++程序設(shè)計》講稿.doc_第3頁
《VC++程序設(shè)計》講稿.doc_第4頁
《VC++程序設(shè)計》講稿.doc_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.第一章 C+入門教學(xué)目的:了解 +程序的基本特點 , 熟悉 Visual C+集成開發(fā)環(huán)境的基本使用方法。重點:了解 +程序的基本特點, Visual C+的集成開發(fā)環(huán)境。難點: C 語言、 +、VC 之間的關(guān)系1.1 軟件開發(fā)與 C+ 語言一、 C 語言的發(fā)展歷程B-C-C+Vc+B 是無類型語言(需解釋)C+是面向?qū)ο蟮恼Z言(解釋) ,使開發(fā)軟件的可重用性、可維護性和可靠性,具有了極大的優(yōu)勢。C 是 C+的子集, C+是 C 的超集。VC 是可視化的 C+集成環(huán)境二、本課程的目的1.C+的程序結(jié)構(gòu)(面向過程)2.VC 集成環(huán)境的使用3.面向?qū)ο蟮臉?gòu)成思想4.學(xué)習(xí)利用系統(tǒng)提供的對象進行面向

2、對象的編程(簡單)1.2 算法與程序算法:解決問題的方法和步驟程序:用計算機語言對算法的描述例 1:1.根據(jù)算法特性, 至少要有一個輸出, 如果使用 C 語言的 printf 和 scanf函數(shù)完成輸入輸出, 則必須打開 stdio.h 頭文件。c+中數(shù)據(jù)的輸入輸出通過 cin 和 cout 與、v1v2vn;1. :提取運算符2.提供數(shù)據(jù)時,數(shù)據(jù)間用空格(廣義)分開。3.所提供數(shù)據(jù)應(yīng)與變量類型相一致,若不一致,會導(dǎo)致操作失敗或數(shù)據(jù)錯誤。(感興趣者可以仔細研究) 。二、輸出: coute1e2em;1.:插入運算符2.系統(tǒng)會根據(jù)輸出數(shù)據(jù)的類型,自動以相應(yīng)的格式輸出1.5 程序設(shè)計語言的發(fā)展自學(xué)

3、1.6 C+ 程序的基本要素1.6.1 標識符、關(guān)鍵詞和標點符號一、標識符:程序中變量、類型、函數(shù)和標號的名稱1.區(qū)分大小寫2.組成規(guī)則,字母(含下劃線)開頭的字母數(shù)字串二、關(guān)鍵字關(guān)鍵字:具有特定作用,不能作為自定義標識符的字符組合。標準標識符:系統(tǒng)提供具有特定功能的常量、函數(shù)等,與關(guān)鍵字的區(qū)別是,關(guān)鍵字不能作為用戶自定義標識符,而標準標識符則可以,但是最好不要將其作為用戶自定義標識符。2/43.1.6.2 注釋編譯器把一個注釋作為一個空格字符處理。1.6.3 源程序一個 C+源程序由一個或多個源文件構(gòu)成。習(xí)慣上,通常將變量、類型、宏和類等的定義放在一個源文件中(擴展名用 .h),然后在其他源

4、文件中引用這些定義量。在編制大型程序時尤其需要這樣,在學(xué)習(xí)階段,由于程序很小,所以可以不采用這種方法。1.7 編譯預(yù)處理1.7.1 宏定義無參宏格式: #define說明: 1.習(xí)慣上宏名采用大寫字母2.宏替換是一個機械過程有參宏格式: define 說明: 1.有參宏與函數(shù)的本質(zhì)不同2.為防止宏替換出現(xiàn)問題,最好將參數(shù)和整個宏都用括號括起1.7.2 文件包含格式: #include 或 #include 文件名 說明: 1.文件包含的作用是將被包含文件嵌入到包含文件中2.在系統(tǒng)指定的目錄查找被包含文件;首先在當(dāng)前目錄中查找,若找不到,再到指定目錄查找采用文件包含的方式,從物理角度是兩個文件,

5、但是對于C 語言系統(tǒng)而言,仍然是“一個”文件。1.8 Visual C+ 的集成開發(fā)環(huán)境Visual C+軟件包包含了許多獨立組件,如編輯器、編譯器、鏈接器、實用程序生成器、 調(diào)試器。我們運行 VC 所看到的界面是 VC 系統(tǒng)所提供的一個叫做 Developer Studio 的集成開發(fā)環(huán)境。開發(fā)環(huán)境會根據(jù)用戶使用的需要,自動調(diào)用一些相應(yīng)組件。3/43.1.8.1 菜單和工具欄開發(fā)環(huán)境提供的界面與windows 下的其他軟件的界面窗口基本一樣,由標題欄、菜單欄、快捷圖標欄及編輯窗口和其他窗口等組成。1.除標題欄外,其他欄目均為??渴剑?可以用鼠標拖動改變它們的位置。2.快捷圖標欄由多種工具欄組

6、成,缺省狀態(tài)下由標準工具欄(StdandardBar),向?qū)Чぞ邫?(Wizard Bar),建立(編譯)微型欄 (Build MiniBar) 組成,如果希望在工具欄中出現(xiàn)其它欄目,可以通過工具 /定制 /工具欄進行有目的的設(shè)置。1.8.2 Developer Studio窗口整個集成環(huán)境的窗口中有多個窗口,分為兩種類型,一種是文檔窗口(帶邊框),多個窗口時以平鋪或?qū)盈B方式顯示;一種是停靠窗口,缺省狀態(tài)有兩個停靠窗口,一個是工作區(qū)(Workspace),一個是輸出窗口 (Output)。其他窗口在需要時會自動出現(xiàn),或者通過菜單命令,指定顯示某個窗口。1.8.3 用 Developer Stu

7、dio編寫和調(diào)試簡單C+程序編寫簡單程序的步驟:1. 選擇菜單文件 (File)/ 新建 (New) 中的工程 (Projects)選項卡,選擇Win32 Console Application(32 控制臺應(yīng)用程序。 C+開發(fā)不同的程序需要選擇不同的工程項目,對于簡單的編程,選擇 Win32 Console Application 即可。2.為該工程項目起一個名字,填在右上方project name 上。下面的location 指明項目文件的存儲位置,用戶可自己設(shè)定。3.此時應(yīng)用程序生成向?qū)釂栆傻捻椖款愋?。選擇An emptyproject(空項目),點擊 finish 、ok。系統(tǒng)

8、會自動產(chǎn)生目錄和一個工作區(qū)文件(.dsw),一個 .dsp,一個 .ncb 文件。4.再次選擇菜單文件( File )/新建( New)中的文件選項卡,從中選擇 C+ Source File,為該程序文件命名,單擊 OK。5.在編輯窗口內(nèi)編輯程序、編譯、調(diào)試、運行。僅編譯: compile Ctrl+F7編譯加鏈接: build F74/43.執(zhí)行: executeCtrl+F5產(chǎn)生的文件均存放在相應(yīng)源程序文件下的debug 目錄中。1.8.4 菜單選項、快捷鍵和工具欄第二章 控制結(jié)構(gòu)教學(xué)目的:掌握結(jié)構(gòu)化程序設(shè)計方法的基本思想和+的幾種基本控制轉(zhuǎn)移語句,熟悉使用偽代碼的編程方法。重點: C+的

9、控制結(jié)構(gòu)。難點:分支循環(huán)結(jié)構(gòu)2.1 程序的基本控制結(jié)構(gòu)結(jié)構(gòu)化的基本結(jié)構(gòu)結(jié)構(gòu)化的程序設(shè)計方法:以模塊化設(shè)計為中心,將需解決的問題劃分為若干個相互獨立的模塊。模塊的大小2.2 C+ 的控制結(jié)構(gòu)2.2.1 順序結(jié)構(gòu)相互間具有先后順序關(guān)系的模塊組合2.2.2 選擇結(jié)構(gòu)1.概念選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)。兩個模塊都有被執(zhí)行的可能,但每次只能有且只有一個被執(zhí)行。2.格式if ( 表達式 ) 語句 1 else 語句 23.注意事項(1)表達式必須用括號括起(2)表達式不對類型作任何要求(單變量方式)(3)復(fù)合語句的使用4.應(yīng)用方式(1)逐情況判斷(2)假定5/43.(3)嵌套嵌套既可以嵌在then 子句上,也可

10、以嵌在else 子句上。注意:為了明確的表示嵌套關(guān)系,消除二義性,可以采用三種方法:1)將嵌套嵌在else子句上。2)寫齊所有子句。沒有語句的分支可以使用空語句。3)使用復(fù)合語句。當(dāng)分支數(shù)在 34 個或更多一些,一般使用if 語句,若更多時,往往使用 switch 語句。逐情況法常見于初學(xué)者,假定法常用于熟練編程者。嵌套法則是熟練又希望程序比較高效者。2.2.3 循環(huán)結(jié)構(gòu)1.語句格式while ( 表達式 )語句do語句while( 表達式 );for ( 表達式 1;表達式 2;表達式 3)語句2.語句功能1)while 和 for 均是當(dāng)型循環(huán) ,do while 是直到型循環(huán)。2)所有的

11、表達式均對類型沒有特定要求。3)所有的循環(huán)體均為一條語句(復(fù)合語句)。4)所有的語句都是當(dāng)條件成立時運行,不成立時退出。3.for 語句for 語句是 C 語言中極為靈活的一種語句, 當(dāng)省略第一和第三表達式時,與 while 語句完全等效。2.3 結(jié)構(gòu)化程序設(shè)計自頂向下、逐步細化、模塊化2.4 偽代碼類語言,接近語言,但又不是真正的語言,若需要轉(zhuǎn)化成語言時,只6/43.要作簡單的修改即可。與具體語言相比,語法不像具體語言的要求那么嚴格。2.5 結(jié)構(gòu)化程序設(shè)計方法簡介解決大型軟件生產(chǎn)設(shè)計的設(shè)計基礎(chǔ)和方法。2.6 C+ 的其他控制轉(zhuǎn)移語句2.6.1 switch 語句格式注意事項1)switch

12、表達式雖然沒有類型要求,但最好不要是實型。2)case后的常量只能是一個常量表達式。3)當(dāng)執(zhí)行符合條件的分支后,如無break 則繼續(xù)執(zhí)行下續(xù)語句。4)循環(huán)中含 switch 語句 ,或 switch 中含 switch,內(nèi)部的 break 僅僅自內(nèi)部跳出,不能跳出外部控制體。continue 只對循環(huán)起作用。2.6.2 goto 語句和語句標號goto 語句是無條件轉(zhuǎn)移語句,它可以將程序流程控制無條件地轉(zhuǎn)移到由標號所指定的語句處繼續(xù)執(zhí)行。使用 goto 構(gòu)成的結(jié)構(gòu)不一定是非結(jié)構(gòu)化的,但非結(jié)構(gòu)化的程序往往由于 goto 的因素。#include iosteam.hvoid main()int

13、i,j,k=0;for (i=1;i=10;i+)for (j=1;j100) goto out;out:couti=i,j=j,k=kendl;if (k500) goto in;2.6.3 break語句和 continue 語句1.break7/43.作用 :中止執(zhí)行循環(huán) ,使流程控制退出該循環(huán)控制結(jié)構(gòu),執(zhí)行該循環(huán)語句的下一語句。(還可用于 switch,但不能用于使用if 構(gòu)成的循環(huán))雖然 break 屬于非結(jié)構(gòu)化的語句, 但它對程序可讀性的破壞不嚴重,某種意義上,還容易提高程序的可讀性。2.continue作用 :僅實現(xiàn)從該語句位置將流程控制轉(zhuǎn)移到本次循環(huán)的結(jié)束位置。它結(jié)束的是本次循

14、環(huán),而不是跳出整個循環(huán)語句。幾乎所有出現(xiàn)該語句的地方,都可以通過改變算法而取消該語句的使用。對于多重循環(huán),這兩條語句都只能對包含它的語句起作用。2.6.4 exit()函數(shù)和 abort()函數(shù)作用:中止整個程序的運行。exit(): 結(jié)束程序前做一些善后工作。abort():強制結(jié)束程序。要求使用整數(shù)參數(shù)表示退出的原因。習(xí)慣上用0 表示正常退出,非0值表示非正常退出(程序調(diào)試) 。2.7 Developer Studio 的文本編輯器一、基本操作通用的鍵盤操作方式二、高級編輯Windows 環(huán)境下的一些操作第三章 基本數(shù)據(jù)類型教學(xué)目的:掌握幾種基本數(shù)據(jù)類型, 包括字符型、整型、長整型、浮點和

15、雙精度數(shù)據(jù)類型的基本概念, 以及常數(shù)、變量和數(shù)組的使用方法。重點: C+基本數(shù)據(jù)類型。難點:數(shù)組3.1 數(shù)據(jù)類型數(shù)據(jù)類型定義了變量可接受值的集合以及對它所能執(zhí)行的操作。類型的定義決定了三個方面的性質(zhì):8/43.a.該類型數(shù)據(jù)所占據(jù)內(nèi)存空間的大?。〝?shù)據(jù)的取值范圍)b. 數(shù)據(jù)在內(nèi)存中的存儲格式(定點、浮點)c.定義可以施加在該類型數(shù)據(jù)上的操作3.1.1 整型數(shù)據(jù)的表示方法整型數(shù)據(jù)在內(nèi)存中的表示方法(補碼) ,字符型數(shù)據(jù)也可以認為是補碼方式。3.1.2 實型數(shù)據(jù)的表示方法實型數(shù)據(jù)在內(nèi)存中的表示方法(浮點數(shù))3.2 常量3.2.1 整型常量十進制: yyy十六進制: 0xyyy八進制: 0yyy3.2

16、.2 實型常量格式:(x).(x)e(E)xx規(guī)定:小數(shù)點先后必須有一位數(shù)字e 的左面必須有數(shù)字(上面的要求) ,右面必須是整數(shù)尾數(shù)必須為十進制數(shù)說明: c 中的實型常量為雙精度型,如果需要特別指明為單精度型,可在實數(shù)后面加f 或 F3.2.3 字符常量定義:用單引號括起來的一個字符。c 語言支持擴展 ASCII 字符集,因此共包含256 個字符注意:1.轉(zhuǎn)義 ASCII 碼沒有十進制數(shù), 只有十六進制和八進制, 沒有X 就是八進制。 X 打頭時不能有 0。其取值范圍為ff,3772.任何字符都可以轉(zhuǎn)義方式給出, 一些常用控制字符給出了轉(zhuǎn)義字母,如 n,t,b,(, 在不引起誤解的情況下可以不

17、用,如whats,)3.非轉(zhuǎn)義字母前面加, 不起任何作用9/43.3.2.4 字符串常量字符串是用雙引號括起來的一系列字符。注意:當(dāng)字符串中包含轉(zhuǎn)義字符時,轉(zhuǎn)義符后的數(shù)值后面不能跟隨引起誤解的符號。八進制數(shù)后面不能跟 07,十六進制不能跟 09 和a-f(A-F )。3.3 變量3.3.1 變量的聲明1.基本類型int 整型( 4byte) char 字符型(1byte) float 實型( 4byte)驗證: coutsize=4 的值時則有結(jié)束標志。沒有初值時為隨機字符,所以也沒有結(jié)束標志。3.字符數(shù)組的輸入輸出1)單字符輸入輸出以單字符方式讀取時,應(yīng)注意添加結(jié)束標志(講一個讀不定長度字符

18、串的例子)11/43.2)以字符串方式輸入輸出注意:(1)讀取時不需要人為添加結(jié)束標志(2)以空格(廣義)為字符串的分隔標志4.相關(guān)的幾個函數(shù)strcpy(array,str)strcat(arraystr,str)strcmp(str1,str2)strlen(str)strlwr() strupr()strchr() 字符串中查找字符strrev() 反轉(zhuǎn)字符串strstr() 在字符串中查找字符串說明: array 數(shù)組(必須有足夠的空間) , str 字符串(數(shù)組、常量串、指針)在 C 中 array 可以為指針, VC 中只能是數(shù)組(教材中有錯誤)3.6 類型修飾符和常量修飾符自學(xué)內(nèi)

19、容檢查驗證 _intxx 方式定義類型的大小3.7 枚舉類型格式: enum 枚舉類型名 枚舉元素表 ;說明:枚舉元素的序號自0 開始,按照先后順序排列,也可指定序號。指定序號時應(yīng)預(yù)留足夠編碼空間,若不足,或者系統(tǒng)報錯,或者兩個元素具有相同的序號。枚舉量可以進行比較(如同字符,比較的是它們的序號)。枚舉元素是標識符,不是字符串,不能直接以串方式輸出,但枚舉變量可以直接輸出,輸出的是該元素的序號。3.8 typedef語句1.方法:1)按定義變量的方法寫出定義體2)將變量名換成類型名12/43.3)在最前面加上 typedef4)用新類型名定義變量2.說明類型定義僅僅是為一種類型起了一個別名,并

20、不能產(chǎn)生新的類型。3.9 Develper Studio 的文件處理功能主要討論了集成環(huán)境file 菜單的各個菜單的功能3.10 Visual C+ 程序的編譯、鏈接和運行3.11 查看和修改編譯、鏈接錯誤第四章 表達式教學(xué)目的:熟練掌握 +的各種表達式 , 特別是賦值表達式及其他有副作用的表達式。重點:邏輯運算符和邏輯表達式難點:運算符的優(yōu)先級和結(jié)合性總體注意:1.運算符的書寫方法。(與數(shù)學(xué)運算符的區(qū)別)2.運算符的功能。(單一功能還是多種功能,有沒有副作用)3.運算符的適用對象。4.運算符的優(yōu)先級和結(jié)合性。4.1 算術(shù)運算符和算術(shù)表達式1.運算符及優(yōu)先級+:加-:減*: 乘/:除和整除%:

21、取余*/% 高于 +-2.運算規(guī)則:操作數(shù)的類型應(yīng)當(dāng)一致, 若不一致則需要進行自動的類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則:字符型和單精度型只要參與運算則自動轉(zhuǎn)換為整型和雙精度型,其它類型的轉(zhuǎn)換總是向參與運算的高級別類型轉(zhuǎn)換。3.注意:有符號字符型 (含整型 )和無符號字符型參與運算對結(jié)果的影響。13/43. %運算要求運算數(shù)據(jù)必須為整型(含字符型) ,當(dāng)操作數(shù)中含有負數(shù)時,結(jié)果的符號與被除數(shù)一致。/運算當(dāng)操作數(shù)均為整型時,為整除運算 ,否則為除運算。表達式的類型由表達式計算的最終結(jié)果決定。(unsigned) char c=-1;int i;i=2*c;cout、=、 、邏輯運算符 & 和|級別相同(教材有誤)

22、int a,b,c,d;a=b=1;c=0;d=a+|b+&c+;couta=ab=bc=cendl;輸出為 210盡量避免對實型數(shù)進行等于或不等于的判斷,如果需要則采用|x-y|1e-4的方式 C 語言采用短路算法當(dāng)運算不需繼續(xù)計算即可判斷計算結(jié)果的時候,可以不再繼續(xù)后續(xù)計算。(簡化運算過程)14/43.與運算的前項為假,后項被短路如:a+&b+|c+當(dāng)首項為假時, b+被短路,但是 c+不能被短路對于全與表達式,第一項為假,后面全部不再計算或運算的前項為真,后項被短路如: a+|b+&c+ 當(dāng)首項為真時, b+被短路, c+也被短路a=1;b=1;c=0;d=a+|b+&c+;couta=

23、ab=bc=cd=dendl;輸出為 2101按理 c+不應(yīng)當(dāng)被短路,但是特例: d=a+|b+&c+; 當(dāng)首項為真時,后面的計算均被短路。 (先或后與,首項為真,后面不算)若首項為假,將上例a 初始為 0,則輸出結(jié)果為1 2 1 0,c+沒有被短路。應(yīng)用意義: if (n!=0&m%n=0)如果不短路將會出現(xiàn)除以零的錯誤4.3 賦值運算符和賦值表達式1.運算符=、+=等,任何一個雙目運算符均可以和“=”結(jié)合組成復(fù)合運算符。2.作用計算賦值運算符右側(cè)表達式的值,將該值寫入該變量所對應(yīng)的存儲空間。3.說明賦值運算符的級別極低(倒數(shù)第二) 。結(jié)合性為自右向左。4.賦值轉(zhuǎn)換c 語言允許不同類型數(shù)據(jù)間

24、可以相互賦值,由于他們存儲格式和取值范圍的不同,在賦值過程中會產(chǎn)生一些問題。15/43.字符型與短整型數(shù)據(jù)的賦值轉(zhuǎn)換c=s長送短:截高送低(會引起符號位的變化)s=c短送長:無、有正:送低高補0有負:送低高補1溢出的處理:對256 取余,若大于127 ,轉(zhuǎn)換二進制,求負數(shù)值2.短整型與整型數(shù)據(jù)的賦值轉(zhuǎn)換3.整型與實型數(shù)據(jù)的賦值轉(zhuǎn)換f=i無轉(zhuǎn)換誤差i=f小數(shù)點后截掉(截斷誤差) ,超出整型數(shù)所能表示范圍的溢出(溢出誤差)4.4 自增運算符1.格式i+(+i)2.作用在完成參加表達式運算的同時還完成自身的增量操作。3.分析i+: 先用后增,先參與表達式的計算,然后自身完成增量操作。+i: 先增后用

25、,先完成自身的增量操作,然后參與表達式的計算。4.注意 i+j 問題:先滿足左側(cè)變量的需求(左傾主義)在輸出語句(實參表)中出現(xiàn)時,按表達式自右向左解釋i=3;couti+iendl;將輸出 3 3顯然后一個 i 的值并沒有受到前面i+ 的任何影響。組合增量運算的理解分析 i=3; j=(i+)+(i+)+(i+);tc2.0 vc6.0+:i=6j=9tc3.0+: i=6j=12若仍然 i=3;cout(i+)+(i+)+(i+);16/43.cout3?i+4?L:R:N;2)和+運算合作問題ch=a+atc2.0 vc6.0+:0tc3.0+:1在關(guān)系表達式中出現(xiàn)時,c,vc 中視整體

26、為一個表達式。tc+視關(guān)系運算符兩側(cè)各為表達式ch=a+a?Y:N;17/43.tc2.0 tc3.0+:Y(1)vc6.0+:N(0)當(dāng)關(guān)系式出現(xiàn)在條件運算符的第一個表達式中時,關(guān)系運算符兩側(cè)各為一個表達式。 tc 和 tc+都是如此( tc+是統(tǒng)一的)。但 vc+仍然視為一個表達式。2.逗號表達式格式:用逗號將多個表達式連接起來的式子。計算:按先后順序逐個計算,整個逗號表達式的值是逗號表達式中最后一個表達式的的值。(一定要注意運算符的優(yōu)先級)4.8 類型不同數(shù)據(jù)之間的混合算術(shù)運算c 語言系統(tǒng)類型轉(zhuǎn)換有兩種形式1.隱式轉(zhuǎn)換在計算過程中系統(tǒng)會根據(jù)需要自動進行轉(zhuǎn)換,如計算時的轉(zhuǎn)換、賦值轉(zhuǎn)換等。2

27、.顯式轉(zhuǎn)換格式:(類型名)變量名或(類型名)(表達式)說明:類型的強制轉(zhuǎn)換只能轉(zhuǎn)換表達式的值的類型,不能轉(zhuǎn)換變量的類型。變量的類型是不可能被轉(zhuǎn)換的。4.9 運行錯誤的判斷與調(diào)試4.10 基本調(diào)試手段4.11 注釋號在調(diào)試中的作用4.12 條件編譯格式: #if #ifdef#ifndef#else#endif第五章 函數(shù)教學(xué)目的:熟練掌握+函數(shù)的編寫和調(diào)用方法,以及內(nèi)聯(lián)函數(shù)、函數(shù)重載和遞歸函數(shù)的概念。重點: +函數(shù)的編寫和調(diào)用方法難點:函數(shù)重載和遞歸函數(shù)18/43.5.1 函數(shù)的定義1.函數(shù)的格式存儲類別函數(shù)類型函數(shù)名(形式參數(shù)表)函數(shù)體 2.函數(shù)的類別性質(zhì):標準庫函數(shù),用戶自定義函數(shù)構(gòu)成形式

28、:有參函數(shù),無參函數(shù)3.基本性質(zhì)有且只有一個主函數(shù)。函數(shù)之間為平行關(guān)系,沒有位置的要求。函數(shù)定義不能嵌套 (調(diào)用可以嵌套 )。除了 main 函數(shù),任何一個函數(shù)都不能獨立地在程序中存在。4.說明 :函數(shù)類型規(guī)定了函數(shù)返回值的類型。函數(shù)的返回值需要一個存儲空間來存放,函數(shù)類型決定了這個空間的大小與格式。因此當(dāng)返回值的類型與函數(shù)類型不一致時,存在一個自動的類型轉(zhuǎn)換問題,可以理解為:函數(shù)(變量)返回表達式。如果一個函數(shù)不需要返回值,通常將其定義為 void,此時系統(tǒng)不為函數(shù)開辟存放函數(shù)返回值的空間。 return 語句的作用:返回主調(diào)函數(shù)、將返回表達式的值寫入函數(shù)類型空間 (參考賦值運算的作用 )。

29、對于 void 類型函數(shù),仍然可以使用 return語句,但是后面不能跟任何的表達式, return 語句僅起到返回主調(diào)函數(shù)的作用。5.2 函數(shù)的調(diào)用1.格式表達式語句函數(shù)實參19/43.2.調(diào)用形式嵌套調(diào)用與遞歸調(diào)用3.說明主調(diào)函數(shù)調(diào)用被調(diào)用函數(shù)后,主調(diào)函數(shù)被壓入堆棧,調(diào)用被調(diào)用函數(shù)的程序代碼,當(dāng)被調(diào)用函數(shù)執(zhí)行完畢,主調(diào)函數(shù)從堆棧中彈出,繼續(xù)執(zhí)行主調(diào)函數(shù)中的下續(xù)語句。因為這個原因,被調(diào)用函數(shù)并不能直接訪問主調(diào)函數(shù)中的各個變量。5.3 函數(shù)原型1.調(diào)用原則任何被調(diào)用函數(shù)必須在主調(diào)函數(shù)調(diào)用前進行聲明。函數(shù)聲明也就是函數(shù)原型。2.函數(shù)原型格式 : 函數(shù)名( );說明 :函數(shù)聲明是一個完整的函數(shù)首部

30、+“;”與函數(shù)相比,只是缺少函數(shù)體。3.聲明的形式被調(diào)函數(shù)在主調(diào)函數(shù)前定義。此時函數(shù)定義和函數(shù)聲明為一體。在主調(diào)函數(shù)中對被調(diào)函數(shù)進行聲明。在主調(diào)函數(shù)前,對被調(diào)函數(shù)進行全局聲明。特例: c 語言中函數(shù)類型為int 型時可以不聲明。(c+中必須聲明 )說明:當(dāng)函數(shù)定義與函數(shù)聲明分開時,函數(shù)聲明中必須有形參類型,形參名可以省略,函數(shù)定義中c+不可省略函數(shù)參數(shù)( c 中可?。?。c 中函數(shù)類型為整型時可以省略函數(shù)聲明。float max(float,float );void main()couty?x:y);5.4 函數(shù)間的參數(shù)傳遞5.4.1 值調(diào)用20/43.1.形參與實參的關(guān)系過程:實參向形參傳遞數(shù)

31、據(jù)。傳遞數(shù)據(jù)時,首先為形參開辟相應(yīng)的存儲空間,然后計算實參的值,然后將實參的值寫入形參的空間中。可以理解為相當(dāng)于執(zhí)行了一個賦值操作:形參實參,所以形參必須是個變量,而實參則可以是一個表達式。2.值傳遞與址傳遞通常將實參對形參的數(shù)據(jù)傳遞分為數(shù)值傳送(值傳送)和地址傳送(址傳送),但 c 語言中可以理解為都是值傳送。對于址傳送而言,由于此時的形參是存儲地址的量,實參的計算結(jié)果是個地址值,所以傳送的是地址。3.舉例swap()函數(shù)5.4.2 引用調(diào)用1.引用格式:類型& 引用名;例: int i,&yy=i;說明:引用的定義類似一個指針變量, 指針變量的特征符號是 *, 而引用的特征符號是 & 。引

32、用只能在定義時建立和變量的對應(yīng)關(guān)系,在程序中不允許再次建立關(guān)系。舉例:int i,j,&yy=i,*p;i=3;j=4;p=&i;couti;coutyy;cout*p;p=&j;cout*p;yy=j ;(錯誤 )概念 :引用是為一個量規(guī)定一個別名。說明 :引用一般不在程序中使用,主要在參數(shù)傳遞中應(yīng)用。21/43.2.引用作為函數(shù)參數(shù)引用形參:函數(shù)定義的參數(shù)表中, 名字前面加上符號 & 的參數(shù)為引用形參。說明 :引用的實參必須是同種類型的變量,不能是表達式。實參傳遞給引用形參的是實參的地址。引用是常值地址(借用這個概念,這里主要強調(diào)的是該值不允許改變 ,與教材中的常值指針變量意義不同)。引用

33、沒有相應(yīng)的存儲空間,函數(shù)中對形參的訪問,實質(zhì)上是對實參空間的訪問。使用引用時,與使用變量相同,不需要加引用符。函數(shù)執(zhí)行完畢,引用和實參的對應(yīng)關(guān)系即中止。引用的主要用途是將實參的地址傳給形參,而且不允許改變形參的指向。舉 swap 的例子5.5 函數(shù)重載1.問題的提出具有相似作用的函數(shù),由于一些細小的差別,不得不定義很多函數(shù)。如絕對值函數(shù)。2.函數(shù)重載定義同名且功能相仿的函數(shù)。函數(shù)重載實際上是函數(shù)名重載,即支持多個不同的函數(shù)采用相同的名字。3.重載條件參數(shù)表中對應(yīng)的參數(shù)類型不同。int max(int,int) float max(float,float)參數(shù)表中參數(shù)的個數(shù)不同。int max(

34、int,int,int) int max(int,int)參數(shù)表中不同類型參數(shù)的次序不同。float max(float,int) float max(int,float)4.重載的匹配函數(shù)重載要求編譯器能夠唯一地確定調(diào)用一個函數(shù)時應(yīng)具體執(zhí)行哪個函數(shù)的代碼。當(dāng)調(diào)用重載函數(shù)時,系統(tǒng)如何確定應(yīng)當(dāng)調(diào)用哪個函數(shù)呢?22/43.匹配原則:按照參數(shù)類型嚴格匹配通過內(nèi)部類型轉(zhuǎn)換尋求匹配通過用戶定義的轉(zhuǎn)換進行轉(zhuǎn)換尋求匹配(用戶定義轉(zhuǎn)換不討論)5.說明僅僅函數(shù)類型不同不能重載。int max(int,int) float max(int,int)重載不能引起二義性。long max(long,long)floa

35、t max(float,float)調(diào)用時 max(c1,c2),字符型可以轉(zhuǎn)換為整型,但是由于long 不是基本類型,系統(tǒng)內(nèi)一般不定義整型和實型的自動轉(zhuǎn)換。所以系統(tǒng)會不知道該調(diào)用哪一個函數(shù)而報錯。重載體現(xiàn)了對多態(tài)性的支持。5.6 局部變量和全局變量1 概念局部變量 :在函數(shù)內(nèi)部定義的變量。全局變量 :在函數(shù)外部定義的變量。2.變量的作用范圍局部變量 :僅在定義該變量的函數(shù)內(nèi)部(甚至復(fù)合語句內(nèi)部)。全局變量 :自定義位置以下部分的函數(shù)(暫時) 。3.說明局部變量與全局變量重名時,在局部變量有效的范圍內(nèi),全局變量無效。小范圍的局部變量與大范圍的局部變量重名時,在小范圍內(nèi),大范圍的局部變量無效。盡

36、管全局變量提供了一種各個模塊間相互聯(lián)系的渠道,但是由于它破壞了程序的模塊化結(jié)構(gòu),降低了程序的可讀性,因此盡量避免使用。為了在重名的情況下能夠訪問全局變量,c+ 提供了 :域作用符,以訪問全局變量。5.7 內(nèi)聯(lián)函數(shù)1.格式inline 函數(shù)23/43.2.說明內(nèi)聯(lián)函數(shù)的關(guān)鍵字必須在說明中出現(xiàn),否則不會把函數(shù)作為內(nèi)聯(lián)函數(shù)來處理。定義中有沒有inline 不作為是否是內(nèi)聯(lián)函數(shù)的依據(jù)。內(nèi)聯(lián)函數(shù)的函數(shù)體必須短小(15 個語句),結(jié)構(gòu)簡單( if 的復(fù)雜嵌套、 switch、循環(huán)都不行)。5.8 帶有默認參數(shù)的函數(shù)c+允許在聲明或定義函數(shù)時給形參預(yù)賦默認值,調(diào)用有默認值的函數(shù)時如果給實參,則實參傳遞給形參

37、,如果不給實參,則以默認值為實參值。說明 :1.默認值只能自右向左給出。2.聲明與定義分開時, 只能在聲明中指定默認值, 定義中不能有默認參數(shù)。3.既有默認參數(shù),又有函數(shù)重載時,注意不要產(chǎn)生二義性。例如: max(int a,int b) max(int a,float b=4) max(float a=3,int b=4)5.9 C+的庫函數(shù)5.10 函數(shù)模板講完類后再講5.11 變量的存儲類別局部量的存儲屬性 :static auto全局量的存儲屬性 :static externstatic,extern為靜態(tài)區(qū), auto 為動態(tài)區(qū)區(qū)別:時機。動態(tài)區(qū)數(shù)據(jù)的初始化在運行時完成,靜態(tài)區(qū)數(shù)據(jù)在

38、編譯時完成。初值。沒有初值時,動態(tài)區(qū)僅分配存儲空間,變量的值為隨機數(shù),靜態(tài)區(qū)變量自動初始為 0。生命期。動態(tài)區(qū)變量的生命期同它所在的函數(shù),靜態(tài)區(qū)變量的生命期為整個程序的生命期。初始化次數(shù)。動態(tài)區(qū)變量每執(zhí)行一次,則初始化一次,靜態(tài)區(qū)變量24/43.僅在程序執(zhí)行前初始化一次。全局變量的存儲類別問題:(1)全局變量的缺省類別為extern(函數(shù)的缺省類別也是extern)(2)全局變量的類別為static 時只能被本文件的函數(shù)訪問, 為 extern 時可以被所有文件的函數(shù)訪問。(3)訪問本文件的全局變量 :若全局變量在函數(shù)前面定義,不需聲明,否則必須聲明 (加 extern,無論該全局變量為什么類

39、別)。(4)訪問其它文件中的全局變量也必須進行聲明。注意:若使用多文件的全局變量,此時定義位置不能隨便使用extern,否則系統(tǒng)搞不清楚哪個是定義(有初值),哪個是聲明(無初值) 。例:靜態(tài)局部量與動態(tài)局部量的區(qū)別main() int k=4,m=1,p; p=func(k,m);printf(%d,p);p=func(k,m);printf(%dn,p);func(int a,int b)static int m=0;int i=2;i+=m+1;m=i+a+b;return(m);輸出結(jié)果 8,165.12 Develooper Studio的跟蹤調(diào)試功能第六章 指針教學(xué)目的:理解和掌握指

40、針的基本概念,以及指針型變量的聲明方法、怎樣通過指針類型的變量去訪問某個變量或數(shù)組元素的值;引用的概念和用法。重點:指針的使用方法難點:指針與數(shù)組和函數(shù)25/43.理解和掌握指針的基本概念,以及指針型變量的聲明方法、怎樣通過指針類型的變量去訪問某個變量或數(shù)組元素的值;引用的概念和用法。6.1 指針與地址6.1.1 地址1.概念地址:存儲空間的編號。變量名:地址空間的符號地址。2.表示地址的量變量的地址:可以通過運算符獲取&a。數(shù)組名:數(shù)組所占據(jù)連續(xù)空間的起始地址。函數(shù)的入口地址:函數(shù)名隱含了兩個地址,一個是函數(shù)的入口地址,一個是函數(shù)存儲數(shù)據(jù)的存儲地址。6.1.2 指針1.概念指針:即地址, C 語言中對于地址的一種稱呼方式。變量的指針:變量的地址。指針變量:專門用來存儲地址的變量。2.指針變量的定義格式:類型標識符* 變量名;說明:(1)* 僅是一個標識, 表明所說明的變量是一個指針變量。并不是變量名的組成部分。(2)指針變量是一種特殊變量,它用來存儲其

溫馨提示

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

最新文檔

評論

0/150

提交評論