




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
面向?qū)ο蠹夹g(shù)實(shí)驗(yàn)指導(dǎo)書(shū) 〔通信學(xué)院-電信工程系〕 編著:黃健目錄第一章C/C++實(shí)驗(yàn)根底知識(shí) 31.1C/C++語(yǔ)言實(shí)驗(yàn)環(huán)境配置 31.2VisualC++6.0的使用 31.2.1VisualC++介紹 31.2.2VisualC++的安裝和啟動(dòng) 31.2.3常用功能鍵及其意義 41.2.4輸入和編輯源程序 51.2.5編譯、連接和運(yùn)行 81.2.6建立和運(yùn)行包含多個(gè)文件的程序的方法 131.3VisualC++6.0工程相關(guān)文件介紹 201.4VisualC++6.0錯(cuò)誤信息 201.4.1程序錯(cuò)誤的類型 201.4.2錯(cuò)誤信息的查詢 221.5VisualC++6.0調(diào)試工具使用 241.5.1設(shè)置工程的調(diào)試屬性 241.5.2學(xué)習(xí)設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試 25第二章C/C++實(shí)驗(yàn)要求 282.1實(shí)驗(yàn)的意義和目的 282.2實(shí)驗(yàn)過(guò)程總體要求 282.2.1實(shí)驗(yàn)內(nèi)容總體安排 282.2.2實(shí)驗(yàn)前的準(zhǔn)備工作 282.2.3上機(jī)實(shí)驗(yàn)步驟 292.2.4上機(jī)代碼編寫(xiě)要求 292.2.5實(shí)驗(yàn)報(bào)告編寫(xiě) 292.2.6實(shí)驗(yàn)數(shù)據(jù)提交 292.2.7實(shí)驗(yàn)參考資料 302.3實(shí)驗(yàn)考核 312.3.1平時(shí)實(shí)驗(yàn)過(guò)程考核 312.3.2期末實(shí)驗(yàn)上機(jī)考試 312.3.3實(shí)驗(yàn)成績(jī)?cè)u(píng)定 31第三章實(shí)驗(yàn)內(nèi)容與指導(dǎo) 323.1實(shí)驗(yàn)一數(shù)據(jù)類型與表達(dá)式 323.2實(shí)驗(yàn)二C++程序設(shè)計(jì)初步 343.3實(shí)驗(yàn)三函數(shù)與程序結(jié)構(gòu) 363.4實(shí)驗(yàn)四類和對(duì)象 403.5實(shí)驗(yàn)五繼承與派生 443.6實(shí)驗(yàn)六多態(tài)與虛函數(shù) 483.7實(shí)驗(yàn)七運(yùn)算符重載 50第一章C/C++實(shí)驗(yàn)根底知識(shí)1.1C/C++語(yǔ)言實(shí)驗(yàn)環(huán)境配置C/C++語(yǔ)言實(shí)驗(yàn)環(huán)境配置要求。1)硬件配置:586以上PC兼容機(jī)或品牌機(jī),配有彩色顯示器、鼠標(biāo)、鍵盤(pán),內(nèi)存不小于20MB,硬盤(pán)自由空間不少于60MB。推薦配置為內(nèi)存32MB或64MB〔或以上〕,硬盤(pán)自由空間500MB以上。2)軟件配置:1、操作系統(tǒng):Windows98,windows2000,windowsXP,Linux,UNIX2、集成開(kāi)發(fā)環(huán)境:〔1〕在Windows98,windows2000,windowsXP系統(tǒng)下,主要的開(kāi)發(fā)編譯環(huán)境有TurboC/C++3.0、BorlandC++3.1、MicrosoftVisualC++6.0、DJGPP,其中DJGPP是GCC在DOS/Windows操作系統(tǒng)下的移植。本實(shí)驗(yàn)指導(dǎo)書(shū)使用的開(kāi)發(fā)環(huán)境為MicrosoftVisualC++6.0英文版。漢化版本只是把局部菜單漢化了且用詞很不準(zhǔn)確?!?〕在Linux、UNIX系統(tǒng)下,采用GCC編譯環(huán)境。本實(shí)驗(yàn)指導(dǎo)書(shū)不涉及相關(guān)內(nèi)容,有興趣的同學(xué)可以自行學(xué)習(xí)。1.2VisualC++6.0的使用VisualC++介紹VisualC++是Microsoft公司的VisualStudio開(kāi)發(fā)工具箱中的一個(gè)C/C++程序開(kāi)發(fā)包。VisualStudio提供了一整套開(kāi)發(fā)Internet和Windows應(yīng)用程序的工具,包括VisualC++,VisualBasic,VisualFoxPro,VisualInterDev,VisualJ++以及其他輔助工具,如代碼管理工具VisualSourceSafe和聯(lián)機(jī)幫助系統(tǒng)MSDN。VisualC++包中除包括C++編譯器外,還包括所有的庫(kù)、例子和為創(chuàng)立Windows應(yīng)用程序所需要的文檔。從最早期的1.0版本開(kāi)展6.0版本,到最新的.NET版本,VisualC++已經(jīng)有了很大的變化,在界面、功能、庫(kù)支持方面都有許多的增強(qiáng)。6.0版本在編譯器、MFC類庫(kù)、編輯器以及聯(lián)機(jī)幫助系統(tǒng)等方面都比以前的版本做了較大改良。VisualC++一般分為三個(gè)版本:學(xué)習(xí)版、專業(yè)版和企業(yè)版,不同的版本適合于不同類型的應(yīng)用開(kāi)發(fā)。實(shí)驗(yàn)中可以使用這三個(gè)版本的任意一種。VisualC++的安裝和啟動(dòng)如果你的計(jì)算機(jī)未安裝VisualC++6.0,那么應(yīng)先安裝VisualC++6.0。VisualC++是VisualStudio的一局部,因此需要VisualStudio的光盤(pán),執(zhí)行其中的setup.exe,并按屏幕上的提示安裝即可。安轉(zhuǎn)完畢后,在Windows的“開(kāi)始〞菜單的程序子菜單中會(huì)出現(xiàn)“MicrosoftvisualStudio〞子菜單,如圖1-1所示圖1-1MicrosoftvisualStudio啟動(dòng)子菜單在需要使用VisualC++時(shí),只需從桌面上順序選擇“開(kāi)始〞程序“MicrosoftvisualStudio〞VisualC++6.0命令即可,此時(shí)屏幕上在短暫顯示VisualC++6.0的版權(quán)頁(yè)面后,出現(xiàn)VisualC++6.0的由窗口、工具條、菜單、工具及其他局部組成的一個(gè)主界面。通過(guò)這個(gè)界面,用戶可以創(chuàng)立、測(cè)試、調(diào)試應(yīng)用程序。如圖圖1-2VisualC++6.0界面常用功能鍵及其意義為了使程序員能夠方便快捷地完成程序開(kāi)發(fā),開(kāi)發(fā)環(huán)境提供了大量快捷方式來(lái)簡(jiǎn)化一些常用操作的步驟。鍵盤(pán)操作直接、簡(jiǎn)單,而且非常方便,因而程序員非常喜歡采用鍵盤(pán)命令來(lái)控制操作。下面是一些最常用的功能鍵,希望在實(shí)驗(yàn)中逐步掌握。操作類型功能鍵對(duì)應(yīng)菜單含義文件操作Ctrl+NFile|New創(chuàng)立新的文件、工程等Ctrl+OFile|Open翻開(kāi)工程、文件等Ctrl+SFile|Save保存當(dāng)前文件編輯操作Ctrl+XEdit|Cut剪切Ctrl+CEdit|Copy復(fù)制Ctrl+VEdit|Paste粘貼Ctrl+ZEdit|Undo撤消上一個(gè)操作Ctrl+YEdit|Redo重復(fù)上一個(gè)操作Ctrl+AEdit|SelectAllDelEdit|Del刪除光標(biāo)后面的一個(gè)字符建立程序操作Ctrl+F7Build|Compilercurrentfile編譯當(dāng)前源文件Ctrl+F5Build|Runexe運(yùn)行當(dāng)前工程F7Build|Buildexe建立可執(zhí)行程序F5Build|StartDebugging啟動(dòng)調(diào)試程序調(diào)試F5Debug|Go繼續(xù)運(yùn)行F11Debug|Stepinto進(jìn)入函數(shù)體內(nèi)部shift+F11Debug|Stepout從函數(shù)體內(nèi)部運(yùn)行出來(lái)F10Debug|Stepover執(zhí)行一行語(yǔ)句F9設(shè)置/去除斷點(diǎn)Ctrl+F10Debug|Runtoshift+F9Debug|QuickWatch快速查看變量或表達(dá)式的值Shift+F5Debug|Stopdebugging停止調(diào)試注:這些快捷鍵命令都有對(duì)應(yīng)的菜單和工具條按鈕,如圖1.3:編譯工程插入斷點(diǎn)編譯工程插入斷點(diǎn)鏈接目標(biāo)文件調(diào)試運(yùn)行鏈接目標(biāo)文件調(diào)試運(yùn)行停止編譯全速運(yùn)行停止編譯全速運(yùn)行圖1-3快捷鍵命令菜單與按鈕輸入和編輯源程序先介紹最簡(jiǎn)單的情況,即程序只由一個(gè)源程序文件組成,即單文件程序〔有關(guān)對(duì)多文件程序的操作在本章的稍后介紹〕。1、新建一個(gè)C++源程序的方法如果要新建一個(gè)C++源程序,可采取以下的步驟:在VisualC++主窗口的主菜單欄中選擇File〔文件〕命令,然后選擇New〔新建〕命令,如圖1-4。這時(shí),展幕上出現(xiàn)一個(gè)New〔新建〕對(duì)話框,單擊此對(duì)話框的上方的Files〔文件〕屬性頁(yè),在列表中選擇“C++SourceFile〞項(xiàng),表示要建立新的C++源程序文件,然后在對(duì)話框右半局部的Location〔目錄〕文本框中輸入準(zhǔn)備編輯的源程序文件的存儲(chǔ)路徑〔假設(shè)為D:\VC++6.0\測(cè)試程序\其他測(cè)試\demo〕,表示準(zhǔn)備編輯的源程序文件將存存放在“D:\VC++6.0\測(cè)試程序\其他測(cè)試\demo〞子目錄下。在其上方的File〔文件〕文本框中輸入準(zhǔn)備編輯的源程序文件的名字〔輸入MyFirstC〕,如圖1-5。這樣,即將進(jìn)行輸入和編輯的源程序就以MyFirstC.cpp為文件名存放在“D:\VC++6.0\測(cè)試程序\其他測(cè)試\demo〞目錄下,如圖1-6。當(dāng)然,讀者完全可以指定其他路徑名和文件名。圖1-4選擇File菜單中的New操作C++控制臺(tái)應(yīng)用程序C++控制臺(tái)應(yīng)用程序圖1.5創(chuàng)立工程文件圖1.6在指定的目錄下建立的源文件在單擊OK按鈕后,回到VisualC++主窗口,由于在前面已指定了路徑〔D:\VC++6.0\測(cè)試程序\其他測(cè)試\demo〕和文件名〔MyFirstC.cpp〕,因此在窗口的標(biāo)題欄中顯示出MyFirstC.cpp??梢钥吹焦鈽?biāo)在程序編輯窗口閃爍,表示程序編輯窗口已激活,可以輸入和編輯源程序了。這里輸入如圖1-7窗口中所示的程序。檢查無(wú)誤后,那么將源程序保存在前面指定的文件中,方法是:在主菜單欄中選擇File〔文件〕命令,并在其下拉菜單中選擇Save〔保存〕命令。也可以用快捷鍵Ctrl+S來(lái)保存文件。如果不想將源程序存放到原先指定的文件中,可以不選擇Save命令,而選擇SaveAs〔另存為〕命令,并在彈出的SaveAs〔另存為〕對(duì)話框中指定文件路徑和文件名。1.7C++程序的輸入2、翻開(kāi)一個(gè)已有的程序如果你已經(jīng)編輯并保存過(guò)C++源程序,而希望翻開(kāi)你所需要的源程序文件,并對(duì)它進(jìn)行修改,方法是:〔1〕在“資源管理器〞或“我的電腦〞中按路徑打到已有的C++程序名〔如C1-1.cpp〕?!?〕雙擊此文件名,那么進(jìn)入VisualC++集成環(huán)境,并翻開(kāi)了該文件,程序已顯示在編輯窗口中。也可以用Ctrl+O或單擊工具欄中的小圖標(biāo)來(lái)翻開(kāi)文件?!?〕如果修改后仍想保存在原來(lái)的文件中,可以選擇File〔文件〕→Save〔保存〕命令,或用快捷鍵Ctrl+S,或單擊工具欄中的小圖標(biāo)來(lái)保存文件。3、通過(guò)已有的程序建立一個(gè)新程序的方法如果你已編輯并保存過(guò)C++源程序〔而不是第一次在該計(jì)算機(jī)上使用VisualC++〕的話,那么可以通過(guò)一個(gè)已有的程序來(lái)建立一個(gè)新程序,這樣做比重新輸入一個(gè)新文件省事,因?yàn)榭梢岳迷谐绦虻木植績(jī)?nèi)容。方法是:〔1〕翻開(kāi)任何一個(gè)已有的源文件,〔例cl-1.cpp〕〔2〕利用該文件的根底修改成新的文件然后通過(guò)選擇File〔文件〕→Saveas〔另存為〕命令將它以另一文件名另存〔如以test.cpp名字另存〕,這樣就生成了一個(gè)新文件test.cpp。用這種方法很方便,但應(yīng)注意:〔1〕保存新文件時(shí),不要錯(cuò)用File→Save〔保存〕操作,否那么原有文件〔cl-1.cpp〕的內(nèi)容就被修改了?!?〕在編譯新文件前,應(yīng)先選擇File〔文件〕→CloseWorkspace〔關(guān)閉工作區(qū)〕命令將原有的工作區(qū)關(guān)閉,以免新文件在原有的工作區(qū)進(jìn)行編譯。編譯、連接和運(yùn)行1、程序的編譯在編輯和保存了源文件以后,需要對(duì)該源文件進(jìn)行編譯。單擊主菜單欄中的Build〔編譯〕,在其下拉菜單中選擇CompileMyFirstC.cpp〔編譯MyFirstC.cpp〕命令。由于建立〔或保存〕文件時(shí)已指定了源文件的名字MyFirstC.cpp,因此在Build菜單的Compile命令中顯示了現(xiàn)在要編譯的源文件名MyFirstC.cpp。見(jiàn)圖1-8:1.8編譯C++程序在選擇“編譯〞命令后,如果屏幕上出現(xiàn)一個(gè)對(duì)話框,內(nèi)容是“Thisbuildcommandrepuiresanactiveprojectworkspace.Wouldyouliketocreatadefaultprojectworkspace?〞〔此編譯命令要求一個(gè)有效的工程工作區(qū)。你是否同意建立一個(gè)默認(rèn)的工程工作區(qū)〕,見(jiàn)圖1-9。單擊Yes〔是〕按鈕,表示同意由系統(tǒng)建立默認(rèn)的工程工作區(qū),然后開(kāi)始編譯。也可以不用選擇菜單的方法,而用Ctrl+F7或小圖標(biāo)來(lái)完成編譯。圖1-9建立默認(rèn)工作區(qū)提示在進(jìn)行編譯時(shí),編譯系統(tǒng)檢查源程序中有無(wú)語(yǔ)法錯(cuò)誤,然后在主窗口下部的調(diào)試信息窗口輸出編譯的信息,如果有錯(cuò),就會(huì)指出錯(cuò)誤的位置和性質(zhì),見(jiàn)圖1-10。1.9編譯錯(cuò)誤提示信息2、程序的調(diào)試程序調(diào)試的任務(wù)是發(fā)現(xiàn)和改正程序中的錯(cuò)誤,使程序能正常運(yùn)行。編譯系統(tǒng)能檢查出程序中的語(yǔ)法錯(cuò)誤。語(yǔ)法錯(cuò)誤分兩類:一類是致命錯(cuò)誤,以error表示,如果程序中有這類錯(cuò)誤,就通不過(guò)編譯,無(wú)法形成目標(biāo)程序,更談不上運(yùn)行了。另一類是輕微錯(cuò)誤,以warning〔警告〕表示,這類錯(cuò)誤不影響生成目標(biāo)程序和可執(zhí)行程序,但有可能影響運(yùn)行的結(jié)果。因此也應(yīng)當(dāng)盡量改正,使程序既無(wú)error,又無(wú)warning。在圖1-10中的調(diào)試信息窗口中可以看到編譯的信息,指出源程序有一個(gè)error和一個(gè)warning。第7行有致命錯(cuò)誤,錯(cuò)誤的種類是:在“}〞之前漏了“;〞。檢查圖1-10中的程序,果然發(fā)現(xiàn)在第6行末漏了分號(hào)。同學(xué)們可能要問(wèn):明明是第6行有錯(cuò),怎么在報(bào)錯(cuò)時(shí)說(shuō)成是第7行的錯(cuò)呢?這是因?yàn)镃++允許將一個(gè)語(yǔ)句分寫(xiě)成幾行,因此檢查完第6行末尾無(wú)分號(hào)時(shí)還不能判定該語(yǔ)句有錯(cuò),必須再檢查下一行,直到發(fā)現(xiàn)第7行的“}〞前都沒(méi)有“;〞,才能判定出錯(cuò)。因此在第7行報(bào)錯(cuò)。在根據(jù)編譯報(bào)錯(cuò)信息檢查程序時(shí),應(yīng)檢查其上下行。此外編譯信息指出第7行還有一個(gè)warning,指出main函數(shù)需要有一個(gè)返回值,程序中缺少一個(gè)“return0;〞語(yǔ)句。進(jìn)行改錯(cuò)時(shí),雙擊調(diào)試信息窗口中的某個(gè)報(bào)錯(cuò)信息的第1行,光標(biāo)就自動(dòng)移到程序窗口中被報(bào)錯(cuò)的程序行,并用粗箭頭指向該行。見(jiàn)圖1-11圖1-11發(fā)現(xiàn)錯(cuò)誤位置根據(jù)提示信息:“errorC2065:'printf':undeclaredidentifier〞,判斷沒(méi)有參加預(yù)編譯頭文件:〞stdio.h〞,信息“errorC2065:'cout':undeclaredidentifier〞,沒(méi)有參加頭文件〞iostream.h〞.修改后如圖1.12所示,增加編譯頭文件stdio.h和iostream.h圖1.12錯(cuò)誤修改再選擇CompileMyFirstC.cpp命令重新編譯,此時(shí)編譯信息提示:“0error(s),0warning(s)〞,即沒(méi)有致使錯(cuò)誤〔error〕和警告性錯(cuò)誤〔warning〕,編譯成功,這時(shí)產(chǎn)生一個(gè)MyFirstC.obj文件。見(jiàn)圖1-13中的下部調(diào)試信息窗口。圖1.13語(yǔ)法編譯通過(guò)3、程序的連接在得到目標(biāo)程序后,就可以對(duì)程序進(jìn)行連接了。此時(shí)應(yīng)選擇Build〔構(gòu)建〕→BuildMyFirstC.exe〔構(gòu)建MyFirstC.exe〕命令,見(jiàn)圖1-14。表示要求連接并建立一個(gè)可執(zhí)行文件MyFirstC.exe。圖1-14連接建立可執(zhí)行文件在執(zhí)行連接后,在調(diào)試輸出窗口顯示連接時(shí)的信息,說(shuō)明沒(méi)有發(fā)現(xiàn)錯(cuò)誤,生成了一個(gè)可執(zhí)行文件MyFirstC.exe。見(jiàn)圖1-15。圖1-15可執(zhí)行文件建立成功以上介紹的是分別進(jìn)行程序的編譯與連接,也可以選擇Build→命令〔或按F7鍵〕一次完成編譯與連接。對(duì)于初學(xué)者來(lái)說(shuō),還是建議分步進(jìn)行程序的編譯與連接,有利于對(duì)程序編譯、解釋、連接過(guò)程的理解。今后積累一定經(jīng)驗(yàn)后,可以一步完成編譯與連接。4、程序的執(zhí)行在得到可執(zhí)行文件MyFirstC.exe后,就可以直接執(zhí)行MyFirstC.exe了。選擇Build→!Executetest.exe〔執(zhí)行MyFirstC.exe〕命令。見(jiàn)圖1-16。圖1-16運(yùn)行程序可執(zhí)行文件在選擇“!Executetest.exe〞命令后,即開(kāi)始執(zhí)行MyFirstC.exe。也可以不通過(guò)選擇菜單命令,而且Ctrl+F5來(lái)實(shí)現(xiàn)程序的執(zhí)行。程序執(zhí)行后,屏幕切換到輸出結(jié)果的窗口,顯示出運(yùn)行結(jié)果,見(jiàn)圖1-17。圖1-17程序運(yùn)行結(jié)果可以看到,在輸出結(jié)果的窗口中的第1行是程序的輸出結(jié)果:C語(yǔ)言方式的打印輸出hello!C++語(yǔ)言方式的打印輸出!第2行“Pressanykeytocontinue〞并非程序所指定的輸出,而是VisualC++在輸出完運(yùn)行結(jié)果后由VisualV++6.0系統(tǒng)自動(dòng)加上的一行信息,通知用戶“按任何一鍵以便繼續(xù)〞。當(dāng)你按下任何一鍵后,輸出窗口消失,回到VisualC++的主窗口,你可以繼續(xù)對(duì)源程序進(jìn)行修改補(bǔ)充或進(jìn)行其他工作。如果已完成對(duì)一個(gè)程序的操作,不再對(duì)它進(jìn)行其他處理,應(yīng)中選擇File〔文件〕→CloseWorkspace〔關(guān)閉窗口〕命令,以結(jié)束對(duì)該程序的操作。建立和運(yùn)行包含多個(gè)文件的程序的方法上面介紹的是最簡(jiǎn)單的情況,一個(gè)程序只包含一個(gè)源程序文件。如果一個(gè)程序包含多個(gè)源程序文件,那么需要建立一個(gè)工程文件〔projectfile〕,在這個(gè)工程文件中包含多個(gè)文件〔包括源文件和頭文件〕。工程文件是放在工程工作區(qū)〔Workspace〕中并在工程工作區(qū)的管理之下工作的,因此需要建立工程工作區(qū),一個(gè)工程工作區(qū)可以包含一個(gè)以上的工程。在編譯時(shí),先分別對(duì)每個(gè)文件進(jìn)行編譯,然后將工程文件中的文件連接成為一個(gè)整體,再與系統(tǒng)的有關(guān)資源連接,生成一個(gè)可執(zhí)行文件,最后執(zhí)行這個(gè)文件。在實(shí)際操作時(shí)有兩種方法:一種是由用戶建立工程工作區(qū)和工程文件;另一種是用戶只建立工程文件而不建立工程工作區(qū),由系統(tǒng)自動(dòng)建立工程工作區(qū)。1、由用戶建立工程工作區(qū)和工程文件〔1〕、先用前面介紹過(guò)的方法分別編輯好同一程序中的各個(gè)源程序文件,并存放在自己指定的目錄下,例如有一個(gè)程序包括filel.cpp和file2.cpp兩個(gè)源文件,并已把它們保存在“D:\計(jì)算張三\實(shí)驗(yàn)一〞子目錄下?!?〕、建立一個(gè)工程工作區(qū)。在如圖1-4所示的VisualC++主窗口中選擇File〔文件〕→New〔新建〕命令,在彈出的New〔新建〕對(duì)話框中選擇上部的選擇屬性頁(yè)Workspacename〔工作區(qū)名字〕,表示要建立一個(gè)新的工程工作區(qū)。在對(duì)話框中右部Workspacename〔工作區(qū)名字〕文本框中輸入你指定的工作區(qū)的名字〔如wsl〕,見(jiàn)圖1-18。圖1-18建立工作區(qū)然后單擊右下部的OK按鈕。此時(shí)返回VisualC++主窗口,見(jiàn)圖1-19??梢钥吹皆谧蟛康墓ぷ鲄^(qū)窗口中顯示了“Workspacews1:0project(s)〞,表示當(dāng)前的工作區(qū)名是wsl,其中有0個(gè)project〔沒(méi)有在其中放入工程文件〕。〔3〕、建立工程文件。選擇File〔文件〕→New〔新建〕命令,在彈出的New〔新建〕對(duì)話框中選擇上部的選擇屬性頁(yè)P(yáng)rojects〔工程,中文VisualC++把它譯為“工程〞〕,表示要建立一個(gè)工程文件。見(jiàn)圖1-20。在對(duì)話框中左部的列表中選擇“Win32ConsoleApplication〞項(xiàng),并在右部的location〔位置〕文本框中輸入工程文件的位置〔即文件路徑〕,在Projectname〔中文界面中顯示為“工程〞〕文本框中輸入你指定的工程文件名,假設(shè)輸入projectl。在窗口右部選中Addtocurrentworkspace〔添加至現(xiàn)有工作區(qū)〕單項(xiàng)選擇鈕,表示新建的工程文件是放到剛剛建立的當(dāng)前工作區(qū)中的。然后單擊OK〔確定〕按鈕。此時(shí)彈出一個(gè)如圖1-21所示的對(duì)話框,在其中選中Anemptyproject單項(xiàng)選擇鈕,表示新建立的是一個(gè)空的工程。單擊Finish〔完成〕按鈕。系統(tǒng)彈出一個(gè)NewProjectInformation〔新建工程信息〕對(duì)話框〔圖1-22〕,顯示了剛剛建立的工程的有關(guān)信息。在其下方可以看到工程文件的位置〔文件路徑〕。確認(rèn)后單擊OK〔確定〕按鈕。此時(shí)又回到VisualC++主窗口,可以看到:左部窗口中顯示了“Workspace’wsl’:1project(s)〞其下一行為“project1files〞,表示已將工程文件project1加到工程工作區(qū)wsl中,見(jiàn)圖1-23。圖1-19一個(gè)空的工作區(qū)圖1-20建立一個(gè)新的工程圖1-22新建工程的信息圖1-23工作區(qū)中參加一個(gè)新工程〔4〕、將源程序文件放到工程文件中。方法是:在VisualC++主窗口中依次選擇Project〔工程〕→AddToProject〔添加到工程中,在中文界上顯示為“添加工程〞〕→“Files…〞命令,見(jiàn)圖1-24。圖1-24文件參加到工程中在選擇“Files…〞命令后,屏幕上出現(xiàn)InsertFilesintoProject對(duì)話框。在上部的列表框中按路徑找到源文件file1.cpp和file2.cpp所在的子目錄,并選中file1.cpp和file2.cpp。單擊OK〔確定〕按鈕,就把這兩個(gè)文件添加到工程文件project1中了?!?〕、編譯和連接工程文件。由于已經(jīng)把file1.cpp和file2.cpp兩個(gè)文件添加到工程文件project1中,因此只須對(duì)工程文件project1進(jìn)行統(tǒng)一的編譯和連接。方法是:在Visua1C++主窗口中選擇Build〔編譯〕→Buildproject1.exe〔構(gòu)建project1.exe〕命令。在選擇Buildproject1.exe命令后,系統(tǒng)對(duì)整個(gè)工程文件進(jìn)行編譯和連接,在窗口的下部會(huì)顯示編譯和連接的信息。如果程序有錯(cuò),會(huì)顯示出錯(cuò)信息,如果無(wú)錯(cuò),會(huì)生成可執(zhí)行文件project1.exe。見(jiàn)圖1-25。圖1-25工程的編譯和連接執(zhí)行可執(zhí)行文件。選擇Build〔編譯〕→Executeproject1.exe〔執(zhí)行project1.exe〕命令,即可。2、用戶只建立工程文件上面介紹的方法是先建立工程工作區(qū),再建立工程文件,步驟比擬多??梢圆扇『?jiǎn)化的方法,即用戶只建立工程文件,而不建立工程工作區(qū),由系統(tǒng)自動(dòng)建立工程工作區(qū)。在本方法中,保存上一節(jié)中介紹的第〔1〕、〔4〕、〔5〕、〔6〕步,取消第〔2〕步,修改第〔3〕步。具體步聚如下:〔1〕分別編輯好同一程序中的各個(gè)源程序文件。同上一節(jié)中的第〔1〕步?!?〕建立一個(gè)工程文件〔不必先建立工程工作區(qū)〕。在VisualC++主窗口中選擇File〔文件〕→New〔新建〕命令,在彈出的New〔新建〕對(duì)話框中選擇上部的選項(xiàng)卡projects〔工程〕,表示要建立一個(gè)工程文件。見(jiàn)圖1-26。在對(duì)話框中左部的列表中選擇“Win32ConsoleApplication〞項(xiàng),在projectname〔中文VisualC++中顯示為“工程〞〕文本框中輸入你指定的工程文件名〔project1〕。可以看到:在右部的中間單項(xiàng)選擇鈕處默認(rèn)選定了Createnewworkspace〔創(chuàng)立新工作區(qū)〕,這是由于用戶未指定工作區(qū),系統(tǒng)會(huì)自動(dòng)開(kāi)辟新工作區(qū)。圖1-26建立一個(gè)新的Win32ConsoleApplication工程圖1-27建立新工程成功單擊OK〔確定〕按鈕,出現(xiàn)“Win32ConsoleApplication-step1of1〞對(duì)話框,選中右部的Anemptyproject單項(xiàng)選擇鈕,單擊Finish〔完成〕按鈕后,出現(xiàn)“Newprojectinformation〞〔新建工程信息〕消息框。從它的下部可以看到工程文件的路徑。單擊OK〔確定〕按鈕,在彈出的VisualC++主窗口的左部窗口的下方單擊FileView按鈕,窗口中顯示“Workspace`project1`:1project〔s〕〞,見(jiàn)圖1-27。說(shuō)明系統(tǒng)已自動(dòng)建立了一個(gè)工作區(qū),由于用戶未指定工作區(qū)名,系統(tǒng)就將工程文件名project1同時(shí)作為工作區(qū)名。向此工程文件添加內(nèi)容。步驟與方法一中的第〔4〕步相同。編譯和連接工程文件。步驟與方法一中的第〔4〕步相同。執(zhí)行可執(zhí)行文件。步驟與方法一中的第〔6〕步相同。顯然,這種方法比前一種方法簡(jiǎn)單一些。在介紹單文件程序時(shí),為了盡量簡(jiǎn)化手續(xù),這里沒(méi)有建立工作區(qū),也沒(méi)有建立工程文件,而是直接建立源文件,實(shí)際上,在編譯每一個(gè)程序時(shí)都需要一個(gè)工作區(qū),如果用戶未指定,系統(tǒng)會(huì)自動(dòng)建立工作區(qū),并賦予它一個(gè)默認(rèn)名〔此時(shí)以文件名作為工作區(qū)名1.3VisualC++6.0工程相關(guān)文件介紹序號(hào)文件名描述1*.dswVC工作區(qū)文件2*.dsp(DeveloperStudioProject)工程文件,文本格式。不熟悉的話不要手工修改3*.ncb無(wú)編譯瀏覽文件。當(dāng)自動(dòng)完成功能出問(wèn)題時(shí),可以刪除此文件,編譯工程后會(huì)自動(dòng)生成。4*.opt工程關(guān)于開(kāi)發(fā)環(huán)境的參數(shù)文件,如VC工具條位置信息等。5*.hC/C++程序頭文件,可用文本編輯器翻開(kāi)6*.cppC++源程序文件,可用文本編輯器翻開(kāi)7*.exe程序可執(zhí)行文件8*.plg編譯信息文件。編譯時(shí)的error和warning信息文件(實(shí)際上是一個(gè)html文件),一般用處不大。在ToolsOptionsBuild里面的選項(xiàng)可以控制這個(gè)文件的生成。9*.pch(Pre-CompiledFile)是預(yù)編譯文件。可以加快編譯速度,但是文件非常大10*.pdb(ProgramDatabase)記錄了程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息,在調(diào)試的時(shí)候有用11*.obj源程序文件的目標(biāo)文件,編譯后生成12*.ilk源程序文件的連接文件,連接后生成注:在VC下建立一個(gè)工程后,會(huì)自動(dòng)產(chǎn)生1~4類型的文件。參加*.h、*.cpp文件編譯后產(chǎn)生7~12類型的文件。其中8~12類型的文件位于工程目錄下的Debug目錄下。1-4類型的文件都是工程相關(guān)的文件,一般不要?jiǎng)h除,因?yàn)閯h除后,必須手動(dòng)的重新建立工程(詳細(xì)描述了如何建立一個(gè)工程)。對(duì)于大型工程來(lái)說(shuō),刪除這些文件的后果很嚴(yán)重。5~6類型的文件還有什么可說(shuō)的,不僅不能刪除這些文件,還要備份這些文件。失去這些文件是災(zāi)難性的。7~12類型的所有文件都是可以刪除的,因?yàn)樵俅尉幾g連接運(yùn)行程序時(shí),會(huì)再次自動(dòng)生成這些文件。1.4VisualC++6.0錯(cuò)誤信息程序錯(cuò)誤的類型1、嚴(yán)重錯(cuò)誤(fatalerror)很少出現(xiàn),通常是內(nèi)部編譯器出錯(cuò)。造成編譯立即停止。2、語(yǔ)法錯(cuò)誤(error)語(yǔ)法錯(cuò)誤是指源程序中存在不符合C/C++語(yǔ)言語(yǔ)法規(guī)定的語(yǔ)句,例如將int寫(xiě)成Int,括號(hào)不匹配等。這些錯(cuò)誤不改正是不能通過(guò)編譯的。如圖1-28圖1-28語(yǔ)法錯(cuò)誤3、警告錯(cuò)誤(warning)對(duì)于一些在語(yǔ)法上有輕微毛病但不影響程序運(yùn)行的錯(cuò)誤〔如定義了變量但始終未使用〕,編譯時(shí)會(huì)發(fā)出警告信息,雖然程序能通過(guò)編譯、連接、運(yùn)行,但警告類的錯(cuò)誤常常帶來(lái)程序非法操作、運(yùn)行錯(cuò)誤等問(wèn)題。所以,盡量改正警告錯(cuò)誤。如圖1-29圖1-29警告錯(cuò)誤4、連接錯(cuò)誤〔Linkerror〕程序語(yǔ)法上沒(méi)有問(wèn)題,但是在連接時(shí)出現(xiàn)錯(cuò)誤。這類問(wèn)題常常是因?yàn)槌绦蛞蕾嚭瘮?shù)、庫(kù)不匹配造成的。如圖1-30圖1-30連接錯(cuò)誤5、邏輯錯(cuò)誤邏輯錯(cuò)誤是指程序無(wú)語(yǔ)法錯(cuò)誤,也能正常運(yùn)行,但結(jié)果不對(duì)。這類錯(cuò)誤常常是設(shè)計(jì)算法時(shí)的錯(cuò)誤,計(jì)算機(jī)無(wú)法檢查出來(lái)。邏輯錯(cuò)誤是最難改正的錯(cuò)誤之一,引起錯(cuò)誤的原因往往可能很不起眼,比方就是一個(gè)變量沒(méi)有初始化等,所以改正這類錯(cuò)誤常常需要投入大量的精力。6、運(yùn)行錯(cuò)誤有時(shí)程序既無(wú)語(yǔ)法和邏輯錯(cuò)誤,但是程序就是不能正常運(yùn)行。多數(shù)情況下是輸入數(shù)據(jù)和程序要求的數(shù)據(jù)不匹配造成的,也可能是系統(tǒng)的支持問(wèn)題。在C++中,語(yǔ)法、連接錯(cuò)誤相對(duì)較為容易改正。而邏輯錯(cuò)誤是最隱蔽的錯(cuò)誤,比擬難以改正。運(yùn)行錯(cuò)誤那么主要是在程序強(qiáng)壯性、兼容性上可能存在問(wèn)題,可以通過(guò)提高程序的適應(yīng)能力來(lái)修正。而最容易讓程序開(kāi)發(fā)人員忽略的就是警告錯(cuò)誤了,因?yàn)榫驽e(cuò)誤不一定會(huì)影響程序的運(yùn)行,但是正是這種不確定性也傳遞給了程序的執(zhí)行,你不知道程序什么時(shí)候會(huì)出問(wèn)題,也許永遠(yuǎn)不會(huì)有問(wèn)題,也許問(wèn)題馬上出現(xiàn),也許問(wèn)題n年后出現(xiàn),誰(shuí)知道。所以,一定要重視警告錯(cuò)誤。表1-1是C++錯(cuò)誤的前綴描述,在遇到錯(cuò)誤時(shí)可以根據(jù)其前綴就知道錯(cuò)誤等級(jí)了。表1-1C++錯(cuò)誤的前綴描述錯(cuò)誤等級(jí)錯(cuò)誤前綴錯(cuò)誤編號(hào)范圍例如嚴(yán)重錯(cuò)誤C1001~999編譯錯(cuò)誤C2001~999errorC2065:'Int':undeclaredidentifier〔標(biāo)識(shí)符,比方一個(gè)變量,未申明〕。如圖1-28,Int沒(méi)有申明過(guò)。警告錯(cuò)誤C4001~999warningC4101:'i':unreferencedlocalvariable〔局部變量申明后從未使用過(guò)〕。如圖1-29,其中的i變量從未使用過(guò)。鏈接錯(cuò)誤LNK1000~6026LNK2001:unresolvedexternalsymbol"symbol".〔連接指定的函數(shù)或庫(kù)異?!场H鐖D1-31,程序找不到main函數(shù)。錯(cuò)誤信息的查詢只有詳細(xì)地了解了錯(cuò)誤的原因,才能正確地改正錯(cuò)誤。Microsoft的MSDNLibrary〔Microsoft開(kāi)發(fā)幫助文檔庫(kù),如圖1-31〕提供了查詢錯(cuò)誤信息的功能。對(duì)于遇到的不明白的錯(cuò)誤,同學(xué)們應(yīng)該學(xué)習(xí)使用MSDN幫助文檔庫(kù)進(jìn)行錯(cuò)誤信息查詢,獲得錯(cuò)誤信息的解釋和可能的改正方法。具體方法如下:〔1〕選擇MSDNLibrary〔如圖1-31〕的索引屬性頁(yè),在“鍵入要查找的關(guān)鍵字:〞中輸入錯(cuò)誤號(hào)〔由錯(cuò)誤前綴和編號(hào)組成〕,比方輸入C2065,如圖1-32所示。圖1-31MSDNLibrary圖1-32在MSDNLibrary中查找錯(cuò)誤信息〔2〕、在索引列表框中雙擊選擇匹配的錯(cuò)誤后,錯(cuò)誤類型、可能原因、改正方法等信息那么顯示在窗口的右邊局部。如圖1-32所示:1.5VisualC++6.0調(diào)試工具使用在開(kāi)發(fā)程序的過(guò)程中,需要不斷地調(diào)試自己的程序,或檢查錯(cuò)誤,或測(cè)試程序的穩(wěn)定性,這就需要借助調(diào)試工具來(lái)進(jìn)行。選擇一個(gè)好的調(diào)試工具并能夠熟練地使用它,將會(huì)使程序開(kāi)發(fā)變得更加容易,從而大大提高程序開(kāi)發(fā)的效率。目前有許多調(diào)試工具,集成在VisualC++中的調(diào)試工具便具有相當(dāng)強(qiáng)大的功能。設(shè)置工程的調(diào)試屬性在VisualC++中建立一個(gè)工程(Project)時(shí),VisualC++都會(huì)自動(dòng)創(chuàng)立一個(gè)Debug目錄,在該目錄下存放在開(kāi)發(fā)過(guò)程進(jìn)行調(diào)試時(shí)生成的文件以及生成的可執(zhí)行文件〔不同類型文件的解釋見(jiàn)1.3節(jié)VisualC++6.0工程相關(guān)文件介紹〕,不妨將此時(shí)生成的可執(zhí)行文件稱為Debug版本。在Debug版本當(dāng)中,包含著Microsoft格式的調(diào)試信息,而且不進(jìn)行任何代碼優(yōu)化。一般情況下,在程序的開(kāi)發(fā)過(guò)程中使用Debug模式。在應(yīng)用程序開(kāi)發(fā)完成之后,要將程序發(fā)行時(shí),需要編譯形成另一種版本的可執(zhí)行文件,稱為Release版本,在Release版本中對(duì)可執(zhí)行程序的二進(jìn)制代碼進(jìn)行了優(yōu)化,其中不包含任何的調(diào)試信息。要建立Release版本的可執(zhí)行文件,可以選擇菜單Project中的Setting命令,這時(shí)屏幕上面彈出ProjectSettings對(duì)話框,如圖1-33所示。在SettingsFor下拉列表中選擇Release,按OK按鈕退出。如果要在VisualC++中調(diào)試程序,那么工程的應(yīng)設(shè)為Debug版本。一般VisualC++建立一個(gè)工程(Project)時(shí),默認(rèn)采用Debug版本。圖1-33設(shè)置工程的調(diào)試屬性學(xué)習(xí)設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試通常,一個(gè)應(yīng)用程序是連續(xù)運(yùn)行的,但是在程序調(diào)試的過(guò)程中,往往需要在程序的運(yùn)行過(guò)程的某一階段來(lái)觀測(cè)應(yīng)用程序的狀態(tài),所以必須使程序在某一地點(diǎn)停下來(lái)。在VisualC++中,可以通過(guò)設(shè)置斷點(diǎn)來(lái)到達(dá)這樣的目的。在設(shè)置好斷點(diǎn)之后,當(dāng)程序運(yùn)行到設(shè)立斷點(diǎn)處時(shí)就停止運(yùn)行,此時(shí)就可以利用各種工具來(lái)觀察程序的狀態(tài),也可以設(shè)置各種條件使程序按要求繼續(xù)運(yùn)行,這樣就可以進(jìn)一步觀測(cè)程序的流向。在VisualC++中,可以設(shè)置多種類型的斷點(diǎn),這些斷點(diǎn)起作用的方式各不相同,可以將它們分為三類,即:位置斷點(diǎn)、邏輯斷點(diǎn)以及與Windows消息有關(guān)的斷點(diǎn)。下面我們只介紹簡(jiǎn)單位置斷點(diǎn)的設(shè)置方法,其它高級(jí)斷點(diǎn)的設(shè)置可以在今后進(jìn)一步學(xué)習(xí)中掌握。1、設(shè)置位置斷點(diǎn)位置斷點(diǎn),這是一類最簡(jiǎn)單的斷點(diǎn)類型,其設(shè)置方法也最為簡(jiǎn)單,只要把光標(biāo)移到要設(shè)斷點(diǎn)的位置〔當(dāng)然這一行必須包含一條有效語(yǔ)句〕;然后按工具條上的add/removebreakpoint按鈕或按快捷鍵F9;如圖1-34:圖1-34設(shè)置斷點(diǎn)按鈕這時(shí)將會(huì)在屏幕上看到在這一行的左邊出現(xiàn)一個(gè)紅色的圓點(diǎn),表示在該位置設(shè)立了一個(gè)斷點(diǎn),如圖1-35所示。如果你想取消斷點(diǎn),將光標(biāo)移動(dòng)到設(shè)置斷點(diǎn)的代碼行,按F9。2、啟動(dòng)調(diào)試按F5或者在Build菜單中,選擇StartDebug然后選擇Go,就可以啟動(dòng)調(diào)試程序。程序會(huì)一直運(yùn)行到需要用戶輸入或者有斷點(diǎn)的代碼處。如圖1-37處的小黃箭頭,說(shuō)明程序運(yùn)行到該處停止下來(lái),等待下一步調(diào)試命令。3、查看變量值查看變量值有多種方式,你可以選擇你喜歡的方式進(jìn)行。(1)你可以將鼠標(biāo)移動(dòng)到程序的變量名處,系統(tǒng)會(huì)自動(dòng)為你顯示變量的值;(2)復(fù)雜變量〔如對(duì)象〕可以通過(guò)QuickWatch查看,方法是:將光標(biāo)定位到所要查看值的變量處,按鼠標(biāo)右鍵,選擇QuickWatch菜單,就可以看到變量值。(3)啟動(dòng)調(diào)試程序后,屏幕下方將會(huì)出現(xiàn)兩個(gè)輸出窗口,一個(gè)是Watch,另一個(gè)是Variable。Watch窗口顯示變量名和變量值,你可以在Watch窗口中加上你想觀察值的變量名,也可以直接從源代碼中選擇變量名,并把它拖動(dòng)到Watch窗口中。Variable窗口顯示程序當(dāng)前運(yùn)行上下文涉及的變量的值。如圖1-37:圖1-35設(shè)置一個(gè)斷點(diǎn)圖1-36啟動(dòng)調(diào)試圖1-37查看變量數(shù)據(jù)4、控制程序執(zhí)行你可以控制程序單步執(zhí)行〔F10〕、跟蹤到一個(gè)函數(shù)內(nèi)部〔F11〕、從一個(gè)函數(shù)運(yùn)行出來(lái)〔shift+F11〕、運(yùn)行到光標(biāo)所在位置〔Ctrl+F10〕,以便方便地調(diào)試程序。這些命令用于在某個(gè)局部范圍詳細(xì)地調(diào)試程序。你也可以通過(guò)設(shè)置斷點(diǎn)〔F9〕然后用直接運(yùn)行〔GO或者F5〕來(lái)控制程序直接運(yùn)行到斷點(diǎn)位置。如果你設(shè)置了多個(gè)斷點(diǎn),程序?qū)?huì)在遇到的第一個(gè)斷點(diǎn)處停下來(lái)。要從斷點(diǎn)處繼續(xù)運(yùn)行,可以用上面所說(shuō)的各種命令〔F5,F(xiàn)10,F(xiàn)11,Shift+F11,Ctrl+F10〕圖1-38調(diào)試控制工具條5、結(jié)束調(diào)試要結(jié)束調(diào)試,可以按shift+F5或者選擇菜單Debug|StopDebugging。當(dāng)結(jié)束調(diào)試后,所有調(diào)試窗口會(huì)自動(dòng)關(guān)閉,Debug菜單也會(huì)自動(dòng)復(fù)原為Build菜單。第二章C/C++實(shí)驗(yàn)要求2.1實(shí)驗(yàn)的意義和目的程序設(shè)計(jì)是計(jì)算機(jī)專業(yè)的本,計(jì)算機(jī)專業(yè)大量的理論和實(shí)踐學(xué)習(xí),比方,從?數(shù)據(jù)結(jié)構(gòu)?、?面向?qū)ο蟪绦蛟O(shè)計(jì)?、?操作系統(tǒng)?到畢業(yè)設(shè)計(jì),都會(huì)用到程序設(shè)計(jì),而C++程序設(shè)計(jì)語(yǔ)言那么是進(jìn)行程序設(shè)計(jì)的根底工具。正如我們?cè)趯W(xué)習(xí)語(yǔ)言時(shí),不能僅僅停留在“聽(tīng)得懂〞,而要學(xué)會(huì)能說(shuō)會(huì)道,才能有效地和別人進(jìn)行交流。類似的,學(xué)習(xí)C++程序設(shè)計(jì)不能僅滿足于“懂得了〞,滿足于了解語(yǔ)法和能看懂書(shū)上的程序,而應(yīng)當(dāng)掌握程序設(shè)計(jì)的全過(guò)程,即能獨(dú)立編寫(xiě)源程序,獨(dú)立調(diào)試運(yùn)行程序,獨(dú)立分析運(yùn)行結(jié)果,學(xué)會(huì)利用C++程序設(shè)計(jì)語(yǔ)言和計(jì)算機(jī)進(jìn)行交流。程序設(shè)計(jì)是一門(mén)實(shí)踐性很強(qiáng)的課程,必須以實(shí)踐為重,許多實(shí)踐知識(shí)不是靠聽(tīng)課和看書(shū)學(xué)到的,而是通過(guò)長(zhǎng)時(shí)間的實(shí)踐積累起來(lái)的,切忌只看書(shū),不上機(jī)實(shí)踐。不僅要紙上談兵,更要沙場(chǎng)比試。正是如此,C++實(shí)驗(yàn)給同學(xué)提供了一個(gè)實(shí)踐的時(shí)機(jī)。C++實(shí)驗(yàn)的目的,絕不僅是為了驗(yàn)證教材和講課的內(nèi)容,或者驗(yàn)證自己所編寫(xiě)的程序正確與否。其目的更在于:1、加深對(duì)講授內(nèi)容的理解,尤其是一些語(yǔ)法規(guī)定,光靠課堂講授,缺乏于掌握理解。通過(guò)屢次上機(jī),就能自然地、熟悉地掌握,所謂熟能生巧。2、熟練掌握并使用C++程序開(kāi)發(fā)的環(huán)境。3、學(xué)會(huì)獨(dú)立調(diào)試和運(yùn)行程序。任何程序都不是一蹴而就的,需要屢次的更改調(diào)試,對(duì)初學(xué)者來(lái)說(shuō)更是如此。因此,要在調(diào)試過(guò)程中積累經(jīng)驗(yàn),再利用經(jīng)驗(yàn)高效、快速地調(diào)試程序。調(diào)試程序的能力是每個(gè)程序設(shè)計(jì)人員應(yīng)當(dāng)掌握的一項(xiàng)根本功。4、養(yǎng)成良好的編程習(xí)慣,編寫(xiě)良好風(fēng)格的代碼。編寫(xiě)程序應(yīng)遵循良好的編程標(biāo)準(zhǔn),使程序具有良好的可讀性、可維護(hù)性。正如寫(xiě)文章一樣,不僅要寫(xiě)得一手好字,更要格式標(biāo)準(zhǔn),段落清楚,思路清晰。5、培養(yǎng)獨(dú)立編寫(xiě)程序的能力。程序設(shè)計(jì)最終的目的是使用計(jì)算機(jī)解決實(shí)際問(wèn)題,問(wèn)題是什么,如何解決,解決方法是什么,如何編寫(xiě)程序解決問(wèn)題才是核心。因此,在做實(shí)驗(yàn)的時(shí)候應(yīng)多問(wèn)為什么,多觀察,多分析,多動(dòng)手。2.2實(shí)驗(yàn)過(guò)程總體要求實(shí)驗(yàn)內(nèi)容總體安排實(shí)驗(yàn)前的準(zhǔn)備工作1、預(yù)習(xí)、思考實(shí)驗(yàn)內(nèi)容;2、復(fù)習(xí)和掌握與本實(shí)驗(yàn)有關(guān)的知識(shí)內(nèi)容;3、準(zhǔn)備好上機(jī)所需的程序代碼。實(shí)驗(yàn)課內(nèi)時(shí)間主要是解決問(wèn)題、調(diào)試程序、運(yùn)行程序、測(cè)試程序和分析結(jié)果的時(shí)間。切忌不編寫(xiě)程序或抄襲別人程序去上機(jī);4、填寫(xiě)實(shí)驗(yàn)報(bào)告中的如下內(nèi)容:一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)內(nèi)容1-4點(diǎn)5、對(duì)程序中自己有不懂或疑問(wèn)的地方,應(yīng)做出記錄,以便在實(shí)驗(yàn)課上集中解決;6、準(zhǔn)備好調(diào)試和運(yùn)行所需的數(shù)據(jù);上機(jī)實(shí)驗(yàn)步驟上機(jī)實(shí)驗(yàn)時(shí)應(yīng)該是一人一組,獨(dú)立上機(jī)。上機(jī)過(guò)程中出現(xiàn)的問(wèn)題,盡量先獨(dú)立思考和解決,尤其是語(yǔ)法錯(cuò)誤問(wèn)題,應(yīng)善于獨(dú)立分析判斷,這是提高程序調(diào)試能力最主要的途徑;對(duì)于難以解決的問(wèn)題可以和同學(xué)交流或問(wèn)老師。具體的上機(jī)步驟是:1、在磁盤(pán)上建立自己的工作目錄,比方D:\張三\C++實(shí)驗(yàn)\實(shí)驗(yàn)一2、進(jìn)入C++工作環(huán)境,如VisualC++6.0集成開(kāi)發(fā)環(huán)境;3、輸入自己編好的程序;4、檢查輸入是否有錯(cuò);5、編譯和連接。如果出現(xiàn)錯(cuò)誤,首先記錄錯(cuò)誤信息,然后根據(jù)提示的出錯(cuò)信息查找出錯(cuò)位置和原因,加以改正。再進(jìn)行編譯……,如此反復(fù)直到正確編譯和連接為止通過(guò)為止。6、運(yùn)行程序,輸入測(cè)試數(shù)據(jù),記錄程序運(yùn)行結(jié)果;7、分析結(jié)果是否正確,并改良程序;上機(jī)代碼編寫(xiě)要求1、認(rèn)真閱讀參考資料?華為編程標(biāo)準(zhǔn)和范例?;2、實(shí)驗(yàn)代碼書(shū)寫(xiě)標(biāo)準(zhǔn)清晰,如縮進(jìn)、空行、程序塊對(duì)齊等;3、書(shū)寫(xiě)的代碼有必要的注釋;注意:代碼的標(biāo)準(zhǔn)性將作為實(shí)驗(yàn)〔過(guò)程和期末〕考核的一個(gè)重要局部實(shí)驗(yàn)報(bào)告編寫(xiě)實(shí)驗(yàn)后,應(yīng)及時(shí)整理出實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告提交電子文檔,實(shí)驗(yàn)報(bào)告具體內(nèi)容見(jiàn)附錄A實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)數(shù)據(jù)提交1、提交內(nèi)容每次實(shí)驗(yàn)需要提交的數(shù)據(jù)主要有以下幾項(xiàng):〔1〕、實(shí)驗(yàn)報(bào)告:嚴(yán)格按照附錄A給出的格式完成實(shí)驗(yàn)報(bào)告?!?〕、實(shí)驗(yàn)代碼:實(shí)驗(yàn)代碼必須標(biāo)準(zhǔn)編寫(xiě),不良代碼不予接收。〔3〕、實(shí)驗(yàn)可執(zhí)行文件2、提交方法每次實(shí)驗(yàn)的數(shù)據(jù)均需要按時(shí)提交到指導(dǎo)教師指定的效勞器上。提交的方法如下:〔1〕、把實(shí)驗(yàn)的內(nèi)容〔見(jiàn)1〕統(tǒng)一放入一個(gè)文件夾中。文件夾以學(xué)生的班級(jí)、學(xué)號(hào)、姓名組合命名,比方:計(jì)算機(jī)-20060405-張三。如以下圖2-1:圖2-1實(shí)驗(yàn)數(shù)據(jù)整理〔2〕、把〔1〕整理的個(gè)人實(shí)驗(yàn)數(shù)據(jù)文件夾提交到效勞器,具體效勞器由指導(dǎo)教師根據(jù)實(shí)驗(yàn)室環(huán)境情況確定。實(shí)驗(yàn)參考資料[1]華為編程標(biāo)準(zhǔn)[2]林銳.高質(zhì)量C++C編程指南.2001,7[3]譚浩強(qiáng).C++程序設(shè)計(jì).北京:清華大學(xué)出版社.2004[4]譚浩強(qiáng).C++程序設(shè)計(jì)題解與上機(jī)指導(dǎo).北京:清華大學(xué)出版社.20042.3實(shí)驗(yàn)考核平時(shí)實(shí)驗(yàn)過(guò)程考核平時(shí)實(shí)驗(yàn)過(guò)程考核主要是三個(gè)方面:1、上機(jī)實(shí)驗(yàn)考勤。每次上機(jī)應(yīng)主動(dòng)在指導(dǎo)老師處簽到,冒簽等不誠(chéng)信行為一旦發(fā)現(xiàn),取消本次實(shí)驗(yàn)成績(jī)。累計(jì)缺席實(shí)驗(yàn)課5次及5次以上者〔共16課〕,取消期末實(shí)驗(yàn)上機(jī)考試資格。2、實(shí)驗(yàn)數(shù)據(jù)提交。應(yīng)根據(jù)指導(dǎo)教師要求按時(shí)提交每次實(shí)驗(yàn)的數(shù)據(jù)〔不知道提交什么?見(jiàn)實(shí)驗(yàn)數(shù)據(jù)提交〕。抄襲代碼或?qū)嶒?yàn)報(bào)告等不誠(chéng)信行為一旦發(fā)現(xiàn),取消本次實(shí)驗(yàn)成績(jī)。實(shí)驗(yàn)數(shù)據(jù)未交5次及5次以上者〔共13個(gè)實(shí)驗(yàn)〕,取消期末實(shí)驗(yàn)上機(jī)考試資格。3、指導(dǎo)教師每次實(shí)驗(yàn)課根據(jù)實(shí)驗(yàn)過(guò)程情況,隨機(jī)抽查5~10名同學(xué)進(jìn)行當(dāng)次實(shí)驗(yàn)的辯論。4、實(shí)驗(yàn)課請(qǐng)假,請(qǐng)出據(jù)學(xué)辦老師簽字的正規(guī)請(qǐng)假條。期末實(shí)驗(yàn)上機(jī)考試C++程序設(shè)計(jì)語(yǔ)言實(shí)驗(yàn)期末考試方式為:上機(jī)考試。題目總量3~4道,類型主要有以下三類:1、程序改錯(cuò)題1~2道。主要考核程序語(yǔ)法錯(cuò)誤改正、程序調(diào)試能力;2、面向過(guò)程程序設(shè)計(jì)1~2道。主要考核利用在實(shí)驗(yàn)1~7中學(xué)習(xí)到的結(jié)構(gòu)化方法進(jìn)行程序設(shè)計(jì);3、面向?qū)ο蟪绦蛟O(shè)計(jì)1~2道。主要考核利用在實(shí)驗(yàn)8~13中學(xué)習(xí)到的面向?qū)ο蠓椒ㄟM(jìn)行程序設(shè)計(jì);分值分布:1:20%~30%;2:70%~80%實(shí)驗(yàn)成績(jī)?cè)u(píng)定面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)期末考核成績(jī)將兼顧平時(shí)實(shí)驗(yàn)過(guò)程考核成績(jī)和期末實(shí)驗(yàn)上機(jī)考試成績(jī)。以期末實(shí)驗(yàn)上機(jī)考試成績(jī)?yōu)橹鳎綍r(shí)實(shí)驗(yàn)過(guò)程考核為輔。第三章實(shí)驗(yàn)內(nèi)容與指導(dǎo)3.1實(shí)驗(yàn)一數(shù)據(jù)類型與表達(dá)式實(shí)驗(yàn)類型:驗(yàn)證型實(shí)驗(yàn)2學(xué)時(shí)實(shí)驗(yàn)?zāi)康?、熟悉并學(xué)習(xí)使用C++程序編譯平臺(tái)VC6.0;2、掌握如何在編譯平臺(tái)下編輯、編譯、連接和運(yùn)行一個(gè)簡(jiǎn)單的C++程序;3、掌握C++語(yǔ)言根底數(shù)據(jù)類型,熟悉變量定義和賦值方法;4、學(xué)會(huì)使用C++算術(shù)運(yùn)算符和算術(shù)表達(dá)式;知識(shí)點(diǎn)介紹1、C++程序的結(jié)構(gòu)。一個(gè)c++程序有多個(gè)程序單位構(gòu)成,每一個(gè)程序單位作為一個(gè)文件,編譯系統(tǒng)分別對(duì)每個(gè)程序文件分別編譯,然后連接起來(lái)形成可執(zhí)行程序。在一個(gè)程序單位中包含以下幾局部:預(yù)處理命令,全局聲明局部,函數(shù)〔有函數(shù)首部和函數(shù)體組成〕,一個(gè)C++必須有一個(gè)〔而且只能有一個(gè)〕main〔〕函數(shù)。2、C++數(shù)據(jù)類型和表達(dá)式C++有多種數(shù)據(jù)類型,數(shù)據(jù)類型隱含著該類數(shù)據(jù)的表示、存儲(chǔ)及處理規(guī)那么。C++運(yùn)算符豐富,使用十分靈活。有運(yùn)算符和括號(hào)將運(yùn)算對(duì)象〔操作數(shù)〕連接起來(lái),構(gòu)成表達(dá)式。表達(dá)式中混合運(yùn)算式要注意運(yùn)算符的優(yōu)先級(jí)和結(jié)合性。此外,不同數(shù)據(jù)類型運(yùn)算時(shí),存在類型轉(zhuǎn)換〔隱式自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換〕。3、C++程序的編寫(xiě)實(shí)現(xiàn)用C++語(yǔ)言編寫(xiě)程序——對(duì)源程序文件進(jìn)行編譯聲稱目標(biāo)文件——對(duì)目標(biāo)文件連接形成可執(zhí)行程序——運(yùn)行程序得到結(jié)果——分析結(jié)果。實(shí)驗(yàn)內(nèi)容題目1最簡(jiǎn)單的C++程序按提示的操作步驟,輸入下面程序代碼,編譯連接并執(zhí)行。[實(shí)驗(yàn)提示]1、按照、1.2.5節(jié)操作步驟創(chuàng)立第一個(gè)應(yīng)用:〔1〕編輯你的第一個(gè)C++源程序〔2〕保存你的源文件〔3〕編譯、連接得到可執(zhí)行程序〔4〕改正源程序中的錯(cuò)誤〔5〕運(yùn)行你的第一個(gè)程序2、你可以有三種方式運(yùn)行你的程序:〔1〕在開(kāi)發(fā)環(huán)境中運(yùn)行程序選擇Build|Executehello.exe(或者Ctrl+F5),在開(kāi)發(fā)環(huán)境中執(zhí)行你的程序。程序運(yùn)行以后將顯示一個(gè)類似于DOS的窗口,在窗口中輸出一行“C語(yǔ)言方式的打印輸出hello!C++語(yǔ)言方式的打印輸出!〞,緊接著在下面顯示“Pressanykeytocontinue〞,這句話是系統(tǒng)提示你按任意鍵退出當(dāng)前運(yùn)行的程序,回到開(kāi)發(fā)環(huán)境中。按任意鍵,窗口關(guān)閉,退回到VisualC++開(kāi)發(fā)環(huán)境。我們實(shí)驗(yàn)中將用這種方式運(yùn)行程序?!?〕在DOS環(huán)境下運(yùn)行程序翻開(kāi)DOS窗口,改變工作路徑到工程目錄,該目錄是你在創(chuàng)立目錄時(shí)指定的。如果你不記得了,可以在DeveloperStudio中的工作區(qū)窗口中選擇工程名稱〔這里是“hellofiles〞〕,然后選擇菜單View|Properties,將可以顯示出工程路徑。切換到debug子目錄下,運(yùn)行hello.exe,程序?qū)⑤敵觯篊語(yǔ)言方式的打印輸出hello!C++語(yǔ)言方式的打印輸出!。〔3〕在Windows環(huán)境下運(yùn)行程序翻開(kāi)Windows的資源管理器,找到程序所在的目錄,運(yùn)行它。你看到的結(jié)果是怎樣的?[思考與擴(kuò)展]1、如果程序中大小寫(xiě)輸入錯(cuò)誤如main寫(xiě)成Main,結(jié)果會(huì)怎樣?2、編譯運(yùn)行通過(guò)后,本程序輸出了兩行字符串,如果還想輸出一行字符串:"it’stooeasy!"程序代碼該如何修改添加?提示:注意使用換行控制符’\n’或輸出控制符endl。題目2簡(jiǎn)單應(yīng)用—求圓柱體的體積輸入下面程序代碼,編譯運(yùn)行。[實(shí)驗(yàn)提示]按照第一題的操作步驟新建工程,輸入代碼,編譯連接,執(zhí)行程序,輸入測(cè)試數(shù)據(jù)分析結(jié)果是否正確,如有錯(cuò)誤改正后再重新編譯連接,直到?jīng)]有錯(cuò)誤為止。在輸入代碼的過(guò)程中要細(xì)心,注意中西文輸入法的區(qū)別。[測(cè)試數(shù)據(jù)]運(yùn)行時(shí)輸入:58-21[思考與擴(kuò)展]1、#definePI3.14159是符號(hào)常量,用const常量定義PI。2、如果運(yùn)行時(shí)輸入3.45程序的輸出結(jié)果是什么,正確嗎?將程序中變量radius,high改為double類型,然后輸入上面的測(cè)試數(shù)據(jù),結(jié)果怎么樣?說(shuō)明原因。3、注意輸入提示和輸出提示語(yǔ)句,嘗試修改輸入數(shù)出提示語(yǔ)句。3.2實(shí)驗(yàn)二C++程序設(shè)計(jì)初步實(shí)驗(yàn)類型:設(shè)計(jì)型實(shí)驗(yàn)2學(xué)時(shí)實(shí)驗(yàn)?zāi)康?、掌握C++程序的賦值和輸入輸出語(yǔ)句的使用方法;2、掌握C++程序控制的3種根本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的實(shí)現(xiàn);3、掌握簡(jiǎn)單C++程序的編寫(xiě)和調(diào)試知識(shí)點(diǎn)介紹1關(guān)系運(yùn)算、邏輯預(yù)算,關(guān)系表達(dá)式和邏輯表達(dá)式。2、程序的三種結(jié)構(gòu):順序、選擇和循環(huán)。3、選擇結(jié)構(gòu):if語(yǔ)句,switch語(yǔ)句的應(yīng)用。4、循環(huán)結(jié)構(gòu):while語(yǔ)句、do-while語(yǔ)句、for語(yǔ)句的應(yīng)用。實(shí)驗(yàn)內(nèi)容題目1計(jì)算員工周工資編寫(xiě)一個(gè)程序,輸入某雇員的每周工作時(shí)間〔以小時(shí)計(jì)〕和每小時(shí)的工資數(shù),計(jì)算并輸出他的工資。假設(shè)雇員周工作小時(shí)超過(guò)40小時(shí),那么超過(guò)局部按原工資的1.5倍的加班工資來(lái)計(jì)算。假設(shè)雇員每周工作小時(shí)超過(guò)60小時(shí),那么超過(guò)60的局部按原工資的3倍的加班工資來(lái)計(jì)算,而40到50小時(shí)的工資仍按照原工資的1.5倍的加班工資來(lái)計(jì)算。1、要求有輸入提示和輸出提示,如要輸入雇員的工作時(shí)間和每小時(shí)的工資值時(shí),可以提示:“Pleaseinputemployee’sworktimeandwage_per_hour:〞輸出時(shí),提示:“Theemployee’swage:〞。2、給你的程序加上注釋,并注意排版格式,使得其清晰可讀。[實(shí)驗(yàn)提示]1、從本次實(shí)驗(yàn)開(kāi)始,我們開(kāi)始編寫(xiě)稍微復(fù)雜的程序,涉及到一些簡(jiǎn)單的算法,請(qǐng)務(wù)必按實(shí)驗(yàn)要求養(yǎng)成良好編程的習(xí)慣,再次強(qiáng)調(diào):代碼要寫(xiě)整齊,注意排板標(biāo)準(zhǔn),請(qǐng)?jiān)俅巫屑?xì)研讀附錄〈〈編程標(biāo)準(zhǔn)〉〉。給你的變量起個(gè)好名字,不要什么變量都用a,b,c…等,變量最好用英文單詞或單詞的縮寫(xiě)命名,變量名字要表達(dá)變量在程序的含義和作用。要有必要的注釋!!,養(yǎng)成這一良好的習(xí)慣很重要,請(qǐng)記住,“代碼只被書(shū)寫(xiě)一次,而它被修改和閱讀的次數(shù)可能是無(wú)限的〞[測(cè)試數(shù)據(jù)]輸入:304輸入:454.5輸入:605[思考與擴(kuò)展]1、嘗試分別用if和switch語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)語(yǔ)句2、如果程序運(yùn)行時(shí)循環(huán)輸入并給出計(jì)算結(jié)果,并當(dāng)當(dāng)用戶輸入0時(shí)程序結(jié)束,程序該如何修改?3、測(cè)試數(shù)據(jù)的選擇應(yīng)該考慮選擇結(jié)構(gòu)中的每一種情況都被執(zhí)行一次,也就是選擇的測(cè)試數(shù)據(jù)應(yīng)該具有代表性,對(duì)此題來(lái)說(shuō),選擇的數(shù)據(jù)因該分幾種情況:1〕小于40的數(shù)據(jù)2〕大于40而小于50的數(shù)據(jù)3〕大于50的數(shù)據(jù)4〕不合理的數(shù)據(jù)比方負(fù)數(shù)或大于7*24數(shù),〔注意一周最多只有7*24小時(shí)〕設(shè)計(jì)一組你的測(cè)試數(shù)據(jù)。題目2計(jì)算生日時(shí)星期幾編寫(xiě)一個(gè)程序,只要輸入年月日,就能答復(fù)那天是星期幾。[實(shí)驗(yàn)提示]1、公元1年1月1日是星期一2、算法提示:如果輸入的是2006年3(1)先計(jì)算從公元0001年初〔0001-1-1〕到2005年末(2005-12-31)共多少天,注意其中有閏年,閏年是366天,平年是365天。閏年的判斷條件滿足(見(jiàn)教材例3.4題):((year%4==0&&year%100!=0)!!(year%400==0))(2)然后再計(jì)算2006年1月1日到即二月份是28天還是29天。(3)上述兩局部相加即從公元0001年初〔0001-1-1〕到2006年末(2006-3-12)的天數(shù),用該天數(shù)模7〔total%7〕即得到星期數(shù)。2、用戶屢次循環(huán)輸入數(shù)據(jù)并計(jì)算可采用while語(yǔ)句實(shí)現(xiàn)://首先輸入三個(gè)數(shù)據(jù):cout<<"pleaseenteryearmonthday:"cin>>year>>month>>day;//首先輸入三個(gè)數(shù):年月日while(year!=0&&month!=0&&month!=0){……//具體計(jì)算語(yǔ)句//本次循環(huán)結(jié)束前再次輸入三個(gè)數(shù)據(jù)〔年月日〕,為下次循環(huán)計(jì)算做準(zhǔn)備cout<<"pleaseenteryearmonthday:"cin>>year>>month>>day;}[測(cè)試數(shù)據(jù)]1、1年1月1日是星期一2、2年1月1日是星期二3、用上機(jī)日期4、2000年1[思考與擴(kuò)展]1、用switch語(yǔ)句實(shí)現(xiàn)程序。比擬if和switch語(yǔ)句的區(qū)別。2、對(duì)輸入日期和理性檢驗(yàn),例如月份不能大于12,非閏年不得有2月29日,小月不得有4月31日3.3實(shí)驗(yàn)三函數(shù)與程序結(jié)構(gòu)實(shí)驗(yàn)類型:驗(yàn)證型實(shí)驗(yàn)2學(xué)時(shí)實(shí)驗(yàn)?zāi)康?、掌握函數(shù)聲明、定義和使用的方法;2、掌握函數(shù)遞歸調(diào)用的方法;3、掌握全局變量、局部變量、靜態(tài)局部變量的概念和使用方法;4、掌握定義頭文件的方法,學(xué)會(huì)建立和調(diào)試多文件程序;5、學(xué)習(xí)函數(shù)重載的實(shí)現(xiàn);知識(shí)點(diǎn)介紹1、一個(gè)函數(shù)就是一個(gè)功能,在面向過(guò)程的結(jié)構(gòu)化程序設(shè)計(jì)中,函數(shù)是程序的根本模塊。2、函數(shù)的定義:類型函數(shù)名〔參數(shù)表〕{}。3、函數(shù)調(diào)用過(guò)程:程序先執(zhí)行函數(shù)調(diào)用之前的語(yǔ)句,流程的控制轉(zhuǎn)移到被調(diào)函數(shù)入口處,同時(shí)進(jìn)行參數(shù)傳遞;執(zhí)行被調(diào)函數(shù)種函數(shù)體的語(yǔ)句;流程返回調(diào)用函數(shù)的下一條指令處,將函數(shù)的返回值帶回;接著執(zhí)行主調(diào)函數(shù)中未執(zhí)行的語(yǔ)句。4、函數(shù)的嵌套調(diào)用:被調(diào)函數(shù)中又調(diào)用另一個(gè)函數(shù)。5、函數(shù)的遞歸調(diào)用:一個(gè)函數(shù)直接或間接的調(diào)用自己,在實(shí)現(xiàn)遞歸時(shí),再時(shí)間和空間上的開(kāi)銷比擬大,但遞歸調(diào)用符合人們的思維,程序容易理解。6、變量的作用域:全局變量和局部變量變量的生存期:動(dòng)態(tài)存儲(chǔ)期,靜態(tài)存儲(chǔ)期變量存儲(chǔ)位置:內(nèi)存中的靜態(tài)區(qū),內(nèi)存中的動(dòng)態(tài)區(qū)。存放器存儲(chǔ)。實(shí)驗(yàn)內(nèi)容題目1分析程序運(yùn)行結(jié)果輸入以下程序,運(yùn)行它,分析得到的結(jié)果。要求:1、閱讀分析程序,給程序加上必要的注釋2、分析何以得出運(yùn)行結(jié)果的原因3、區(qū)分程序中那些是全局變量、局部變量、局部靜態(tài)變量?這些變量的差異是什么?4、說(shuō)明函數(shù)調(diào)用時(shí)實(shí)參和形參對(duì)應(yīng)關(guān)系及值傳遞方式?[實(shí)驗(yàn)提示]運(yùn)行時(shí)在程序中設(shè)置斷點(diǎn)調(diào)試,觀察各個(gè)變量值的變化以及函數(shù)的調(diào)用過(guò)程。1、設(shè)置斷點(diǎn)調(diào)試你的程序觀察函數(shù)調(diào)用的執(zhí)行流程。具體做法是在函數(shù)調(diào)用語(yǔ)句處設(shè)置斷點(diǎn),再在該被調(diào)函數(shù)的函數(shù)體語(yǔ)句局部設(shè)置斷點(diǎn)。2、單步執(zhí)行程序,觀察程序的執(zhí)行流程:函數(shù)調(diào)用時(shí)實(shí)參和形參的結(jié)合情況;程序從main函數(shù)轉(zhuǎn)移到被調(diào)函數(shù)代碼執(zhí)行的及返回的流程,注意觀察形參變量值的變化及形參變量的生存期。設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試參見(jiàn)1.5VisualC++6.0調(diào)試工具使用[測(cè)試數(shù)據(jù)]改變main()函數(shù)中a的值令a=10,改變func()函數(shù)中b的值令staticintb=10;程序運(yùn)行結(jié)果?[思考與擴(kuò)展]1、將函數(shù)func〔〕中的變量staticintb=10;改為intb,程序運(yùn)行結(jié)果有什么變化。2、如果將main〔〕函數(shù)中定義變量的語(yǔ)句inta,b;移到程序第三行?程序運(yùn)行結(jié)果有沒(méi)有變化,為什么。題目2函數(shù)的遞歸調(diào)用和多文件結(jié)構(gòu)編寫(xiě)一個(gè)函數(shù),求從n個(gè)不同的數(shù)中取r個(gè)數(shù)的所有選擇的個(gè)數(shù)。其個(gè)數(shù)值為:其中:n!=n*(n-1)*(n-2)*...*1。1、根本要求:主程序中設(shè)計(jì)一個(gè)循環(huán),不斷從輸入接收n和r的值,計(jì)算結(jié)果并輸出,當(dāng)用戶輸入00時(shí),程序結(jié)束;能檢查輸入數(shù)據(jù)的合法性,要求n>=1并且n>=r;2、分別用遞歸和非遞歸兩種方式完成程序設(shè)計(jì);3、多文件結(jié)構(gòu)實(shí)現(xiàn)將上面用非遞歸方式寫(xiě)成的程序改成用多文件結(jié)構(gòu)表示。要求將main()函數(shù)放在一個(gè)文件中,將另外兩個(gè)函數(shù)定義放在另一個(gè)C++源文件中,將兩個(gè)函數(shù)原型申明放在一個(gè)C++頭文件中。建立一個(gè)工程,將這三個(gè)文件加到你的工程中,編譯連接使你的程序正常運(yùn)行。[測(cè)試數(shù)據(jù)]:輸入:53輸入:1020輸入:-14輸入:503輸入:00[實(shí)驗(yàn)提示]1、利用一個(gè)非遞歸函數(shù)fn(intn)計(jì)算n!,利用另一個(gè)函數(shù)Cnr(intn,intr)計(jì)算Cnr,在該函數(shù)中調(diào)用fn(),問(wèn)題:你打算用什么樣的變量類型來(lái)存放n!函數(shù)返回的值?注意各種數(shù)據(jù)類型的內(nèi)存字長(zhǎng)不同,整數(shù)能存放的數(shù)據(jù)范圍有限,你如何解決?可以用double數(shù)據(jù)類型來(lái)存放函數(shù)的計(jì)算結(jié)果2、利用一個(gè)遞歸函數(shù)實(shí)現(xiàn),利用公式實(shí)現(xiàn)遞歸:C(n,r)=C(n,r-1)*(n–r+1)/r注意遞歸結(jié)束條件:如果r=0,那么C(n,r)=1如果r=1,那么C(n,r)=n3、文件實(shí)現(xiàn)步驟:新建一個(gè)工程,命名為“multifile〞用File|New創(chuàng)立一個(gè)新的〞C++SourceFile〞,命名為main.cpp用File|New創(chuàng)立一個(gè)新的〞C++SourceFile〞,命名為func.cpp用File|New創(chuàng)立一個(gè)新的〞C/C++HeaderFile〞,命名為func.h用File|Open翻開(kāi)你前面實(shí)驗(yàn)中用非遞歸方式求C(n,r)的C++源程序文件,將其中的主函數(shù)局部拷貝到main.cpp中,將其中的兩個(gè)函數(shù)實(shí)現(xiàn)放到func.cpp中,再將兩個(gè)函數(shù)的原型寫(xiě)到func.h中在main.cpp中包含進(jìn)頭文件:#include“func.h〞編譯連接該工程,運(yùn)行它。你得到的結(jié)果應(yīng)該和上一個(gè)實(shí)驗(yàn)一樣。[思考與擴(kuò)展]1、設(shè)置斷點(diǎn)觀察函數(shù)的遞歸調(diào)用和嵌套調(diào)用的執(zhí)行流程。2、遞歸函數(shù)的書(shū)寫(xiě)要點(diǎn)是什么?3、在遞歸版本中,當(dāng)n大到什么值時(shí)系統(tǒng)將發(fā)生棧溢出報(bào)錯(cuò)?你覺(jué)得遞歸和非遞歸函數(shù)哪種好些?,4、多文件結(jié)構(gòu)中頭文件的作用是什么?5、將程序劃分為多個(gè)文件有什么好處?題目3條件編譯輸入一個(gè)字母字符,設(shè)置條件編譯,使之能根據(jù)需要將小寫(xiě)字母改為大寫(xiě)字母輸出或?qū)⑿?xiě)字母改為大寫(xiě)字母輸出。要求:用兩種形式的條件編譯命令實(shí)現(xiàn)即:1#ifdef標(biāo)識(shí)符2#if表達(dá)式程序段1程序段1#else#else程序段2程序段2#endif#endif[實(shí)驗(yàn)提示]1、字母大小寫(xiě)轉(zhuǎn)換大寫(xiě)轉(zhuǎn)小寫(xiě):if(c>='a'&&c<='z'){c=c-32;}小寫(xiě)轉(zhuǎn)大寫(xiě):if(c>='A'&&c<='Z'){c=c+32;}2、條件編譯程序段1和程序段2分別為大寫(xiě)轉(zhuǎn)小寫(xiě)、小寫(xiě)轉(zhuǎn)大寫(xiě)語(yǔ)句。3、采用第一種形式時(shí)必須定義一個(gè)標(biāo)識(shí)符如#defineLETTER,采用第二種形式時(shí)可以定義一個(gè)符號(hào)常量如:#defineLETTER1或是使用程序中的表達(dá)式。[測(cè)試數(shù)據(jù)]1、對(duì)一種形式測(cè)試:分別在有標(biāo)識(shí)符和注釋掉程序中的標(biāo)識(shí)符定義兩種情況下編譯運(yùn)行。2、對(duì)第二種形式測(cè)試:分別使表達(dá)式的值為0和非0兩種情況下編譯運(yùn)行。[思考和擴(kuò)展]1、采用條件編譯有什么好處,舉例說(shuō)明?3.4實(shí)驗(yàn)四類和對(duì)象3.4.1實(shí)驗(yàn)類型:驗(yàn)證型實(shí)驗(yàn)23.4.21、掌握類的概念以及定義類的方法;2、掌握類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的概念和使用方法;3、掌握對(duì)象數(shù)組、對(duì)象指針的定義和使用方法;4、學(xué)習(xí)友元的概念和定義使用方法;5、學(xué)習(xí)簡(jiǎn)單面向?qū)ο蟪绦虻木帉?xiě);3.4.31、類的定義方法:class類名稱{public:公有成員〔外部接口〕private:私有成員protected:保護(hù)型成員};2、訪問(wèn)對(duì)象中的成員可以有3種方法:通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員;通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員;通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員;3、構(gòu)造函數(shù)(constructor)來(lái)處理對(duì)象的初始化。構(gòu)造函數(shù)是一種特殊的成員函數(shù),不需要用戶來(lái)調(diào)用它,而是在建立對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字必須與類名同名,編譯系統(tǒng)能識(shí)別它并把它作為構(gòu)造函數(shù)處理。它不具有任何類型,不返回任何值。構(gòu)造函數(shù)的功能是由用戶定義的,用戶根據(jù)初始化的要求設(shè)計(jì)函數(shù)體和函數(shù)參數(shù)。如果用戶自己沒(méi)有定義構(gòu)造函數(shù),那么C++系統(tǒng)會(huì)自動(dòng)生成一個(gè)構(gòu)造函數(shù),只是這個(gè)構(gòu)造函數(shù)的函數(shù)體是空的,也沒(méi)有參數(shù),不執(zhí)行初始化操作。用戶可以自定義帶參數(shù)的構(gòu)造函數(shù)構(gòu)造函數(shù)首部的一般格式為構(gòu)造函數(shù)名(類型1形參1,類型2形參2,…)實(shí)參是在定義對(duì)象時(shí)給出的。4、構(gòu)造函數(shù)的重載:在一個(gè)類中可以定義多個(gè)構(gòu)造函數(shù),以便對(duì)類對(duì)象提供不同的初始化的方法,供用戶選用。這些構(gòu)造函數(shù)具有相同的名字,而參數(shù)的個(gè)數(shù)或參數(shù)的類型不相同。盡管在一個(gè)類中可以包含多個(gè)構(gòu)造函數(shù),但是對(duì)于每一個(gè)對(duì)象來(lái)說(shuō),建立對(duì)象時(shí)只執(zhí)行其中一個(gè)構(gòu)造函數(shù),并非每個(gè)構(gòu)造函數(shù)都被執(zhí)行。5析構(gòu)函數(shù)(destructor)是一個(gè)特殊的成員函數(shù),它的作用與構(gòu)造函數(shù)相反,它的名字是類名的前面加一個(gè)“~〞符號(hào)。當(dāng)對(duì)象的生命期結(jié)束時(shí),會(huì)自動(dòng)執(zhí)行析構(gòu)函數(shù):①如果在一個(gè)函數(shù)中定義了一個(gè)對(duì)象(它是自動(dòng)局部對(duì)象),當(dāng)這個(gè)函數(shù)被調(diào)用結(jié)束時(shí),對(duì)象應(yīng)該釋放,在對(duì)象釋放前自動(dòng)執(zhí)行析構(gòu)函數(shù)。②static局部對(duì)象在main函數(shù)結(jié)束或調(diào)用exit函數(shù)結(jié)束程序時(shí),才調(diào)用static局部對(duì)象的析構(gòu)函數(shù)。③如果定義了一個(gè)全局對(duì)象,那么在程序的流程離開(kāi)其作用域時(shí)(如main函數(shù)結(jié)束或調(diào)用exit函數(shù))時(shí),調(diào)用該全局對(duì)象的析構(gòu)函數(shù)。④如果用new運(yùn)算符動(dòng)態(tài)地建立了一個(gè)對(duì)象,當(dāng)用delete運(yùn)算符釋放該對(duì)象時(shí),先調(diào)用該對(duì)象的析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用并不是刪除對(duì)象,而是在撤銷對(duì)象占用的內(nèi)存之前完成一些清理工作,使這局部?jī)?nèi)存可以被程序分配給新對(duì)象使用。程序設(shè)計(jì)者事先設(shè)計(jì)好析構(gòu)函數(shù),以完成所需的功能,只要對(duì)象的生命期結(jié)束,程序就自動(dòng)執(zhí)行析構(gòu)函數(shù)來(lái)完成這些工作。析構(gòu)函數(shù)不返回任何值,沒(méi)有函數(shù)類型,也沒(méi)有函數(shù)參數(shù)。因此它不能被重載。一個(gè)類可以有多個(gè)構(gòu)造函數(shù),但只能有一個(gè)析構(gòu)函數(shù)析構(gòu)函數(shù)的作用并不僅限于釋放資源方面,它還可以被用來(lái)執(zhí)行“用戶希望在最后一次使用對(duì)象之后所執(zhí)行的任何操作〞,如果用戶沒(méi)有定義析構(gòu)函數(shù),C++編譯系統(tǒng)會(huì)自動(dòng)生成一個(gè)析構(gòu)函數(shù),但它只是徒有析構(gòu)函數(shù)的名稱和形式,實(shí)際上什么操作都不進(jìn)行。6、對(duì)象數(shù)組:不僅可以由簡(jiǎn)單變量組成(例如整型數(shù)組的每一個(gè)元素都是整型變量),也可以由對(duì)象組成(對(duì)象數(shù)組的每一個(gè)元素都是同類的對(duì)象)。5、定義指向類對(duì)象的指針變量的一般形式為:類名*對(duì)象指針名;6、This指針:在每一個(gè)成員函數(shù)中都包含一個(gè)特殊的指針,這個(gè)指針的名字是固定的,稱為this。它是指向本類對(duì)象的指針,它的值是當(dāng)前被調(diào)用的成員函數(shù)所在的對(duì)象的起始地址。this指針是隱式使用的,它是作為參數(shù)被傳遞給成員函數(shù)的。7、友元可以訪問(wèn)與其有好友關(guān)系的類中的私有成員。友元包括友元函數(shù)和友元類。在類體中用friend對(duì)類以外函數(shù)進(jìn)行聲明,此函數(shù)就稱為本類的友元函數(shù)。友元函數(shù)可以訪問(wèn)這個(gè)類中的私有成員。友元成員函數(shù)friend函數(shù)不僅可以是一般函數(shù)(非成員函數(shù)),而且可以是另一個(gè)類中的成員函數(shù)。一個(gè)函數(shù)(包括普通函數(shù)和成員函數(shù))可以被多個(gè)類聲明為“朋友〞,這樣就可以引用多個(gè)類中的私有數(shù)據(jù)在A類的定義體中用以下語(yǔ)句聲明B類為其友元類:friendB;這時(shí)B類就是A類的友元類。友元類B中的所有函數(shù)都是A類的友元函數(shù),可以訪問(wèn)A類中的所有成員。關(guān)于友元,有兩點(diǎn)需要說(shuō)明:(1)友元的關(guān)系是單向的而不是雙向的。(2)友元的關(guān)系不能傳遞。3.4.4題目1圖形類設(shè)計(jì)設(shè)計(jì)三個(gè)圖形類:Circle〔圓〕、Rectangle〔矩形〕、Triangle〔三角形〕;1、Cirlce類根本信息:圓心坐標(biāo)、半徑;Rectangle類根本信息:長(zhǎng)、寬;Triangle類根本信息:三個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 我的媽媽課件分享
- 2025遼陽(yáng)職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2025蘇州幼兒師范高等??茖W(xué)校輔導(dǎo)員考試試題及答案
- 2025甘肅交通職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 媽媽生日慶?;顒?dòng)策劃方案
- 網(wǎng)絡(luò)工程畢業(yè)設(shè)計(jì)
- 創(chuàng)意寫(xiě)作考試試卷及答案2025年
- 基礎(chǔ)醫(yī)學(xué)與健康知識(shí)2025年考試試卷及答案
- T/XZY 017-2019金融理財(cái)師崗位能力測(cè)評(píng)與考核要求
- 2025年外語(yǔ)翻譯專業(yè)技能測(cè)試考試試卷及答案
- 第七講-氣流干燥系統(tǒng)設(shè)計(jì)特點(diǎn)
- 錨桿(土釘)鉆孔施工記錄
- 水陸兩用挖掘機(jī)安全操作保養(yǎng)規(guī)程
- 橡塑保溫管施工方案
- 人力資源管理學(xué)習(xí)通章節(jié)答案期末考試題庫(kù)2023年
- 貴州省醫(yī)療服務(wù)項(xiàng)目收費(fèi)標(biāo)準(zhǔn)
- 病原學(xué)標(biāo)本采集與送檢規(guī)范
- 黑河學(xué)院輔導(dǎo)員考試題庫(kù)
- 抖音運(yùn)營(yíng)工作計(jì)劃模版(3篇)
- 顯微鏡望遠(yuǎn)鏡的設(shè)計(jì)與組裝
- 中石油職稱英語(yǔ)通用教材
評(píng)論
0/150
提交評(píng)論