C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊

上傳人:仙*** 文檔編號:30166052 上傳時間:2021-10-09 格式:DOC 頁數(shù):26 大?。?05KB
收藏 版權(quán)申訴 舉報 下載
C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊_第1頁
第1頁 / 共26頁
C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊_第2頁
第2頁 / 共26頁
C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊_第3頁
第3頁 / 共26頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊》由會員分享,可在線閱讀,更多相關(guān)《C++面向?qū)ο蟪绦蛟O(shè)計實驗指導(dǎo)手冊(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 C++面向?qū)ο蟪绦蛟O(shè)計 實驗指導(dǎo)手冊 班級:_______________ 學(xué)號:_______________ 姓名:_______________ 電子與信息工程學(xué)院計算機科學(xué)系 第一部分 上機實驗的指導(dǎo)思想和要求 一、上機實驗的目的 學(xué)習(xí)C++程序設(shè)計不能滿足于“懂得了”,滿足于了解了語法和能看懂書上的程序,而應(yīng)當(dāng)掌握程序設(shè)計的全過程,即能獨立編寫出源程序,獨立上機調(diào)試程序,獨立運行程序和分析結(jié)果。設(shè)計C++的初衷是為方便開發(fā)大型程序,雖然在學(xué)校中初學(xué)C++時還沒有機會接觸到大型程序,更不可能編寫出能供實際應(yīng)用

2、的大型程序,而只能接觸到比較簡單的程序。但是應(yīng)當(dāng)通過學(xué)習(xí)C++課程,對C++有比較全面的、然而是初步的認識,為今后進一步學(xué)習(xí)和應(yīng)用C++打下良好的基礎(chǔ)。 程序設(shè)計是一門實踐性很強的課程,必須十分重視實踐環(huán)節(jié)。許多實際的知識不是靠聽課和看書學(xué)到手的,而是通過長時間的實踐積累的。要提倡通過實踐去掌握知識的方法。必須保證有足夠的上機實驗時間,學(xué)習(xí)本課程應(yīng)該至少有30 小時的上機時間,最好能做到與授課時間之比為1:1 。除了學(xué)校規(guī)定的上機實驗以外,應(yīng)當(dāng)提倡學(xué)生自己課余抽時間多上機實踐。 上機實驗的目的,絕不僅是為了驗證教材和講課的內(nèi)容,或者驗證自己所編的程序正確與否。學(xué)習(xí)程序設(shè)計,上機實驗的目的是

3、: (1)加深對講授內(nèi)容的理解,尤其是一些語法規(guī)定,光靠課堂講授,既枯燥無味又難以記住,但它們是很重要的,初學(xué)者的程序出錯往往錯在語法上。通過多次上機,就能自然地、熟練地掌握。通過上機來掌握語法規(guī)則是行之有效的方法。 (2)熟悉所用的計算機系統(tǒng)的操作方法,也就是了解和熟悉C++程序開發(fā)的環(huán)境。一個程序必須在一定的外部環(huán)境下才能運行,所謂“環(huán)境”,就是指所用的計算機系統(tǒng)的硬件和軟件條件,或者說是工作平臺。使用者應(yīng)該了解為了運行一個C++程序需要哪些必要的外部條件(例如硬件配置、軟件配置),可以利用哪些系統(tǒng)的功能來幫助自己開發(fā)程序。每一種計算機系統(tǒng)的功能和操作方法不完全相同,但只要熟練掌握一兩

4、種計算機系統(tǒng)的使用,再遇到其他系統(tǒng)時便會觸類旁通,很快地學(xué)會。 (3)學(xué)會上機調(diào)試程序。也就是善于發(fā)現(xiàn)程序中的錯誤,并且能很快地排除這些錯誤,使程序能正確運行。經(jīng)驗豐富的人,在編譯連接過程中出現(xiàn)“出錯信息”時,一般能很快地判斷出錯誤所在,并改正之。而缺乏經(jīng)驗的人即使在明確的“出錯提示”下也往往找不出錯誤而求助于別人。要真正掌握計算機應(yīng)用技術(shù),就不僅應(yīng)當(dāng)了解和熟悉有關(guān)理論和方法,還要求自己動手實現(xiàn)。對程序設(shè)計來說,則要求會編程序并上機調(diào)試通過。因此調(diào)試程序不僅是得到正確程序的一種手段,而且它本身就是程序設(shè)計課程的一個重要的內(nèi)容和基本要求,應(yīng)給予充分的重視。調(diào)試程序固然可以借鑒他人的現(xiàn)成經(jīng)驗,但

5、更重要的是通過自己的直接實踐來累積經(jīng)驗,而且有些經(jīng)驗是只能“會意”難以“言傳”。別人的經(jīng)驗不能代替自己的經(jīng)驗。調(diào)試程序的能力是每個程序設(shè)計人員應(yīng)當(dāng)掌握的一項基本功。 因此,在做實驗時千萬不要在程序通過后就認為萬事大吉、完成任務(wù)了,而應(yīng)當(dāng)在己通過的程序基礎(chǔ)上作一些改動(例如修改一些參數(shù)、增加程序一些功能、改變某些語句等),再進行編譯、連接和運行。甚至于“自設(shè)障礙”,即把正確的程序改為有錯的(例如語句漏寫分號;比較符“= =”錯寫為賦值號“=”;使數(shù)組下標出界;使整數(shù)溢出等),觀察和分析所出現(xiàn)的情況。這樣的學(xué)習(xí)才會有真正的收獲,是靈活主動的學(xué)習(xí)而不是呆板被動的學(xué)習(xí)。 二、上機實驗前的準備工作

6、 在上機實驗前應(yīng)事先做好準備工作,以提高上機實驗的效率,準備工作至少應(yīng)包括: (1)了解所用的計算機系統(tǒng)(包括C++編譯系統(tǒng)和工作平臺)的性能和使用方法; (2)復(fù)習(xí)和掌握與本實驗有關(guān)的教學(xué)內(nèi)容; (3)準備好上機所需的程序。手編程序應(yīng)書寫整齊,并經(jīng)人工檢查無誤后才能上機,以提高上機效率。初學(xué)者切忌不編程序或抄別人程序去上機,應(yīng)從一開始就養(yǎng)成嚴謹?shù)目茖W(xué)作風(fēng); (4)對運行中可能出現(xiàn)的問題事先作出估計,對程序中自己有疑問的地方,應(yīng)作出記號,以便在上機時給予注意; (5)準備好調(diào)試和運行時所需的數(shù)據(jù)。 三、上機實驗的步驟 上機實驗時應(yīng)該一人一組,獨立上機。上機過程中出現(xiàn)的問題,除了是

7、系統(tǒng)的問題以外,一般應(yīng)自己獨立處理,不要輕易舉手問教師。尤其對“出錯信息”,應(yīng)善于自己分析判斷。這是學(xué)習(xí)調(diào)試程序的良好機會。 上機實驗一般應(yīng)包括以下幾個步驟: (1)進入C++工作環(huán)境(例如Visual C++6.0)。 (2)輸入自己所編好的程序。 (3)檢查一遍已輸入的程序是否有錯(包括輸入時打錯的和編程中的錯誤),如發(fā)現(xiàn)有錯,及時改正。 (4)進行編譯和連接。如果在編譯和連接過程中發(fā)現(xiàn)錯誤,屏幕上會出現(xiàn)“出錯信息”,根據(jù)提示找到出錯位置和原因,加以改正。再進行編譯……,如此反復(fù)直到順利通過編譯和連接為止。 (5)運行程序并分析運行結(jié)果是否合理和正確。在運行時要注意當(dāng)輸入不同數(shù)

8、據(jù)時所得到的結(jié)果是否正確。 (6)輸出程序清單和運行結(jié)果。 四、實驗報告 實驗后,應(yīng)整理出實驗報告,實驗報告應(yīng)包括以下內(nèi)容: (1)題目; (2)程序清單(計算機打印出的程序清單); (3)運行結(jié)果(必須是上面程序清單所對應(yīng)打印輸出的結(jié)果); (4)對運行情況所作的分析以及本次調(diào)試程序所取得的經(jīng)驗。如果程序末能通過,應(yīng)分析其原因。 第二部分 關(guān)于程序的調(diào)試和測試 一、程序錯誤的類型 為了幫助各位同學(xué)調(diào)試程序和分析程序,下面簡單介紹程序出錯的種類。 (1)語法錯誤 即不符合C++

9、語言的語法規(guī)定,例如將main 錯寫為naim ,括號不匹配,語句最后漏了分號等,這些都會在編譯時被發(fā)現(xiàn)并指出。這些都屬于“致命錯誤”, 不改正是不能通過編譯的。對一些在語法上有輕微毛病但不影響程序運行的錯誤(如定義了變量但始終未使用),編譯時會發(fā)出“警告”,雖然程序能通過編譯,但不應(yīng)當(dāng)使程序“帶病工作”,應(yīng)該將程序中所有導(dǎo)致“錯誤(error)”和“警告(warning)”的因素都消除,再使程序投入運行。 (2)邏輯錯誤 這是指程序無語法錯誤,也能正常運行,但是結(jié)果不對。例如求s=l+2+3+…+100,有人寫出以下語句: for(s=0, i=1; i<100; i++)

10、s=s + i; 語法沒有錯,但求出的結(jié)果是l+2+3+…+99之和,而不是l+2+3+…+100之和,原因是少執(zhí)行了一次循環(huán)。這類錯誤可能是設(shè)計算法時的錯誤,也可能是算法正確而在編寫程序時出現(xiàn)疏忽所致。這種錯誤計算機是無法檢查出來的。如果是算法有錯,則應(yīng)先修改算法,再改程序。如果是算法正確而程序?qū)懙貌粚?,則直接修改程序。 (3)運行錯誤 有時程序既無語法錯誤,又無邏輯錯誤,但程序不能正常運行或結(jié)果不對。多數(shù)情況是數(shù)據(jù)不對,包括數(shù)據(jù)木身不合適以及數(shù)據(jù)類型不匹配。如有以下程序: int main ( ) { int a, b, c ; cin>>a>>b; c=a/b; co

11、ut<

12、找程序中可能存在的錯誤。在測試時要設(shè)想到程序運行時的各種情況,測試在各種情況下的運行結(jié)果是否正確。程序測試是程序調(diào)試的一個組成部分。 有時程序在某些情況下能正常運行,而在另外一些情況下不能正常運行或得不到正確的結(jié)果,因此,一個程序即使通過編譯并正常運行而且結(jié)果正確,還不能認為程序沒有問題了。要考慮是否在任何情況下都能正常運行并且得到正確的結(jié)果。測試的任務(wù)就是要找出那些不能正常運行的情況和原因。下而通過一個典型的和容易理解的例子來說明測試的概念。 求一元二次方程ax2+bx+c=0的根。 有人根據(jù)求根公式x1, 2=(-bsqrt(b2-4ac))/2a編寫出以下程序: # includ

13、e < iostream> # include using namespace std; int main( ) { float a, b, c, disc, x1, x2; cin>>a>>b>>c; disc=b*b-4*a*c; x1=(-b + sqrt(disc))/(2*a); x2=(-b - sqrt(disc))/(2*a); cout<<”x1=”<

14、但是若輸入a,b,c的值為3,2,4 時,屏幕上出現(xiàn)了出錯信息,程序停止運行,原因是此時b2-4ac小于0,出現(xiàn)了對負數(shù)求平方根的運算,故出錯。 因此,此程序只適用b2-4ac≥0的情況。我們不能說上面的程序是錯的,而只能說程序?qū)赡艹霈F(xiàn)的情況“考慮不周” ,所以不能保證在任何情況下都是正確的。使用這個程序必須滿足一定的前提(b2-4ac≥0),這樣,就給使用程序的人帶來不便。人們在輸入數(shù)據(jù)前,必須先算一下,看b2-4ac是否大于或等于0。 一個程序應(yīng)能適應(yīng)各種不同的情況,并且都能正常運行并得到相應(yīng)的結(jié)果。 下面分析一下求方程ax2+bx+c=0的根,有幾種情況: (1)a≠0時 ①

15、 b2-4ac>0 有兩個不等的實根:x1, 2=(-bsqrt(b2-4ac))/2a ② b2-4ac=0 有兩個相等的實根:x1= x 2=-b/2a ③ b2-4ac<0 有兩個不等的共軛復(fù)根:x1, 2=(-bsqrt(b2-4ac)i)/2a (2)a=0時,方程就變成一元一次的線性方程:bx+c=0 ① 當(dāng)b≠0時,x =-c/b ② 當(dāng)b = 0時,方程變?yōu)?x+c=0 當(dāng)c = 0時,x可以為任何值; 當(dāng)c≠0時,x無解。 綜合起來,共有6種情況: ① a≠0,b2-4ac>0 ② a≠0,b2-4ac=0 ③ a≠0, b2-4ac<0 ④ a

16、=0,b≠0 ⑤ a=0,b= 0,c = 0 ⑥ a=0,b= 0,c≠0 應(yīng)當(dāng)分別測試程序在以上6 種情況下的運行情況,觀察它們是否符合要求。為此,應(yīng)準備6 組數(shù)據(jù)。用這6 組數(shù)據(jù)去測試程序的“健壯性”。在使用上面這個程序時,顯然只有滿足①②情況的數(shù)據(jù)才能使程序正確運行,而輸入滿足③~⑥情況的數(shù)據(jù)時,程序出錯。這說明程序不“健壯”。為此,應(yīng)當(dāng)修改程序,使之能適應(yīng)以上6 種情況。可將程序改為: #include #include using namespace std; int main( ) { float a, b, c, disc, x

17、1, x2, p, q; cout<<"input a, b, c:"; cin>>a>>b>>c; if(a= =0) if(b= =0) if(c= =0) cout<<"It is trivial."<

18、<"x="<<-c/b<=0) if(disc>0) {cout<<"It has two real solutions:"<

20、 q=sqrt(-disc)/(2*a); cout<<"x1="<

21、 x1=-0.33, x2= -1 ② input a, b, c: 1 2 1 It has two same real solutions: x1=x2= -1 ③ input a, b, c: 4 2 1 It has two complex solutions: x1=-0.25+0.43i, x2=-0.25-0.43i ④ input a, b, c: 0 3 4 It has one solutions: x1=-1.33 ⑤ input a, b, c: 0 0 0 It is trivia

22、l. ⑥ input a, b, c: 0 0 5 It is impossible. 經(jīng)過測試,可以看到程序?qū)θ魏屋斎氲臄?shù)據(jù)都能正常運行并得到正確的結(jié)果。以上是根據(jù)數(shù)學(xué)知識知道輸入數(shù)據(jù)有6種方案。但在有些情況下,并沒有現(xiàn)成的數(shù)學(xué)公式作為依據(jù),例如一個商品管理程序,要求對各種不同的檢索作出相應(yīng)的反應(yīng)。如果程序包含多條路徑(如由if語句形成的分支),則應(yīng)當(dāng)設(shè)計多組測試數(shù)據(jù),使程序中每一條路徑都有機會執(zhí)行,觀察其運行是否正常。 以上就是程序測試的初步知識。測試的關(guān)鍵是正確地準備測試數(shù)據(jù)。如果只準備4 組測試數(shù)據(jù),程序都能正常運行,仍然不能認為此程序己無問題。只有將程序運行時所有的

23、可能情況都作過測試,才能作出判斷。 測試的目的是檢查程序有無“漏洞”。對于一個簡單的程序,要找出其運行時全部可能執(zhí)行到的路徑,并正確地準備數(shù)據(jù)并不困難。但是如果需要測試一個復(fù)雜的大程序,要找到全部可能的路徑并準備出所需的測試數(shù)據(jù)并非易事。例如:有兩個非嵌套的if語句,每個if語句有兩個分支,它們所形成的路徑數(shù)目為22=4。如果一個程序包含100 個if語句,則可能的路徑數(shù)目為2100=1.2676511030,要測試每一條路徑兒乎是不可能的。實際上進行測試的只是其中一部分(執(zhí)行幾率最高的部分)。因此,經(jīng)過測試的程序一般還不能輕易宣布為“沒有問題”,只能說“經(jīng)過測試的部分無問題”。正如檢查身體

24、一樣,經(jīng)過內(nèi)科、外科、眼科、五官科……各科例行檢查后,不能宣布被檢查者“沒有任何病癥”,他有可能有隱蔽的、不易查出的病癥。所以醫(yī)院的診斷書一般寫為“未發(fā)現(xiàn)異常”,而不能寫“此人身體無任何問題”。 我們應(yīng)當(dāng)了解測試的目的,學(xué)會組織測試數(shù)據(jù),并根據(jù)測試的結(jié)果修改完善程序。 第三部分 實驗內(nèi)容與安排 實驗一 C++程序的運行環(huán)境和運行C++程序的方法 1.實驗?zāi)康? (1)了解所用的計算機系統(tǒng)的基本操作方法,學(xué)會獨立使用該系統(tǒng)。 (2)了解在該系統(tǒng)上如何編輯、編譯、連接

25、和運行一個C++程序。 (3)通過運行簡單的C++程序,初步了解C++源程序的結(jié)構(gòu)和特點。應(yīng)學(xué)會在一種以上的編譯環(huán)境下運行C++程序,建議學(xué)習(xí)并掌握Visual C++ 6.0的使用方法。 2.實驗內(nèi)容和步驟 (1)檢查所用的計算機系統(tǒng)是否己安裝了Visual C++ 6.0編譯系統(tǒng) (2)在Visual C++ 6.0環(huán)境下編譯和運行C++程序 在第一次上機時,按以下步驟建立和運行C++程序: ① 先進入Visual C++ 6.0環(huán)境。 ② 在自己指定的子目錄中建立一個名為test.cpp的新文件(此時尚未向文件輸入內(nèi)容)。 ③ 從鍵盤輸入以下程序(第l章第8題): in

26、t main ( ) ; { int a , b; c = a + b; cout>>“a + b =”>> a + b ; } ④ 選擇Build→Compile test.cpp命令,對此源程序進行編譯。觀察和分析編譯信息。 ⑤ 根據(jù)編譯信息指出的錯誤,修改程序。再進行編譯,如果還有錯,再重復(fù)此過程,直到編譯不出錯為止。 ⑥ 選擇Build→Build test.exe命令,對程序進行連接,如果不出錯,就會生成可執(zhí)行程序test.exe 。 ⑦ 選擇Build→Execute test.exe 命令,執(zhí)行可執(zhí)行程序test..exe觀察屏幕的變化。在輸出窗口應(yīng)顯示程序運

27、行結(jié)果。 ⑧ 分析結(jié)果是否正確,如果不正確或認為輸出格式不理想,可以修改程序,然后重新執(zhí)行以上④至⑧步驟。 此外,還可利用已有的源程序建立一個新程序。由于剛才已建立了一個名為test.cpp 的源程序,可以以它為基礎(chǔ)建立一個新程序,這樣更方便些。按以下步驟: ① 通過“資源管理器”或“我的電腦”,按文件路徑找到已有源程序test.cpp。 ② 雙擊“test.cpp”圖標,進入Visual C++集成環(huán)境,打開test.cpp。 ③ 在test.cpp基礎(chǔ)上將源程序修改為以下內(nèi)容(第1章第9題): # include using namespace std

28、; int main ( ) { int a , b ; c = add ( a , b ) cout <<" a + b = " <

29、第一個實驗,寫得比較詳細。希望大家能在實驗中多思考,多給自己提問題,多設(shè)想幾種可能性。做實驗時不要滿足于驗證書本知識。在以后的實驗中,請大家自己設(shè)計具體的實驗步驟,盡可能自己補充增加一些內(nèi)容,以提高自己的實踐能力。 實驗二 C++對C的擴充 1.實驗?zāi)康? (1)了解在面向過程程序設(shè)計中C++對C功能的擴充與增強,并善于在編寫程序過程中應(yīng)用這些新的功能。 (2)進一步熟悉在所用的系統(tǒng)上編輯、編譯、連接和運行C++程序的方法。 (3)進一步熟悉C++程序的結(jié)構(gòu)和編程方法。 2.實驗內(nèi)容和步驟 要求事先編好解決下面問題的程序,然后上機輸入程序

30、并調(diào)試運行。 (1)輸入以下程序,進行編譯,觀察編譯情況,如果有錯誤,請修改程序,再進行編譯,直到?jīng)]有錯誤,然后進行連接和運行,分析運行結(jié)果(本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第1章習(xí)題第9題)。 # include using namespace std ; int main ( ) { int a , b ; c = add ( a , b ) cout <<" a + b = " <

31、); } (2)編一個程序,用來求2個或3個正整數(shù)中的最大數(shù)。 ① 用不帶默認參數(shù)的函數(shù)實現(xiàn)。 ② 用帶有默認參數(shù)的函數(shù)實現(xiàn)。 (本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第1章習(xí)題第11題) 對比兩種方法,分析用帶有默認參數(shù)的函數(shù)的優(yōu)點和應(yīng)用的場合??偨Y(jié)如何選擇默認參數(shù)的值。請分析本題中默認參數(shù)的值應(yīng)該在什么范圍。 (3)輸入兩個整數(shù),將它們按由大到小的順序輸出(本題是《C++面向?qū)ο蟪绦蛟O(shè) 計》第1章習(xí)題第12題)。 ①

32、 使用指針方法。 ② 使用變量的引用。 比較這兩種方法的特點和使用方法。 (4)對3個變量按由小到大順序排序,要求使用變量的引用(本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第1章習(xí)題第13題)。 ① 使用指針方法。 ② 使用變量的引用。 請總結(jié)使用引用時要注意什么問題。 (5)有5個字符串,要求對它們按由小到大順序排列,用string方法(本題是《C++ 面向?qū)ο蟪绦蛟O(shè)計》第1章習(xí)題第16題)。 (6)編一個程序,用同一個函數(shù)名對n個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度型、雙精度型(本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第1章習(xí)題第17題和18題)。 ① 用重載函數(shù)實現(xiàn)。 ②

33、用函數(shù)模板實現(xiàn)。 比較這兩種方法各有什么特點,什么情況下可以用函數(shù)模板代替重載函數(shù)?什么情況下不可以用函數(shù)模板代替重載函數(shù)? 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第l章。 實驗三 類和對象(一) 1.實驗?zāi)康? (1)掌握聲明類的方法,類和類的成員的概念以及定義對象的方法。 (2)初步掌握用類和對象編制基于對象的程序。 (3)學(xué)習(xí)檢查和調(diào)試基于對象的程序。 2.實驗內(nèi)容 (1)有以下程序: # include using namespace std ; class Time

34、 //定義Time類 { public: //數(shù)據(jù)成員為公用的 int hour ; int minute ; int sec ; }; int main ( ) { Time tl ; //定義t1為Time類對象 cin>>tl.hour ; //輸入設(shè)定的時間 cin>> tl.minute ; cin>>tl.sec ; cout<

35、出時間 return 0; } 改寫程序,要求: ① 將數(shù)據(jù)成員改為私有的; ② 將輸入和輸出的功能改為由成員函數(shù)實現(xiàn); ③ 在類體內(nèi)定義成員函數(shù)。 然后編譯和運行程序。請分析什么成員應(yīng)指定為公用的?什么成員應(yīng)指定為私有的?什么函數(shù)最好放在類中定義?什么函數(shù)最好在類外定義?本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第2章第2題。 (2)分別給出如下的3個文件: ① 含類定義的頭文件student.h 。 //student.h (這是頭文件,在此文件中進行類的聲明) class Student //類

36、聲明 { public : void display ( ) ; //公用成員函數(shù)原型聲明 private : int num ; char name[20] ; char sex ; } ; ② 包含成員函數(shù)定義的源文件student.cpp。 //student.cpp (在此文件中進行函數(shù)的定義) # include < iostream> # include “student.h” //不要漏寫此行,否則編譯通不過 void Studen

37、t : : display ( ) //在類外定義display類函數(shù) { cout<<”num:”< # include ”student.h”

38、 //將類聲明頭文件包含進來 int main ( ) { Student stud ; //定義對象 stud.display( ); //執(zhí)行stud對象的display函數(shù) return 0; } 請完善該程序,在類中增加一個對數(shù)據(jù)成員賦初值的成員函數(shù)set_value。上機調(diào)試并運行。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第2章第4題。 (3)需要求3個長方柱的體積,請編一個基于對象的程序。數(shù)據(jù)成員包括length(長)、width(寬)、height(高)。要求用

39、成員函數(shù)實現(xiàn)以下功能: ① 由鍵盤分別輸入3 個長方柱的長、寬、高; ② 計算長方柱的體積; ③ 輸出3個長方柱的體積。 請編程序,上機調(diào)試并運行。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第2章第6題。 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第2章。 實驗四 類和對象(二) 1.實驗?zāi)康? (1)進一步加深對類和對象的理解。 (2)掌握類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法。 (3)掌握對象數(shù)組、對象的指針及其使用方法。 (4)掌握友元的概念和使用。 (5)了解類模板

40、的使用方法。 2.實驗內(nèi)容 (1)有以下程序: # include class Student { public: Student ( int n, float s ) : num(n) , score(s) { } void change ( int n , float s ) { num=n; score=s; } void display ( ) {cout<< num <<” ”<

41、 Student stud (101, 78.5); stud. display ( ) stud. change (101, 80.5 ) ; stud . display( ); } ① 閱讀此程序,分析其執(zhí)行過程,然后上機運行,對比輸出結(jié)果。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第3章第6題。 ② 修改上面的程序,增加一個fun函數(shù),改寫main函數(shù)。在main函數(shù)中調(diào)用fun函數(shù),在fun函數(shù)中調(diào)用change和display函數(shù)。在fun函數(shù)中使用對象的引用(Student &)作為形參。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第3章第8題。 (2)商店銷售某一商品,商店每天

42、公布統(tǒng)一的折扣(discount)。同時允許銷售人員在銷售時靈活掌握售價(price),在此基礎(chǔ)上,對一次購10件以上者,還可以享受9.8折優(yōu)惠?,F(xiàn)己知當(dāng)天3個銷貨員銷售情況為: 銷貨員號(num) 銷貨件數(shù)(quantity) 銷貨單價(price ) 101 5 23.5 102 12 24.56 103 100 21.5 請編程序,計算出當(dāng)日此商品的總銷售款sum以及每件商品的平均售價。要求用靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第3章第9題。 提示:將折扣discount,

43、總銷售款sum和商品銷售總件數(shù)n聲明為靜態(tài)數(shù)據(jù)成員,再定義靜態(tài)成員函數(shù)average(求平均售價)和display(輸出結(jié)果)。 (3)有以下程序(這是《C++面向?qū)ο蟪绦蛟O(shè)計》第3章例3.13的程序): #include using namespace std; class Date; class Time {public: Time(int, int, int); void display(Date&); private: int hour; int minute; int sec;

44、 }; class Date {public: Date(int, int, int); friend void Time:: display(Date &); private: int month; int day; int year; }; Time:: Time (int h, int m, int s) {hour=h; minute=m; sec=s; } void Time:: display(Date

45、&da) {cout<

46、n 0; } 請讀者分析和運行此程序,注意友元函數(shù)Time : : display 的作用。將程序中的display 函數(shù)不放在Time類中,而作為類外的普通函數(shù),然后分別在Time和Date類中將display聲明為友元函數(shù)。在主函數(shù)中調(diào)用display函數(shù),display函數(shù)分別引用Time和Date兩個類的對象的私有數(shù)據(jù),輸出年、月、日和時、分、秒。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》 第3章第10題。 修改后上機調(diào)試和運行。 (4)有以下使用類模板程序(這是《C++面向?qū)ο蟪绦蛟O(shè)計》第3章例3.14的程序):#include using namespace

47、std; template class Compare {public: Compare(numtype a,numtype b) {x=a;y=b;} numtype max() {return (x>y)?x:y;} numtype min() {return (x cmp1(3,7); cout<

48、 the Maximum of two inteder numbers."< cmp2(45.78,93.6); cout<

49、pare cmp3(a,A); cout<

50、)掌握幾種常用的運算符重載的方法。 (3)了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法。 (4)了解在Visual C++6.0環(huán)境下進行運算符重載要注意的問題。 2.實驗內(nèi)容 事先編寫好程序,上機調(diào)試和運行程序,分析結(jié)果。 (1)聲明一個復(fù)數(shù)類Complex,重載運算符“+”,“-”,“*”,“/”,使之能用于復(fù)數(shù)的加、減、乘、除,運算符重載函數(shù)作為Complex 類的成員函數(shù)。編程序,分別求兩個復(fù)數(shù)之和、差、積和商。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第4章第2題。 請思考:你編的程序能否用于一個整數(shù)與一個復(fù)數(shù)的算術(shù)運算?如4 + ( 5 - 2i )。 (2)聲明一個復(fù)數(shù)類Complex,重載運

51、算符“+”,使之能用于復(fù)數(shù)的加法運算。參加運算的兩個運算量可以都是類對象,也可以其中有一個是整數(shù),順序任意。例如:c1 + c2,i + c1 , c1 + i均合法(設(shè)i為整數(shù),c1 , c2 為復(fù)數(shù))。 運行程序,分別求兩個復(fù)數(shù)之和、整數(shù)和復(fù)數(shù)之和。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》 第4章第3題。 (3)有兩個矩陣a 和b,均為2行3列,求兩個矩陣之和。重載運算符“+”,使之能用于矩陣相加。如:c = a + b。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第4章第4題。 (4)聲明一個Teacher(教師)類和一個Student(學(xué)生)類,二者有一部分數(shù)據(jù)成員是相同的,例如num(號碼),na

52、me(姓名),sex(性別)。編寫程序,將一個Student對象(學(xué)生)轉(zhuǎn)換為Teacher(教師)類,只將以上3個相同的數(shù)據(jù)成員移植過去。可以設(shè)想為:一位學(xué)生大學(xué)畢業(yè)了,留校擔(dān)任教師,他原有的部分數(shù)據(jù)對現(xiàn)在的教師身份來說仍然是有用的,應(yīng)當(dāng)保留并成為其教師的數(shù)據(jù)的一部分。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第4章第7題。 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第4章。 實驗六 繼承與派生 1.實驗?zāi)康? (1)了解繼承在面向?qū)ο蟪绦蛟O(shè)計中的重要作用。 (2)進一步理解繼承與派生的概念。 (3)掌握通過繼承派生出一個新的類的方法。 (4)了解虛基類的作用和用法。

53、 2.實驗內(nèi)容 事先編寫好程序,上機調(diào)試和運行程序,分析結(jié)果。 (1)將《C++面向?qū)ο蟪绦蛟O(shè)計》第5章例5.1的程序片段補充和改寫成一個完整、正確的程序,用公用繼承方式。在程序中應(yīng)包括輸入數(shù)據(jù)的函數(shù),在程序運行時輸入num,name,sex,age,addr的值,程序應(yīng)輸出以上5個數(shù)據(jù)的值。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第5章第1題。 (2)將《C++面向?qū)ο蟪绦蛟O(shè)計》第5章例5.3的程序修改、補充,寫成一個完整、正確的程序,用保護繼承方式。在程序中應(yīng)包括輸入數(shù)據(jù)的函數(shù)。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第5章第3題。 (3)修改上面第(2)題的程序,改為用公用繼承方式。上機調(diào)試程

54、序,使之能正確運行并得到正確的結(jié)果。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第5章第4題。 對這兩種繼承方式作比較分析,考慮在什么情況下二者不能互相代替。 (4)分別聲明Teacher(教師)類和Cadre(干部)類,采用名重繼承方式由這兩個類派生出新類Teacher_Cadre(教師兼干部)。要求: ① 在兩個基類中都包含姓名、年齡、性別、地址、電話等數(shù)據(jù)成員。 ② 在Teacher類中還包含數(shù)據(jù)成員title(職稱),在Cadre類中還包含數(shù)據(jù)成員post (職務(wù))。在Teacher_Cadre類中還包含數(shù)據(jù)成員wages(工資)。 ③ 對兩個基類中的姓名、年齡、性別、地址、電話等數(shù)據(jù)成

55、員用相同的名字,在引用這些數(shù)據(jù)成員時,指定作用域。 ④ 在類體中聲明成員函數(shù),在類外定義成員函數(shù)。 ⑤ 在派生類Teacher_Cadre的成員函數(shù)show中調(diào)用Teacher類中的display函數(shù),輸出姓名、年齡、性別、職稱、地址、電話,然后再用cout語句輸出職務(wù)與工資。 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第5章。 實驗七 多態(tài)性與虛函數(shù) 1.實驗?zāi)康? (1)了解多態(tài)性的概念。 (2)了解虛函數(shù)的作用及使用方法。 (3)了解靜態(tài)關(guān)聯(lián)和動態(tài)關(guān)聯(lián)的概念和用法。 (4)了解純虛函數(shù)和抽象類的概念和用法。 2.實驗內(nèi)容 事先編寫好程序,上機調(diào)試和運行程序,

56、分析結(jié)果。 (1)聲明Point(點)類,由Point類派生出Circle(圓)類,再由Circle類派生出Cylinder(圓柱體)類。將類的定義部分分別作為3個頭文件,對它們成員函數(shù)的聲明部分分別作為3個源文件(.cpp文件),在主函數(shù)中用#include命令把它們包含進來,形成一個完整的程序,并上機運行。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第6章第1題。 (2)在《C++面向?qū)ο蟪绦蛟O(shè)計》第6章例6.3的基礎(chǔ)上作以下修改,并作必要的討論。 ① 把構(gòu)造函數(shù)修改為帶參數(shù)的函數(shù),在建立對象時初始化。 ② 先不將析構(gòu)函數(shù)聲明為virtual,在main函數(shù)中另設(shè)一個指向Circle類對象的指

57、針變量,使它指向grad1。運行程序,分析結(jié)果。 ③ 不作第②點的修改而將析構(gòu)函數(shù)聲明為virtual,運行程序,分析結(jié)果。 本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第6章第3題。 (3)聲明抽象基類Shape,由它派生出3個派生類:Circle(圓形)、Rectangle(矩形)、Triangle(三角形),用一個函數(shù)printArea分別輸出以上三者的面積,3個圖形的數(shù)據(jù)在定義對象時給定。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第6章第4題。 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第6章。 實驗八 輸入輸出流 1.實驗?zāi)康? (1)深入理解C++的輸入輸出

58、的含義與其實現(xiàn)方法。 (2)掌握標準輸入輸出流的應(yīng)用,包括格式輸入輸出。 (3)掌握對文件的輸入輸出操作。 2.實驗內(nèi)容 事先編寫好程序,上機調(diào)試和運行程序,分析結(jié)果。 (1)輸入三角形的三邊a , b , c ,計算三角形的面積的公式是 area= sqrt (s*(s-a)*(s-b)*(s-c)), s= (a+b+c)/2 形成三角形的條件是:a + b > c , b + c > a , c + a > b 編寫程序,輸入a , b , c ,檢查a , b , c 是否滿足以上條件,如不滿足,由cerr輸出有關(guān)出錯信息。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第7章第1

59、題。 (2)從鍵盤輸入一批數(shù)值,要求保留3位小數(shù),在輸出時上下行小數(shù)點對齊。 ① 用控制符控制輸出格式; ② 用流成員函數(shù)控制輸出格式。 本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第7章第2題。 (3)建立兩個磁盤文件fl. dat 和f2 . dat ,編程序?qū)崿F(xiàn)以下工作: ① 從鍵盤輸入20個整數(shù),分別存放在兩個磁盤文件中(每個文件中放10個整數(shù)); ② 從fl . dat讀入10個數(shù),然后存放到f2 . dat文件原有數(shù)據(jù)的后面; ③ 從f2 .dat中讀入20個整數(shù),將它們按從小到大的順序存放到f2 .dat (不保留原來的數(shù)據(jù))。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第7章第4題。

60、 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第7章。 實驗九 C ++工具 1.實驗?zāi)康? (1)學(xué)會使用C++的異常處理機制進行程序的調(diào)試。 (2)學(xué)會使用命名空間解決名字沖突。 2.實驗內(nèi)容 事先編寫好程序,上機調(diào)試和運行程序,分析結(jié)果。 (1)求一元二次方程式ax2+bx+c=0的實根,如果方程沒有實根,則利用異常處理機制輸出有關(guān)警告信息。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第8章第1題。 (2)學(xué)校的人事部門保存了有關(guān)學(xué)生的部分數(shù)據(jù)(學(xué)號、姓名、年齡、住址),教務(wù)部門也保存了學(xué)生的另外一些數(shù)據(jù)(學(xué)號、姓名、性別、成績),兩個部門分別編寫了本部門的學(xué)生數(shù)據(jù)管理程序,其中都用了Student作為類名?,F(xiàn)在要求在全校的學(xué)生數(shù)據(jù)管理程序中調(diào)用這兩個部門的學(xué)生數(shù)據(jù),分別輸出兩種內(nèi)容的學(xué)生數(shù)據(jù)。要求用ANSI C ++編程,使用命名空間。本題是《C++面向?qū)ο蟪绦蛟O(shè)計》第8章第3題。 3.預(yù)習(xí)內(nèi)容 《C++面向?qū)ο蟪绦蛟O(shè)計》第8章。 25

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!