#中山大學(xué)09級C++實(shí)驗(yàn)10教材_第1頁
#中山大學(xué)09級C++實(shí)驗(yàn)10教材_第2頁
#中山大學(xué)09級C++實(shí)驗(yàn)10教材_第3頁
#中山大學(xué)09級C++實(shí)驗(yàn)10教材_第4頁
#中山大學(xué)09級C++實(shí)驗(yàn)10教材_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C+面向?qū)ο蠹夹g(shù)課程實(shí)驗(yàn)指導(dǎo)用書課程名稱:程序設(shè)計(jì) / 31、目的與要求:通過上 機(jī)實(shí) 驗(yàn)理解 C+程 序的 執(zhí)行過程,掌 握 C+語言 的語 法特征;熟練掌握在 Visual C+ 開發(fā)環(huán)境下獨(dú)立編寫和調(diào)試C+ 程序 ; 掌握面向?qū)ο蟪绦蚝头盒统绦蛟O(shè)計(jì)思想和技術(shù),建立起用面向?qū)ο笏季S 和泛型思維進(jìn)行問題分析和程序設(shè)計(jì)的習(xí)慣;掌握用C+語言解決 實(shí) 際問題的方法,建立優(yōu)秀的面向?qū)ο缶幊毯头盒途幊田L(fēng)格,為進(jìn)行大型 程序設(shè)計(jì)和科研編程打下基礎(chǔ)。、學(xué)時(shí)分配6 個(gè)實(shí)驗(yàn)共 36學(xué)時(shí)實(shí)驗(yàn)名稱學(xué)時(shí) 分配實(shí)驗(yàn)一、 C+程序設(shè)計(jì)基礎(chǔ)與開發(fā)環(huán)境4實(shí)驗(yàn)二、類與對象6實(shí)驗(yàn)三、運(yùn)算 符重 載6實(shí)驗(yàn)四、繼承機(jī)制、虛基類、

2、虛函數(shù)與運(yùn)行時(shí)多態(tài)8實(shí)驗(yàn)五、模板、 STL 與泛型編程8實(shí)驗(yàn)六、異常處理、 C+ I/O 流4、實(shí)驗(yàn)?zāi)康暮蛯?shí)驗(yàn)內(nèi)容實(shí)驗(yàn)一、 C+程序設(shè)計(jì)基礎(chǔ)與開發(fā)環(huán)境實(shí)驗(yàn)?zāi)康摹?通過 實(shí)驗(yàn)體 會 C+在面向 過程程序 設(shè)計(jì)方 面與 C 的異同2初步 了解 C+的程序設(shè)計(jì) 風(fēng)格3掌握函數(shù)重載和命名空間4進(jìn)一 步熟悉 Vi sual C+集成開發(fā) 環(huán)境實(shí)驗(yàn)內(nèi)容】1編寫 一個(gè)完 整的面向 過程風(fēng)格的 C+程序 ,滿足 以下條件 :1 三個(gè) 重載 函數(shù),分 別接收 兩個(gè)整 數(shù)、兩 個(gè)浮點(diǎn) 數(shù)和兩 個(gè)字 符 串做參數(shù) (引 用類型,實(shí)現(xiàn)兩個(gè)數(shù)互相交換。2 在主 函數(shù)中 輸入交換 前和輸 出交換 后的兩個(gè) 數(shù),實(shí)現(xiàn)兩數(shù)

3、值交換 。3 主函 數(shù)應(yīng)給 出必要的 輸入提 示。2 有以下 name space 定 義,namespace myn space1 / 31 const in t SIZE = 100。int A SIZE。int mo de(in t , int 。mode 函數(shù)的功能是輸出數(shù)組中的眾數(shù),及其出現(xiàn)的次數(shù) ,其返回值 是眾數(shù)的個(gè)數(shù)。完成 myn space 的定義,并在 main 函數(shù)中寫出完整 程序,演 示函數(shù)的功能 (將 myn space:A 作為實(shí) 參傳給 mo de函 數(shù)。3分別寫 C 和 C+程序,將文本文件 old.txt 中的所有內(nèi)容拷貝到新文 件 new. tx t 中 。

4、4輸入下面的程序,用編譯器的單步調(diào)試功能觀察其輸出,說明為什么?如 果把注釋語句中的注釋符號“/”去掉,程序能運(yùn)行嗎?試解釋原因。#include using name space std 。namespace alipint ai= 16, aj= 15, ak= 23。int aj= 0 。void ma in ip( /cout ai:ai endl。using name space al ip。+ ai 。cout ai:ai endl。/+aj 。+ :a j 。cout :aj:aj endl 。+ ali p:a j 。cout alip:aj: ali p:aj endl。co

5、ut ak: akendl 。int ak=97。cout ak: akendl 。+ ak 。cout ak: ak/ 31cout output startin gendl。 /coutbi: biendl。using blip :bi。+bi。cout bi:bi endl。cout bj:bj endl。 using blip :bj。+bj。cout bj:bj endl。int bk 。cout bk: bkendl 。/usin g blip :bk。 cout output sta rtin g 。 return 0 。實(shí)驗(yàn)二、類與對象實(shí)驗(yàn)?zāi)康摹?學(xué)習(xí)類的定義和使用方法2學(xué)習(xí)對

6、象的聲明和使用3學(xué)習(xí)對象構(gòu)造中,默認(rèn)構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、類型轉(zhuǎn)換構(gòu)造函數(shù)和普 通多參數(shù)構(gòu)造函數(shù)的定義和使用4類靜態(tài)成員的定義和使用5體會深拷貝和淺拷貝的區(qū)別6使用 Vis ual C+的 Debug 功能,觀 察程序 流程,觀察類 的構(gòu)造函 數(shù)、析 構(gòu)函數(shù)的執(zhí)行順序和過程7體會基于對象程序設(shè)計(jì)方法和面向過程程序設(shè)計(jì)方法的區(qū)別實(shí)驗(yàn)內(nèi)容】1完成以下類定義:class serie sComp int n。 /n 大 于或等于 1seriesComp (in t n。int sum( 。int fib ( 。double tayl or(double x。/ 31。其中 sum( 計(jì)算 1+2+3

7、+ + n;fib(計(jì)算斐波納契(Fi bonacci數(shù)列前 n 項(xiàng)和;. ( 1)nn x n!2tayl or( 計(jì) 算 1 x x 1! 2!2定義一個(gè)類,確保該類實(shí)例化的對象數(shù)目最多只能有一個(gè)(提示,使用 static 數(shù)據(jù)成 員和成員 函數(shù)。3Josephus 問題: n 個(gè)人 圍坐在一 圈,現(xiàn)從指定 的第 s 個(gè)人 開始報(bào)數(shù) ,數(shù)到 第 m 個(gè)人出列, 然后從出 列的下 一個(gè)人 重新開始 報(bào)數(shù),數(shù)到第 m 個(gè) 人又出 列,如此重復(fù),直到所有的人全部出列為止。定義一個(gè)鏈表類和 Josephus 類。編制應(yīng)用程序,給出人數(shù) n,起始位置 s 和數(shù)人數(shù) m,解決 Josephus 問題

8、。仔細(xì)體會你的 方法與面向過程 的解決 方法的區(qū)別。4定義 一個(gè)名 為 Date 的 類,用 于輸入 并驗(yàn)證日 期,類 中的數(shù) 據(jù)成員和 成員函 數(shù)應(yīng)滿足下面的規(guī)則;在主函數(shù)中編寫相應(yīng)代碼驗(yàn)證這些規(guī)則是否正確地 實(shí)現(xiàn)了;并用 Debug 功能仔細(xì)體會程序的運(yùn)行過程。1 日期 包括 年(year、月(month 、日(day ,均為整型數(shù)據(jù),以及一個(gè)布 爾數(shù)據(jù)成員 pass 用來判斷輸入日期是否正確。2 布爾類型 private 成員函數(shù) checkFo rmat(,有一個(gè)字符串引用形參,驗(yàn) 證讀入的日期格式是否正確yyyy:mm: dd 格式)?3 void 類型 private 成員函數(shù) v

9、a lidate(,沒有形參。判斷輸入的日期是 否合法。4 默認(rèn) 構(gòu)造函 數(shù),沒 有形參, 將 year, month,day 分別 初始化 為 2006, 1,1;在構(gòu)造函數(shù)中要調(diào)用 valid ate)。5 定義 拷貝構(gòu)造函數(shù)6 定義類型轉(zhuǎn)換構(gòu)造函數(shù),能從字符串轉(zhuǎn)換成 Date 對象。7 使用帶默認(rèn)參數(shù)的構(gòu)造函數(shù),三個(gè)整形形參 in t y,int m= 2,in t d=29, 分別對 year,month,day 賦值;注意要調(diào)用 validate)驗(yàn)證。8 void 類型 public 成員函數(shù) setD ate(,有一個(gè)字符串引用形參,負(fù)責(zé)設(shè) 置新日期,首先調(diào) 用 checkFo

10、rmat(判斷日 期數(shù)據(jù) 格式是否正確,如正 確,繼續(xù)調(diào)用 valid ate(驗(yàn)證輸入日期9 void 類型 publi c 成員函數(shù) prin tD ata(,沒有形參,根據(jù) pass值決定是 否打印設(shè)置的日期,如果打印,要按照”yyyy 年 mm 月 dd 日”的格式。實(shí)驗(yàn)三、運(yùn)算符重載/ 31【實(shí)驗(yàn)?zāi)康摹?掌握常用運(yùn)算符重載的定義方法2掌握運(yùn)算符重載的兩種方式:成員函數(shù)和友元函數(shù)3體會 運(yùn)算符 重載對構(gòu) 建 A DT 的 作用【實(shí)驗(yàn)內(nèi)容】1參考 教材第 11 章 的例子。 實(shí)現(xiàn)數(shù) 學(xué)中的 復(fù)數(shù)類 Comp lex ,它能實(shí)現(xiàn) 普通 的 +、 -、* 、 /數(shù)學(xué) 運(yùn)算, =、 +=、 -

11、=、 *= 、 /= 賦值運(yùn) 算, 前 后序 的 自增 自 減,(三個(gè)運(yùn) 算符。試 完 成類 定義, 使得類 vecto rConta iner 的對 象 V C 表 現(xiàn)出以下行為 :V Ci 。 / 打 印 V C 中 第 i 個(gè) 向 量 的 所 有 元 素 , i 為 整 數(shù) , 下 同VC-outp ut(。 /打印 VC 中某個(gè) 向量所 有元素及 其元素 和,該向 量的元素和在所有向量元素和中是最大的V C(。/把 VC 中的 向量按 照其元 素和大 小排序, 然后順 序輸出向量及其元素和V C(i 。/把 VC 中的向 量按照其 元素和 由小到 大排序, 然后輸 出第 i 個(gè)向量所有

12、元素及其元素和V C(i, j 。/輸出 第 i 個(gè)向 量的第 j 個(gè)元素 。思考以下問題:Ve ctor 類 和 vectorContai ner 類有 良好的“封裝 性”嗎?如果 vecto rContai ner 不是 Vector 的友 元,代碼應(yīng)如何 改動? cla ss Ve cto rfloat v4 。/fri end class vecto rContain er。public:Vector(flo at ve for ( int i= 0。 ivi=vei 。/ 31Vector(for ( int i= 0。 ivi=0。Ve ctor( voi d outp ut(。c

13、lass vectorContain erVector* _v 。int _size。/public:vectorContain er(Vector *v e, int siz e_v = new Ve ctorsiz e。_size = siz e。for ( int i= 0。 i_vi =vei。vectorContain er (。vectorContain er( 。Vector& operator(in t idx。Vector* operato r-(。voi d operator( (。Vector& operator(in t i 。float& operator(int i

14、, int j 。 實(shí)驗(yàn)四、繼承機(jī)制、虛基類、虛函數(shù)與運(yùn)行時(shí)多態(tài) 實(shí)驗(yàn)?zāi)康摹?學(xué)習(xí)類的繼承關(guān)系,聲明派生類2熟悉不同繼承方式下派生類對基類成員的訪問限制3學(xué)習(xí)多繼承的原理,虛基類的用途及其使用方法4虛函數(shù)的功能,虛函數(shù)支持面向?qū)ο蠖鄳B(tài)機(jī)制的工作原理5學(xué)習(xí)純虛函數(shù)與抽象基類的定義以及其作用,理解抽象基類和具體類的區(qū) 別。6基類與派生類構(gòu)造函數(shù)和釋構(gòu)函數(shù)的調(diào)用順序。7理解基本的設(shè)計(jì)模式實(shí)驗(yàn)內(nèi)容】/ 311 編 寫 一 個(gè) 基 類 , 聲 明 有 publ ic 、 prote cted、 pri vate 成 員 , 然 后 使 用 public 繼承 ,prote cted 繼 承,pri va

15、te 繼承 分別生 成派生 類,觀察 派生類 對基類不同類型成員的訪問,驗(yàn)證以下繼承規(guī)則:1A publ ic me mb er is accessib le from anyw here wi thin a program.2A private me mber can be accessed onl y by the memb er functio ns and f ri ends of i ts cla ss.3A pro tected memb er behaves as a public me mb er to a deri ved cla ss, and behaves as a p

16、riva te memb er to th e rest of the program.2有類定義class basepublic:virtual voi d iam( cout 輸出 派生類 的名字。創(chuàng)建 這些類的 對象, 并分別 通過這些 對象調(diào) 用 i am( 。把 指 向 兩 個(gè) 繼 承 類 對 象 的 指 針 分 別 賦 值 給 base* 指 針 , 通 過 這 些 指 針 調(diào) 用 iam( 。3防真農(nóng)場,一個(gè)哺乳動物類如下所示:#include class M amma lpublic:M amma l(:itsAge(2,i tsWeight(5cout cout const

17、return itsAge。 voi d SetA ge(int age itsAge=age。int GetWe ig ht( const retu rn its We ight。 / 31void SetWe ight(int weight it sWeight=weight。void Move( const cout const cout const cout 狗屬 哺乳動 物,且它的屬 性有品 種之分在 哺乳類基 礎(chǔ)上 增加品種 數(shù)據(jù)成 員),叫聲區(qū)別于其它動物,輸出”Woof!”),還會搖尾巴 (增 加成 員函 數(shù),輸 出”Tail wagging”,乞討食 物(增加成 員函 數(shù),輸

18、 出” bagging for food”。2 驢、馬、豬也屬哺乳動物,其叫聲分別為:“Meow!”,”Win nie!”,” Oin k! ” 。3 騾既是驢,也是馬,叫聲為”mu le”。4 編 程分別使各個(gè)動物表現(xiàn)為不一樣的行為, 并觀察 基類與 派生類的構(gòu)造 函數(shù)與釋構(gòu)函數(shù)的調(diào)用順序。5 把 Mamma l 中的非 構(gòu)造、非釋構(gòu)成 員函數(shù) 改為虛函數(shù), 然后派生 不同的 動物類,編寫程序說明虛函數(shù)的作用 如果 M amal 中的非構(gòu)造、非釋構(gòu)成員函數(shù)中有純虛函數(shù),派生不同的動 物類、選課 select(等成員函數(shù);派生出軟件學(xué)院學(xué)生類 ssStu dent,管理學(xué)院學(xué)生類 msStud

19、ent;從 ssStu dent 和 msStudent派生出雙學(xué)位學(xué)生 ddStu dent。它 們都定 義了 reg(和 select(成員函 數(shù),編寫 程序體 驗(yàn)虛基類、虛函 數(shù)的作 用。5*定義類,滿足以下基本需求:1 該類主 要功能是對數(shù)組 進(jìn)行排 序;2)排序的算法有簡單選擇排序、冒泡排序等,可選;3)類設(shè)計(jì)盡量滿足“良好的可擴(kuò)展性”要求,也就是類功能有良好的可擴(kuò) 充性,比如排序算法還可以添加插入排序、快速排序等。6*某市某產(chǎn)鞋鄉(xiāng)鎮(zhèn)企業(yè),需要開發(fā)一套管理軟件,對企業(yè)的產(chǎn)鞋過程進(jìn)行管 理。在該企業(yè)中,生產(chǎn)一種鞋需要一條生產(chǎn)線(比如皮鞋需要一種生產(chǎn)線, 運(yùn)動鞋需要另一種。該企業(yè)隨著業(yè)務(wù)

20、的不斷發(fā)展,會不斷引進(jìn)新生產(chǎn)線, 生產(chǎn)新品種的鞋,所以企業(yè)希望開發(fā)的軟件能夠不斷適應(yīng)這個(gè)需求。你能/ 31用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,模擬該軟件的核心功能實(shí)現(xiàn)嗎?實(shí)驗(yàn)五、模板、 STL 與泛型編程實(shí)驗(yàn)?zāi)康摹?掌握 C+中 的模板機(jī)制對泛型編程 思想的 支持 2掌握泛型函數(shù)、泛型類的定義及其使用方法3熟悉 STL Sequence 和 STL A ssociative容器類的使用方法4練習(xí) STL 通用算 法、函數(shù)對象和 函數(shù)適 配器的使 用 實(shí)驗(yàn)內(nèi)容】1用模板機(jī)制實(shí)現(xiàn)泛型函數(shù),重寫實(shí)驗(yàn)一的第一題,功能要求不變。 2泛型化實(shí)驗(yàn)三的 complex 類,使其能處理不同的數(shù)據(jù)類型的數(shù)據(jù)。 3下面 的源

21、代 碼是模擬 STL list 的實(shí)現(xiàn) ,試仔 細(xì)體會鏈表的 性質(zhì)和 Iterator的實(shí)現(xiàn)方法請補(bǔ)充完成未定義的成員函數(shù))。并編寫程序比較這個(gè)實(shí)現(xiàn)和 標(biāo)準(zhǔn) STL list 實(shí)現(xiàn) 的異同。* * * * * /#include #include using name space std 。class li st public:struct listelem。 /f orward declarations class ite rator 。friend iterato r。lis t(:h(0, t(0 /construct the emp ty listlis t(siz e_t n_ele

22、ments, char c 。lis t(const lis t& x。lis t(iterato r b, iterator e。l is t( rel ease(。 ite rator begin(const retu rn h。 iterator end(const retu rn t。 vo id push_f ront( char c。vo id pop_front( 。char& front( return h - data。 char& back( return t - data。 bool emp ty( const return h = 0。 vo id rele ase(。

23、friend ostream& operato r。 struct listelem / list cell/ 31 char data。li ste lem* next, *p rev 。li ste lem( char c, li stel em* n, liste lem* p:d ata(c, next(n, prev(p 。/scoped with in class li stclass ite ratorpublic :iterato r(listelem* p = 0:ptr(p iterato r operator+(。iterato r operator-(。iterato

24、r operator+(in t 。iterato r operator-(i nt。li ste lem* operator-( retu rn ptr。 。char& operator*( retu rn ptr - data。 operato r l is t ele m*( return ptr。 /c onversion private:li ste lem* ptr。/c urrent listele m or 0。private:lis tele m* h, *t 。 /head and tail。list:l ist(siz e_t n_elements, char casse

25、r t(n_eleme nts 0。h = t = 0。for(size_t i = 0。 i push_front(c。list:l ist(const lis t& xlis t:i terato r r = x. begin ( 。h = t = 0。 /n eeded for empty l istwhi le (r != 0push_front(*r + 。void l ist:rele ase(wh ile (h != 0pop_front(。ostream& operato r/ 31 lis t:i terato r p = x. begi n(。 /gets x. hout

26、out *p ,。 /g ets a char&+p。 /advances iterator using nextcout n 。retu rn out 。void l ist:push_front(char clis telem* temp = new li stelem( c, h, 0。 if (h != 0 /was a nonemp ty list h - prev = te mp 。temp - next = h 。h = temp 。else /was an emp ty l isth = t = te mp。void l ist:pop_f ront( lis tele m*

27、temp = h。if (h!= 0 /wa sa nonemp ty listh=h- next 。dele tetemp 。else/was anemp ty l istcout emp ty list! asser t(ptr != 0 。ptr = ptr - next。retu rn *t his。list:i terator lis t:iterator:operator+(int asser t(ptr != 0 。ite rator temp = *t hi s。ptr = ptr - next。retu rn temp 。int ma in(/ 31list l1。l1.pu

28、sh_front(A 。l1.push_front(F 。l1.push_front(C 。l1. push_front( z 。l1.push_front(l 。cout l1。return 0 。4理解 教材給 出的 Sequence 容器成 員類型 ,Sequence 容器 成員函數(shù) 用法。 分別編 寫程序,演示 Sequence 容器 ve ctor、list、 deque 的構(gòu)造、 插入、 刪除、訪問、賦值、交換操作。5理解 教材給 出的 A ssociative 容器 成員類 型,Associative 容器成員 函數(shù)功 能。 分別編寫 程序,演示 Associative 容器 s

29、et、map、multiset、 mu ltimap 的構(gòu)造、插入、 刪除、 訪問、 賦值、 交換操作 。6Using a random numb er generator, generate 10, 000 integers between 0 and 9,999. Place them in a list container. Comp ute and print the median valu e. What was expected? Comp ute th e frequencies of each valu e。 in other words, how many 0s were g

30、enerate d, how ma ny 1s were generated, and so forth. Prin t the valu e with greatest frequency. Use a vector to store th e frequencies. Be noticed that yo u should use al gor i t hm, f unct i on obj ect and f unct i on adapt er.實(shí)驗(yàn)六、異常處理、 C+ I/O 流實(shí)驗(yàn)?zāi)康摹?理解 C+語 言的異常拋出處理機(jī)制2學(xué)習(xí)異常處理的聲明和執(zhí)行過程3學(xué)習(xí) C+中 的格式化 I/

31、O4掌握 C+文件 I/O 流實(shí)驗(yàn)內(nèi)容】1編寫計(jì)算整數(shù)階乘的程序,用異常拋出處理機(jī)制進(jìn)行輸入、溢出時(shí)異常的 處理。在主程序中設(shè)置不同條件,觀察程序的處理流程。2 Suppose yo u are given lin e-oriented data in a file formatted as follows:Austral ia5E56,7667230284,La ngler,Tys on,31.2147,0./ 31 2B97,7586701,Oneill,Zeke,553. 429,0. 56065 4D75,7907252710,Nic kerson,Ke ll y,761.612,0.

32、010276276 9F2,6882945012,Hartenbach,Neil, 47.9637,0.0006471644 A ustria480F,7187262472,Oneill,Dee,264.012,0. 013 1B65,4754732628,Haney, Ki m, 7.33843,0.8475 DA1,1954960784,Pascente,Le ster,56.5452,0.0007629529 3F18,1839715659,Elsea,Chelsy, 801. 901,0. 5 Belg iu mBDF,5993489554,Oneill ,Meredith,283.4

33、04,0.0038239127 5A C6,6612945602,Parisienne,Bi ff,557.74,0.0075254727 6AD,6477082,Pennington,Li zanne,31.0807,0. 0004193544 4D0E,7861652688,Sisca,Fr ancis,704.751,0.Bahama s 37D8,6837424208,Parisienne,Samson,396. 104,0. 0053445 5E98,6384069,Willis ,Pam,90.4257,0.059246 1462,1288616408,Stover,Hazal,

34、583.939,0. 1 5FF3,8028775718,Stroms tedt,Bunk,39.8712,0.000537974 1095,3737212,Stover,Denny, 3.05387,0.8883 7428,2019381883,Parisienne,Shane,363. 272,0.00490155The heading of each section is a region, and every line under that heading is a seller in that region. Each comma-separated field represents

35、 the data about each seller. The first field in a line is the SELLER_ID which unfortunately was written out in hexadecimal format. The second is the PHONE_NUMBER (notice that some are missing area codes. LAST_NAME and FIRST_NAME then follow. TOTAL_SALES is the second to the last column. The last col

36、umn is the decimal amount of the total sales that the seller represents for the company. You are to format the data on the terminal window so that an executive can easily interpret the trends. Sample output is given below.A ustralia*La stName* *Fi rstName* *ID* *P hone* *S ales* *P ercent* La ngler

37、Tys on 24150 766-723-0284 31.24 4. 21E-02Oneill Zeke 111 59 XXX-758-6701 553.43 7.47E-013有磁盤文件 stu dent.txt,文件記錄格式為:學(xué)號 姓 名 性別 出 生年月 生源地 高 考成績修改實(shí)驗(yàn)五(3的鏈表結(jié)構(gòu),使其結(jié)點(diǎn)能存儲 student. txt 的記錄。并在相應(yīng)成 員函數(shù) 里加入 異常拋出處理代 碼。用 student.txt 的 所有數(shù)據(jù)初始化 列表。 列表能實(shí)現(xiàn)按照高考程序排序,排序后的所有學(xué)生紀(jì)錄輸出到 student_sort. txt 中 。/ 31附錄 VC 程序調(diào)試 ( 本部分

38、錄自網(wǎng)上資料在開發(fā)程序的過程中,經(jīng)常需要查找程序中的錯(cuò)誤,這就需要利用調(diào)試工 具來幫助你 進(jìn)行程 序的調(diào) 試,當(dāng)然 目前有 許多調(diào) 試工具, 而集成 在 VC 中 的調(diào)試 工具以其強(qiáng) 大的功 能,一 定使你愛 不釋手 。下面 我們先來 介紹 VC 中的調(diào) 試工具 的使用。VC 調(diào)試工具1 1 調(diào)試環(huán)境的建立在 VC 中 每 當(dāng) 建 立 一 個(gè) 項(xiàng) 目 (Pr oj ect 時(shí) , VC 都 會 自 動建 立 兩個(gè) 版 本 : Rel ease 版本, 和 Debug 版本, 正如 其字面 意思所 說的,Rel ease 版本是 當(dāng)程序 完成后, 準(zhǔn)備 發(fā)行時(shí)用 來編譯 的版本, 而 Debug

39、 版 本是用 在開發(fā) 過程中進(jìn) 行調(diào)試 時(shí)所用的版本。DEBUG 版 本當(dāng)中 ,包含 著 MI CROSOFT 格式的 調(diào)試信 息, 不 進(jìn)行任 何 代碼 優(yōu)化,而在 RELEASE 版本 對可執(zhí) 行程序 的二進(jìn)制 代碼進(jìn) 行了優(yōu) 化,但是 其中不 包含任何的調(diào)試信息。在新建 立的項(xiàng) 目中, 你所看到 是 DEBUG 版本,若 要選擇 RELEASE 版 本,可 以 選 擇 菜 單 PROJ ECT 中 的 SETTI NG 命 令 , 這 時(shí) 屏 幕 上 面 彈 出 PROJECT SETTEI NG 對話框 ,在 SETTI NG FOR 下拉列表 中選擇 RELEASE,按 OK 退 出

40、, 如 圖 4. 1 。圖 4. 1在調(diào)試 程 序 的時(shí)候必 須使用 DEBUG 版本, 我們可以 在 Pr oj ect Set t i ng 對話框的 C/ C+頁 中設(shè)置 調(diào)試選 項(xiàng)。/ 31圖 4. 2各個(gè)選項(xiàng)的含意如下:Program Dat abase 表示產(chǎn)生一個(gè)存儲程序信息的數(shù)據(jù)文件(. PDB, 它 包含了類型信息和符號化的調(diào)試信息;Li ne Number s Onl y 表示程序經(jīng)過編譯和鏈接產(chǎn)生的. OBJ 或. EXE文 件僅僅包含全局和外部符號以及行號信息;C7 Compat i bl e 表示產(chǎn)生一個(gè). OBJ 或. EXE 文件行號信息以及符號化 的調(diào)試信息;N

41、one 表示 不產(chǎn)生 任何調(diào) 試信息。12 調(diào)試的一般過程調(diào)試,說到底就是在程序的運(yùn)行過程的某一階段觀測程序的狀態(tài),而在一般 情況下程序是連續(xù)運(yùn)行的,所以我們必須使程序在某一地點(diǎn)停下來。所以我們 所做的第 一項(xiàng)工作就是設(shè)立斷點(diǎn)。其 次, 再運(yùn)行程序, 當(dāng)程序在設(shè) 立斷點(diǎn)處停下 來時(shí),再利用各種工具觀察程序的狀態(tài)。程序在斷點(diǎn)停下來后,有時(shí)我們需要按 我們的要求控制程序的運(yùn)行,以進(jìn)一步觀測程序的流向,所以下面我們依次來 介紹斷點(diǎn)的設(shè)置,如何控制程序的運(yùn)行以及各種觀察工具的利用。1 3 如何設(shè)置斷點(diǎn)在 VC 中,你 可以設(shè)置 多種類 型的斷 點(diǎn),我們 可以根 據(jù)斷點(diǎn) 起作用的方式把 這些斷點(diǎn)分為三

42、類: 1、與位 置有關(guān) 的斷點(diǎn);2、與 邏輯條 件有關(guān)的斷點(diǎn) 3、與 WI NDOWS 消息有 關(guān)的斷 點(diǎn)下面我 們分別 介紹這三 類斷點(diǎn) 。首先我們介紹與位置有關(guān)的斷點(diǎn)。/ 311、最簡單的是設(shè)置 一般位置斷點(diǎn), 你只要 把光標(biāo)移到你要 設(shè)斷點(diǎn) 的位置, 當(dāng)然這一行必須包含一條有效語句的;然后按工具條上的 add/r emove br eakpoi nt 按鈕或按 快捷鍵 F9; 這時(shí)你將會在 屏幕上看 到在這 一行的 左邊出現(xiàn)一個(gè)紅 色的圓點(diǎn)表示這 二設(shè) 立了一個(gè)斷點(diǎn)。圖 4. 32、有的時(shí)候你可能并不需要程序每次運(yùn) 行到這兒都停下來,而是在滿足一 定條件的情況下才停下來,這時(shí)你就需要設(shè)置

43、一種與位置有關(guān)的邏輯斷點(diǎn)。要 設(shè)置這種斷點(diǎn)我們只需要從 EDIT 菜單中選中 breakpoint 命令, 這時(shí) Br e ak poi nt 對 話 框 將 會 出 現(xiàn) 在 屏 幕 上 。 選 中 Br eak poi nt 對 話 框 中 的LOCATI ON 標(biāo)簽,使 LOCATION 頁 面彈出 ,如圖 4. 4圖 4. 4單擊 condi t i on 按鈕,彈出 Br eakpoi nt 對話 框,在 Expr essi on 編輯框中寫出你的 邏輯表 達(dá)式, 如 X=3 或 a+b25, 最后 按 OK 返回 。圖 4. 5 這種斷點(diǎn)主要是由其位置發(fā)生作用的,但也結(jié)合了邏輯條件,

44、使之更靈 活。3、有 時(shí)我 們需要 更深入 地調(diào)試 程序,我 們 需 要進(jìn)入程 序 的匯 編代碼 ,因此 我們需要在 在匯編 代碼上 設(shè)立斷點(diǎn) :要設(shè) 立這種 斷點(diǎn)我們 只需從 Vi ew 菜單中選 Debug wi ndow 命 令 ,圖 4. 6再選 Di sassembl y 子命令 ,這時(shí) 匯編窗 口將會出現(xiàn)在屏 幕上。圖 4. 7在 圖 4. 7 中 的 匯 編 窗 口 中 你 將 看 到 對 應(yīng) 于 源 程 序 的 匯 編 代 碼 , 其 中 源 程 序 是用黑體字顯示,下面是且對應(yīng)的匯編代碼。要設(shè)立斷點(diǎn),我們只需將光標(biāo)移 到你想設(shè)斷 點(diǎn)處然 后點(diǎn)擊 工具條上 的 I nser t

45、 / Remove Breakpoi nt s 按鈕,此 后你將會看到一個(gè)紅圓點(diǎn)出現(xiàn)在該匯編代碼的右邊。/ 31圖 4. 8上面所講的斷點(diǎn)主要是因?yàn)槠湮恢冒l(fā)揮作用的,即當(dāng)程序運(yùn)行到設(shè)立斷點(diǎn)的 地方時(shí)程序?qū)O聛?。但有時(shí)我們設(shè)立只與邏輯條件有關(guān)的斷點(diǎn),而與位置 無關(guān)。所以下面介紹一下與邏輯條件有關(guān)的斷點(diǎn)。圖 4. 11最后按 OK 返回。 其他幾種斷點(diǎn)的設(shè)置的方法都與之類似。我們一一加以說明。2)監(jiān)視表達(dá)式發(fā)生變化斷點(diǎn):從 EDI T 菜單中選 中 br eakpoi nt 命令, 這時(shí)屏幕上將 會出現(xiàn)Br eakpoi nt 對話框 。選中 Breakpoi nt 對話框中的 DATA 標(biāo)簽

46、,對應(yīng)的頁面將會彈出 在 Expr essi on 編 輯框中寫出你 需要監(jiān)視 的表達(dá)式 最后按 OK 鍵返回。3)監(jiān)視數(shù)組發(fā)生變化的斷點(diǎn):從 EDI T 菜單中選 中 br eakpoi nt 命令, 這時(shí)屏幕上將 會出現(xiàn)Br eakpoi nt 對話框 。選中 Breakpoi nt 對話框中的 DATA 標(biāo)簽,對應(yīng)的頁面將會彈出 在 Expr essi on 編 輯框中寫出你 需要監(jiān)視 數(shù)組名; 在 Number of El ement s 編 輯框輸 入你需要 監(jiān)視數(shù) 組元素的個(gè) 數(shù);/ 31 按 OK 鍵 返 回 。4)監(jiān)視由指針指向的數(shù)組發(fā)生變化的斷點(diǎn):從 EDI T 菜單中選 中

47、 br eakpoi nt 命令, 這時(shí)在屏幕上 將會出現(xiàn)Breakpoint 對話框。選中 Br eakpoi nt 對話框 中的 DATA 標(biāo)簽;在 Expr es si on 編 輯框中 輸入形 如* poi nt name, 其中* poi nt name 為指針變量名;在 Number of El ement s 編 輯框輸 入你需 要監(jiān)視數(shù) 組元素 的個(gè) 數(shù);按 OK 鍵 返 回 。文件名 ; 按 OK 鍵關(guān)閉 Advanced Br eakpoi nt 對 話框。按 OK 鍵 關(guān) 閉 Br eakpoi nt s 對話 框。 。/ 31在 VI EW 菜單 ,Debug wi n

48、dow 選 Var i abl es wi ndow。 變量窗口 將出現(xiàn) 在屏幕上。其中顯示著變量名及其對應(yīng)的值。你將會看到在變量觀察窗口的下AUTO , LOCAL,THIS 選中不同的標(biāo)簽,不同類型的變量 將會顯部有三個(gè)標(biāo)簽: 示在該窗口中。圖 4. 16觀察窗口(WATCH WI NDOW:Wat ch wi ndow 子命令 。這時(shí)圖 4. 17在 VI EW 菜 單 , 選擇 Debug wi ndow 命 令 , 變量窗口將出現(xiàn)在屏幕上。/ 31在圖 4. 17 的 觀察窗 口中雙擊 Name 欄的某一空行, 輸入你要查看的 變量名 或表達(dá)式。圖 4. 18 回車后你將會看到對應(yīng)的

49、值。觀察窗口可有多頁,分別對應(yīng)于標(biāo)簽 Wat ch1, Wat ch2, Wat ch3 等 等 。 假如 你 輸 入 的 表達(dá) 式 是 一 個(gè) 結(jié)構(gòu) 或 是 一 個(gè) 對 象 ,你可 以用鼠 標(biāo)點(diǎn)取表 達(dá)式右 邊的形 如 + ,以 進(jìn)一步 觀察其 中的成員 變量的 值 如 圖 4. 19 。圖 4. 19快速 查看變 量對話 框( qui ck wat ch;在快速查看變量對話框中你可以象利用觀察窗口一樣來查看變量或表達(dá)式的值。但我們還 可以利用它來該變運(yùn)行過程中的變量,具體操作如下:(1) 在 Debug 菜 單,選擇 Qui ck Wat ch 命 令,這 時(shí)屏幕上將會出 現(xiàn) Qui ck

50、 Wat ch 對話 框;/ 31圖 4.20在 Expr essi on 編輯框 中輸入變量名, 按回車;圖 4. 213)在 Cur r ent Val ue 格子中將出現(xiàn)變量名及其當(dāng)前對應(yīng)的值如圖 4. 22:圖 4. 22 4)如要改變該變量的 值只需雙擊該變 量對應(yīng) 的 Name 欄, 輸入你要 改變的 值;5)如要把該變量加入到觀察窗口中,點(diǎn)擊 Add wat ch 按鈕; 6)點(diǎn)擊 Cl ose 按 鈕返回 ;我們還可以直接查看內(nèi)存中的值1 ) 從 Vi ew 菜 單 中 選 取 Debug wi ndows 及 Memor y 子 命 令 。 Memor y/ 31Wi ndo

51、w 出 現(xiàn) ;圖 4. 232)在 Addr ess 編輯框中 輸入你 要查看 的內(nèi)存地 址,回 車。對 應(yīng)內(nèi)存地 址中的 值將顯示在 Memor y wi ndow 的 窗口中。圖 4. 24在調(diào)試過程中,有時(shí)我們需要查看或改寄存器中的值。我們只需:1)從 Vi ew 菜單中選取 Debug wi ndow 及 Regi st ers 子選項(xiàng)。Regi st ers 窗口出現(xiàn)。在 Registers 窗口中,信息以 Register = Val ue 的形式顯示, 其中 Regi st er 代表寄 存器的名字,Val ue 代表寄存器中 的值。圖 4. 25 。TRACE( The v alueo f xis%d n ,x 。TRACE( x = %dand y =%dn , x ,y 。TRACE( x = %dand y =%xa n d z =%f n ,x,y,z 。要注意的是 TRACE 宏只對 Debug 版本的項(xiàng)目產(chǎn)生作用,在 Rel ea

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論