版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《程序設(shè)計(jì)C》
實(shí)驗(yàn)指導(dǎo)書西南科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2010年我們寫的不是程序,而笑袤莫。目錄TOC\o"1-5"\h\z\o"CurrentDocument"第——章C實(shí)驗(yàn)基礎(chǔ)知識(shí) 4C語言實(shí)驗(yàn)環(huán)境配置 4VisualC++6.0的使用 4VisualC++介紹 4VisualC++的安裝和啟動(dòng) 4常用功能鍵及其意義 5輸入和編輯源程序 6編譯、連接和運(yùn)行 9建立和運(yùn)行包含多個(gè)文件的程序的方法 14VisualC++6,0工程相關(guān)文件介紹 20VisualC++6.0錯(cuò)誤信息 21程序錯(cuò)誤的類型 21錯(cuò)誤信息的查詢 22VisualC++6.0調(diào)試工具使用 23設(shè)置工程的調(diào)試屬性 23學(xué)習(xí)設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試 24程序調(diào)試的一般方法 27在線實(shí)、驗(yàn)系統(tǒng)(OnlineJudge)的使用 291.6.3OJ常見問題及解答 33\o"CurrentDocument"第二章C實(shí)驗(yàn)要求 36實(shí)驗(yàn)的意義和目的 36馬僉^段總、彳本 36實(shí)驗(yàn)內(nèi)容總體安排 36實(shí)驗(yàn)前的準(zhǔn)備工作 37上機(jī)實(shí)驗(yàn)步學(xué) 37代碼測試要求 38實(shí)驗(yàn)報(bào)告編寫 38實(shí)驗(yàn)數(shù)據(jù)提交 38實(shí)驗(yàn)參考資料 39成績考核 39平時(shí)過程考核 39實(shí)驗(yàn)成績評(píng)定 39\o"CurrentDocument"第三章實(shí)驗(yàn)內(nèi)容與指導(dǎo) 41實(shí)驗(yàn)一C程序設(shè)計(jì)初步 41實(shí)驗(yàn)類型:驗(yàn)證型實(shí)驗(yàn)2學(xué)時(shí) 41知扁點(diǎn)介紹 41實(shí)驗(yàn)內(nèi)容 42題目1最簡單的C程序(ID:612) 42題目2數(shù)字轉(zhuǎn)換成字符(ID:613) 43題目3簡單應(yīng)用一求圓柱體的體積(ID:614) 45實(shí)驗(yàn)二C程序基本結(jié)構(gòu)設(shè)計(jì) 46實(shí)驗(yàn)類型:設(shè)計(jì)型實(shí)驗(yàn)2學(xué)時(shí) 46Ml點(diǎn)介紹 46實(shí)驗(yàn)內(nèi)容 47題目1計(jì)算員工周工資(ID:77) 47題目3計(jì)算生日時(shí)星期幾(ID:78) 50題目4簡單計(jì)算器(ID:276) 52題目5統(tǒng)計(jì)二進(jìn)制數(shù)中的1的個(gè)數(shù)(ID:277) 54題目6計(jì)分規(guī)則(ID:278) 54題目7人數(shù)統(tǒng)計(jì)(ID:279) 55實(shí)驗(yàn)三函數(shù) 56實(shí)驗(yàn)類型:設(shè)計(jì)型4學(xué)時(shí) 56盛點(diǎn)介紹 56實(shí)驗(yàn)內(nèi)容 56題目1 分析程序運(yùn)行結(jié)果 56題目2局部變量和子函數(shù)的運(yùn)用(ID:615) 58題目3 函數(shù)的遞歸調(diào)用(ID:321) 58題目4 求組合數(shù)(ID:82) 60題目5 平方和(ID:299) 60題目6 核反應(yīng)堆(ID:280) 61題目7 方程式(ID:300) 62題目8 逃跑的蠕蟲(ID:281) 62題目9 數(shù)字的秘密(ID:282) 63題目10水仙花數(shù)(1D:31) 64實(shí)驗(yàn)四數(shù)組 : 66實(shí)驗(yàn)類型:設(shè)計(jì)型實(shí)驗(yàn)6學(xué)時(shí) 66知識(shí)點(diǎn)介紹 66實(shí)驗(yàn)內(nèi)容 66題目1排序查找(ID:616) 67題目2矩陣相乘(ID:74) 68題目3字符串交叉插入(ID:557) 70題目4數(shù)字根的計(jì)算(ID:284) 70題目5求二階逆矩陣(ID:285) 71題目6特殊矩陣的查找(ID:286) 72題目7 one+two=3(ID:287) 73題目8統(tǒng)計(jì)出現(xiàn)最多次的字母(ID:288) 73題目9消滅老鼠(ID;289) 74題目10 簡單的數(shù)學(xué)問題(ID: 290) 75題目11 跑跑卡丁車(ID:544) 76題目12 老鼠與貓的交易(ID: 291) 77題目13 電路分析(ID:441) 78題目14 堆棧與簡單語法檢查 79實(shí)驗(yàn)五指針 80實(shí)驗(yàn)類型:設(shè)計(jì)型實(shí)驗(yàn)6學(xué)時(shí) 80實(shí)驗(yàn)?zāi)康?80知識(shí)點(diǎn)介紹 80實(shí)驗(yàn)內(nèi)容 80題目2班級(jí)課程成績計(jì)算(ID:617) 82題目3排序查找(ID:623) 84題目4 設(shè)計(jì)密碼(ID:292) 85題目5 一維動(dòng)態(tài)數(shù)組的應(yīng)用(ID:293) 86題目6 二維動(dòng)態(tài)數(shù)組轉(zhuǎn)置(ID: 294) 87我目7 ?物產(chǎn)單(ID:295) 88實(shí)驗(yàn)六結(jié)構(gòu)體 91實(shí)驗(yàn)類型:設(shè)計(jì)型實(shí)驗(yàn)4學(xué)時(shí) 91實(shí)驗(yàn)?zāi)康?91知識(shí)點(diǎn)介紹 91實(shí)驗(yàn)內(nèi)容 91題目1 日期計(jì)算(ID:66) 91題目2 學(xué)生成績管理(ID:67) 92題目3 結(jié)構(gòu)體鏈表 95題目4 學(xué)生結(jié)構(gòu)體鏈表(ID:68) 96題目5 偷菜時(shí)間表(ID:69) 97題目6 塑身菜單(ID:70) 98實(shí)驗(yàn)七大作業(yè) 99實(shí)驗(yàn)類型:綜合設(shè)計(jì)型實(shí)驗(yàn)8學(xué)時(shí) 99實(shí)驗(yàn)?zāi)康?99知識(shí)點(diǎn)介紹及實(shí)驗(yàn)要求 100實(shí)驗(yàn)內(nèi)容 101題目1鄉(xiāng)村救濟(jì)物資發(fā)放信息管理系統(tǒng) 101題目2救災(zāi)帳篷信息管理系統(tǒng) 102題目3醫(yī)院各科室患者藥品消耗信息管理系統(tǒng) 103\o"CurrentDocument"附錄 105A.實(shí)驗(yàn)報(bào)告格式 105B.程序常見錯(cuò)誤分析 108第一章C實(shí)驗(yàn)基礎(chǔ)知識(shí)1.1c語言實(shí)驗(yàn)環(huán)境配置c語言實(shí)驗(yàn)環(huán)境配置要求硬件配置:586以上PC兼容機(jī)或品牌機(jī),配有彩色顯示器、鼠標(biāo)、鍵盤,內(nèi)存不小于1GB,硬盤自由空間2GB以上。軟件配置:1、操作系統(tǒng):Windows98.windows2000,windowsXP2、集成開發(fā)環(huán)境:(1)在Windows98.windows2000,windowsXP系統(tǒng)下,主要的開發(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)書使用的開發(fā)環(huán)境為MicrosoftVisualC++6.0英文版(有計(jì)算機(jī)的學(xué)生可以安裝VS2005或以上版本。(2)在Linux、UNIX系統(tǒng)下,采用GCC編譯環(huán)境。本實(shí)驗(yàn)指導(dǎo)書不涉及相關(guān)內(nèi)容,有興趣的學(xué)生可以自行學(xué)習(xí)。提示:傳統(tǒng)C語言編譯工具,存在著或多或少的缺陷。為以后更好的過渡到Windows平臺(tái)編程,本教材選用VC++6作為C語言的編譯工具,。VisualC++6.0的使用VisualC++介紹VisualC++是Microsoft公司的VisualStudio開發(fā)工具箱中的一個(gè)C++程序開發(fā)包。VisualStudio提供了一整套開發(fā)Internet和Windows應(yīng)用程序的工具,包括VisualC++.VisualBasic.VisualFoxPro.VisualInterDev.VisualJ++以及其他輔助工具,如代碼管理工具VisualSourceSafe和聯(lián)機(jī)幫助系統(tǒng)MSDN。VisualC++包中除包括C++編譯器外,還包括所有的庫、例子和為創(chuàng)建Windows應(yīng)用程序所需要的文檔。從最早期的L0版本發(fā)展6.0版本,到最新的.NET版本,VisualC++已經(jīng)有了很大的變化,在界面、功能、庫支持方面都有許多的增強(qiáng)。6.0版本在編譯器、MFC類庫、編輯器以及聯(lián)機(jī)幫助系統(tǒng)等方面都比以前的版本做了較大改進(jìn)。VisualC++一般分為三個(gè)版本:學(xué)習(xí)版、專業(yè)版和企業(yè)版,不同的版本適合于不同類型的應(yīng)用開發(fā)。實(shí)驗(yàn)中可以使用這三個(gè)版本的任意一種。VisualC++的安裝和啟動(dòng)如果你的計(jì)算機(jī)未安裝VisualC++6.0,則應(yīng)先安裝VisualC++6.0。VisualC++是VisualStudio的一部分,因此需要VisualStudio的光盤,執(zhí)行其中的setup.exe,并按屏幕上的提示安裝即可。安轉(zhuǎn)完畢后,在Windows的“開始”菜單的程序子菜單中會(huì)出現(xiàn)“MicrosoftvisualStudio"子菜單,如圖1-1所示圖1-1MicrosoftvisualStudio啟動(dòng)子菜單在需要使用VisualC++時(shí),只需從桌面上順序選擇“開始”程序“MicrosoftvisualStudio"VisualC++6.0命令即可,此時(shí)屏幕上在短暫顯示VisualC++6.0的版權(quán)頁面后,出現(xiàn)VisualC++6.0的由窗口、工具條、菜單、工具及其他部分組成的一個(gè)主界面。通過這個(gè)界面,用戶可以創(chuàng)建、測試、調(diào)試應(yīng)用程序。如圖1-2:??3_6-MicrosoftVisualC-t-±菜單gElfeEditYawInsertBro^^guikllools在rxfow文本編輯窗-lolxl由 電匕?㈤^^[MessageBoxP-6|(Globals)三](Win32Debug||(AIIglobalmemben<||.main?刊濟(jì)仃FW??3_6-MicrosoftVisualC-t-±菜單gElfeEditYawInsertBro^^guikllools在rxfow文本編輯窗-lolxl由 電匕?㈤^^[MessageBoxP-6|(Globals)三](Win32Debug||(AIIglobalmemben<||.main?刊濟(jì)仃FW-IfflXIJ2*1R竺rkspace:3_6,:1贏-gf36fHes]出3.6.q)pcout<<**plraseentera.b.c:cin>>?>>b>>c;if((a?b>c)U3c>a)&&(c?4>b))工作區(qū)窗口doubles.are4;sa(a*b?c)/2area-$qrt(s*(s-a)?($-b)?(s-c));〃復(fù)合信句開始〃在復(fù)合借句內(nèi)定義變量?I _I 2J■2ClassV...]gFlleView「elseIhU?廠cout<<setiosfl4gs(ios::fixed)?setprecision(M);〃指工知土£?—cout?*,area-°?area?endl; 〃在復(fù)合語白內(nèi)給出〃復(fù)合t樹結(jié)束F:\llti\3_6.cpp(1S):errorC21M:syntaxerror:nissingbeforeidentifier,arei'Errorexecutingcl.exe.CreatingbroirsrinFoFile...l_i.exe-1error(s),0warning(s)35KBulldXDebug\FindInFiles1\FindinFlies2\R4<J]Ready圖1-2VisualC++6.0界面常用功能鍵及其意義為了使程序員能夠方便快捷地完成程序開發(fā),開發(fā)環(huán)境提供了大量快捷方式來簡化一些常用操作的步驟。鍵盤操作直接、簡單,而且非常方便,因而程序員非常喜歡采用鍵盤命令來控制操作。下面是一些最常用的功能鍵,希望在實(shí)驗(yàn)中逐步掌握。操作類型功能鍵對(duì)應(yīng)菜單含義文件操作Ctrl+NFile|New創(chuàng)建新的文件、項(xiàng)目等Ctrl+OFile|Open打開項(xiàng)目、文件等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|SelectAll全選DelEdit|Del刪除光標(biāo)后面的一個(gè)字符
建立程序操作CtrRF7Build|Compilercurrentfile編譯當(dāng)前源文件Ctrl+F5Build|Runexe運(yùn)行當(dāng)前項(xiàng)目F7Build|Buildexe建立可執(zhí)行程序F5Build|StartDebugging啟動(dòng)調(diào)試程序調(diào)試F5Debug|Go繼續(xù)運(yùn)行FilDebug|Stepinto進(jìn)入函數(shù)體內(nèi)部shift+FllDebug|Stepout從函數(shù)體內(nèi)部運(yùn)行出來F10Debug|Stepover執(zhí)行一行語句F9設(shè)置/清除斷點(diǎn)Ctrl+FlODebug|Runtocursor運(yùn)行到光標(biāo)所在位置shift+F9Debug|QuickWatch快速查看變量或表達(dá)式的值Shift+F5Debug|Stopdebugging停止調(diào)試注:這些快捷鍵命令都有對(duì)應(yīng)的菜單和工具條按鈕,如圖1-3:圖1-3 快捷鍵命令菜單與按鈕輸入和編輯源程序先介紹最簡單的情況,即程序只由一個(gè)源程序文件組成,即單文件程序(有關(guān)對(duì)多文件程序的操作在本章的稍后介紹)。1、新建一個(gè)c源程序的方法如果要新建一個(gè)C源程序,可采取以下的步驟:在VisualC++主窗口的主菜單欄中選擇File(文件)命令,然后選擇New(新建)命令,如圖1-4。
圖1-4選擇File菜單中的New操作展幕上出現(xiàn)一個(gè)New(新建)對(duì)話框,單擊此對(duì)話框的上方的Files(文件)屬性頁,在列表中選擇“C++SourceFile”項(xiàng),表示要建立新的C++源程序文件,然后在對(duì)話框右半部分的Location(目錄)文本框中輸入準(zhǔn)備編輯的源程序文件的存儲(chǔ)路徑(要求路徑輸入格式D:\專業(yè)班級(jí)-學(xué)號(hào)-姓名'實(shí)驗(yàn)序號(hào)),例如輸入信息為:D:\計(jì)算張三'實(shí)驗(yàn)一,表示準(zhǔn)備編輯的源程序文件將存放在“D:\計(jì)算張三'實(shí)驗(yàn)一”目錄下。在其上方的File(文件)文本框中輸入準(zhǔn)備編輯的源程序文件的名字(輸入MyFirstC),如圖1-5.特別提醒:C語言源程序的后綴名應(yīng)該為.C。使用VC++6建立的文件后綴名為.cpp,即為C++的源程序。C++完全兼容C。圖1-5圖1-5創(chuàng)建一個(gè)C++源文件這樣,即將進(jìn)行輸入和編輯的源程序就以MyFirstC.cpp為文件名存放在D盤的“\計(jì)算張三'實(shí)驗(yàn)一”目錄下,如圖1-6。當(dāng)然,讀者完全可以指定其他路徑名和文件名。Q后退,—?一|/搜索gj文件夾]£地址Q)|二D八計(jì)算張三\實(shí)驗(yàn)一|c旗~圖1-6C++文件建立成功在單擊OK按鈕后,回到VisualC++主窗口,由于在前面已指定了路徑(D:\計(jì)算張三'實(shí)驗(yàn)一)和文件名(MyFirstC.cpp),因此在窗口的標(biāo)題欄中顯示出MyFirstC.cpp??梢钥吹焦鈽?biāo)在程序編輯窗口閃爍,表示程序編輯窗口已激活,可以輸入和編輯源程序了。這里輸入如圖1-7窗口中所示的程序。檢查無誤后,則將源程序保存在前面指定的文件中,方法是:在主菜單欄中選擇File(文件)命令,并在其下拉菜單中選擇Save(保存)命令。也可以用快捷鍵Ctrl+S來保存文件。如果不想將源程序存放到原先指定的文件中,可以不選擇Save命令,而選擇SaveAs(另存為)命令,并在彈出的SaveAs(另存為)對(duì)話框中指定文件路徑和文件名。圖1-7C++程序輸入2、打開一個(gè)已有的程序如果你已經(jīng)編輯并保存過C++源程序,而希望打開你所需要的源程序文件,并對(duì)它進(jìn)行修改,方法是:(1)在''資源管理器"或''我的電腦"中按路徑打到已有的C++程序名(如Cl-l.cpp)。(2)雙擊此文件名,則進(jìn)入VisualC++集成環(huán)境,并打開了該文件,程序已顯示在編輯窗口中。也可以用Ctrl+O或單擊工具欄中的小圖標(biāo)來打開文件。(3)如果修改后仍想保存在原來的文件中,可以選擇File(文件)-Save(保存)命令,或用快捷鍵Ctrl+S,或單擊工具欄中的小圖標(biāo)來保存文件。3、通過已有的程序建立一個(gè)新程序的方法如果你已編輯并保存過C++源程序(而不是第一次在該計(jì)算機(jī)上使用VisualC++)的話,則可以通過一個(gè)已有的程序來建立一個(gè)新程序,這樣做比重新輸入一個(gè)新文件省事,因?yàn)榭梢岳迷谐绦虻牟糠謨?nèi)容。方法是:(1)打開任何一個(gè)已有的源文件,(例cl-l.cpp)
(2)利用該文件的基礎(chǔ)修改成新的文件然后通過選擇File(文件)-Saveas(另存為)命令將它以另一文件名另存(如以test.cpp名字另存),這樣就生成了一個(gè)新文件test.cpp。用這種方法很方便,但應(yīng)注意:(1)保存新文件時(shí),不要錯(cuò)用File-Save(保存)操作,否則原有文件(cl-l.cpp)的內(nèi)容就被修改了。(2)在編譯新文件前,應(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.cppo見圖1-8:圖1-8編譯C程序在選擇"編譯”命令后,屏幕上出現(xiàn)一個(gè)對(duì)話框,內(nèi)容是"Thisbuildcommandrepuiresanactiveprojectworkspace.Wouldyouliketocreatadefaultprojectworkspace?"(此編譯命令要求一個(gè)有效的項(xiàng)目工作區(qū)。你是否同意建立一個(gè)默認(rèn)的項(xiàng)目工作區(qū)),見圖1-9。單擊Yes(是)按鈕,表示同意由系統(tǒng)建立默認(rèn)的項(xiàng)目工作區(qū),然后開始編譯。也可以不用選擇菜單的方法,而用Ctrl+F7或小圖標(biāo)來完成編譯。圖1-9建立默認(rèn)工作區(qū)提示
在進(jìn)行編譯時(shí),編譯系統(tǒng)檢查源程序中有無語法錯(cuò)誤,然后在主窗口下部的調(diào)試信息窗口輸出編譯的信息,如果有錯(cuò),就會(huì)指出錯(cuò)誤的位置和性質(zhì),見圖1-10。圖1-10編譯錯(cuò)誤信息提示2、程序的調(diào)試程序調(diào)試的任務(wù)是發(fā)現(xiàn)和改正程序中的錯(cuò)誤,使程序能正常運(yùn)行。編譯系統(tǒng)能檢查出程序中的語法錯(cuò)誤。語法錯(cuò)誤分兩類:一類是致命錯(cuò)誤,以error表示,如果程序中有這類錯(cuò)誤,就通不過編譯,無法形成目標(biāo)程序,更談不上運(yùn)行了。另一類是輕微錯(cuò)誤,以warning(警告)表示,這類錯(cuò)誤不影響生成目標(biāo)程序和可執(zhí)行程序,但有可能影響運(yùn)行的結(jié)果。因此也應(yīng)當(dāng)盡量改正,使程序既無error,又無warning。在圖1-10中的調(diào)試信息窗口中可以看到編譯的信息,指出源程序有一個(gè)error和一個(gè)warning?第7行有致命錯(cuò)誤,錯(cuò)誤的種類是:在“}”之前漏了檢查圖1-10中的程序,果然發(fā)現(xiàn)在第6行末漏了分號(hào)。學(xué)生們可能要問:明明是第6行有錯(cuò),怎么在報(bào)錯(cuò)時(shí)說成是第7行的錯(cuò)呢?這是因?yàn)镃++允許將一個(gè)語句分寫成幾行,因此檢查完第6行末尾無分號(hào)時(shí)還不能判定該語句有錯(cuò),必須再檢查下一行,直到發(fā)現(xiàn)第7行的“}”前都沒有“;”,才能判定出錯(cuò)。因此在第7行報(bào)錯(cuò)。在根據(jù)編譯報(bào)錯(cuò)信息檢查程序時(shí),應(yīng)檢查其上下行。此外編譯信息指出第7行還有一個(gè)warning,指出main函數(shù)需要有一個(gè)返回值,程序中缺少一個(gè)"return。;“語句。進(jìn)行改錯(cuò)時(shí),雙擊調(diào)試信息窗口中的某個(gè)報(bào)錯(cuò)信息的第1行,光標(biāo)就自動(dòng)移到程序窗口中被報(bào)錯(cuò)的程序行,并用粗箭頭指向該行。見圖1-11。
圖1-11發(fā)現(xiàn)錯(cuò)誤位置在第6行末加上分號(hào)。再增加新的一行return0;如圖1-12:圖1-12錯(cuò)誤修改再選擇CompileMyFirstC.cpp命令重新編譯,此時(shí)編譯信息提示:"0error(s).0waming(s)”,即沒有致使錯(cuò)誤(error)和警告性錯(cuò)誤(warning),編譯成功,這時(shí)產(chǎn)生一個(gè)MyFirstC.obj文件。見圖1-13中的下部調(diào)試信息窗口。
圖1-13圖1-13語法編譯通過3、程序的連接在得到目標(biāo)程序后,就可以對(duì)程序進(jìn)行連接了。此時(shí)應(yīng)選擇Build(構(gòu)建)一BuildMyFirstC.exe(構(gòu)建MyFirstC.exe)命令,見圖1-14。表示要求連接并建立一個(gè)可執(zhí)行文件MyFirstC.exeoBuildToolsWindowHelpCompileMyFirstCpp.cppCtrl+F7BuildMyFirstCpp.exe FT囹RebuildAllBatchBuild...CleanStartDebugDebuggerRemoteConnection...JExecuteMyFirstCpp.exeCtrl+F5SetActiveConfiguration...Configurations...Profile...ii-i4連接建立可執(zhí)行文件在執(zhí)行連接后,在調(diào)試輸出窗口顯示連接時(shí)的信息,說明沒有發(fā)現(xiàn)錯(cuò)誤,生成了一個(gè)可執(zhí)行文件MyFirstC.exe。見圖l-15o圖1-15可執(zhí)行文件建立成功以上介紹的是分別進(jìn)行程序的編譯與連接,也可以選擇Build-命令(或按F7鍵)一次完成編譯與連接。對(duì)于初學(xué)者來說,還是建議分步進(jìn)行程序的編譯與連接,有利于對(duì)程序編譯、解釋、連接過程的理解。今后積累一定經(jīng)驗(yàn)后,可以一步完成編譯與連接。4、程序的執(zhí)行在得到可執(zhí)行文件MyFirstC.exe后,就可以直接執(zhí)行MyFirstC.exe了。選擇Build--iExecutetest.exe(執(zhí)行MyFirstC.exe)命令。見圖1-16。BuildToolsWindowHelpCompileMyFirstCpp.cppCtrl+F7BuildMyFirstCpp.exe FT圈RebuildAllBatchBuild...CleanStartDebugDebuggerRemoteConnection...ExecuteMyFirstCpp.exeCtrl+F5SetActiveConfiguration...Configurations...Profile...圖1?16運(yùn)行程序可執(zhí)行文件在選擇“!Executetest.exe命令后,即開始執(zhí)行MyFirstC.exe。也可以不通過選擇菜單命令,而且CE+F5來實(shí)現(xiàn)程序的執(zhí)行。程序執(zhí)行后,屏幕切換到輸出結(jié)果的窗口,顯示出運(yùn)行結(jié)果,見圖l-17o圖1-17程序運(yùn)行結(jié)果可以看到,在輸出結(jié)果的窗口中的第1行是程序的輸出結(jié)果:ThisisaC++program.第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)當(dāng)選擇File(文件)一CloseWorkspace(關(guān)閉窗口)命令,以結(jié)束對(duì)該程序的操作。建立和運(yùn)行包含多個(gè)文件的程序的方法上面介紹的是最簡單的情況,一個(gè)程序只包含一個(gè)源程序文件。如果一個(gè)程序包含多個(gè)源程序文件,則需要建立一個(gè)項(xiàng)目文件(projectfile),在這個(gè)項(xiàng)目文件中包含多個(gè)文件(包括源文件和頭文件)。項(xiàng)目文件是放在項(xiàng)目工作區(qū)(Workspace)中并在項(xiàng)目工作區(qū)的管理之下工作的,因此需要建立項(xiàng)目工作區(qū),一個(gè)項(xiàng)目工作區(qū)可以包含一個(gè)以上的項(xiàng)目。在編譯時(shí),先分別對(duì)每個(gè)文件進(jìn)行編譯,然后將項(xiàng)目文件中的文件連接成為一個(gè)整體,再與系統(tǒng)的有關(guān)資源連接,生成一個(gè)可執(zhí)行文件,最后執(zhí)行這個(gè)文件。在實(shí)際操作時(shí)有兩種方法:一種是由用戶建立項(xiàng)目工作區(qū)和項(xiàng)目文件;另一種是用戶只建立項(xiàng)目文件而不建立項(xiàng)目工作區(qū),由系統(tǒng)自動(dòng)建立項(xiàng)目工作區(qū)。1市用戶建立前日T佐區(qū)和I0曰寸件(1),先用前面介紹過的方法分別編輯好同一程序中的各個(gè)源程序文件,并存放在自己指定的目錄下,例如有一個(gè)程序包括fileLcpp和file2.cpp兩個(gè)源文件,并已把它們保存在"D:\計(jì)算張三'實(shí)驗(yàn)一”子目錄下。(2)、建立一個(gè)項(xiàng)目工作區(qū)。在如圖14所示的VisualC++主窗口中選擇File(文件)—New(新建)命令,在彈出的New(新建)對(duì)話框中選擇上部的選擇屬性頁Workspacename(工作區(qū)名字),表示要建立一個(gè)新的項(xiàng)目工作區(qū)。在對(duì)話框中右部Workspacename(工作區(qū)名字)文本框中輸入你指定的工作區(qū)的名字(如wsl),見圖1-18。
圖1-18建立工作區(qū)然后單擊右下部的OK按鈕。此時(shí)返回VisualC++主窗口,見圖1-19。圖1-19一個(gè)空的工作區(qū)可以看到在左部的工作區(qū)窗口中顯示了“Workspacewsl:0project(s)”,表示當(dāng)前的工作區(qū)名是wsL其中有0個(gè)project(沒有在其中放入項(xiàng)目文件)。(3)、建立項(xiàng)目文件。選擇File(文件)-New(新建)命令,在彈出的New(新建)對(duì)話框中選擇上部的選擇屬性頁P(yáng)rojects(項(xiàng)目,中文VisualC++把它譯為“工程”),表示要建立一個(gè)項(xiàng)目文件。見圖1-20。
圖1-20圖1-20建立一個(gè)新的項(xiàng)目在對(duì)話框中左部的列表中選擇“Win32consoleApplication”項(xiàng),并在右部的location(位置)文本框中輸入項(xiàng)目文件的位置(即文件路徑),在Projectname(中文界面中顯示為''工程”)文本框中輸入你指定的項(xiàng)目文件名,假設(shè)輸入project%在窗口右部選中Addtocurrentworkspace(添加至現(xiàn)有工作區(qū))單選鈕,表示新建的項(xiàng)目文件是放到剛才建立的當(dāng)前工作區(qū)中的。然后單擊OK(確定)按鈕。此時(shí)彈出一個(gè)如圖1-21所示的對(duì)話框,在其中選中Anemptyproject單選鈕,表示新建立的是一個(gè)空的項(xiàng)目。圖1-21項(xiàng)目類型選擇單擊Finish(完成)按鈕。系統(tǒng)彈出一個(gè)NewProjectInformation(新建工程信息)對(duì)話框(圖1-22),顯示了剛才建立的項(xiàng)目的有關(guān)信息。
圖1-22圖1-22新建項(xiàng)目的信息在其下方可以看到項(xiàng)目文件的位置(文件路徑)。啰認(rèn)后單擊OK(確定)按鈕。此時(shí)又回到VisualC++主窗口,可以看到:左部窗口中顯示了uWorkspace,wsl':1project(s)n其下一行為*'project!files”,表示已將項(xiàng)目文件project1加到項(xiàng)目工作區(qū)wsl中,見圖1-23。圖1-23工作區(qū)中加入一個(gè)新項(xiàng)目(4)、將源程序文件放到項(xiàng)目文件中。方法是:在VisualC++主窗口中依次選擇Project(工程)一AddToProject(添加到項(xiàng)目中,在中文界上顯示為“添加工程”)一“Files…”命令,見圖1-24<.
圖1-24文件加入到項(xiàng)目中在選擇“Files…”命令后,屏幕上出現(xiàn)InsertFilesintoProject對(duì)話框。在上部的列表框中按路徑找到源文件filel.cpp和file2.cpp所在的子目錄,并選中filel.cpp和file2.cpp,見圖l-25o圖1-25加入文件選擇單擊0K(確定)按鈕,就把這兩個(gè)文件添加到項(xiàng)目文件projectl中了。(5)、編譯和連接項(xiàng)目文件。由于已經(jīng)把filel.cpp和file2.cpp兩個(gè)文件添加到項(xiàng)目文件projectl中,因此只須對(duì)項(xiàng)目文件projectl進(jìn)行統(tǒng)一的編譯和連轉(zhuǎn)。方法是:在VisualC++主窗口中選擇Build(編譯)Buildprojectl.exe(構(gòu)建projectl.exe)命令。在選擇Buildprojectl.exe命令后,系統(tǒng)對(duì)整個(gè)項(xiàng)目文件進(jìn)行編譯和連接,在窗口的下部會(huì)顯示編譯和連接的信息。如果程序有錯(cuò),會(huì)顯示出錯(cuò)信息,如果無錯(cuò),會(huì)生成可執(zhí)行文件projectl.exeo見圖1?26。
圖1-26項(xiàng)目的編譯和連接執(zhí)行可執(zhí)行文件。選擇Build(編譯)-*Executeproject1.exe(執(zhí)行projectl.exe)命令,即可。2,用戶只建立項(xiàng)目文件上面介紹的方法是先建立項(xiàng)目工作區(qū),再建立項(xiàng)目文件,步驟比較多。可以采取簡化的方法,即用戶只建立項(xiàng)目文件,而不建立項(xiàng)目工作區(qū),由系統(tǒng)自動(dòng)建立項(xiàng)目工作區(qū)。在本方法中,保留上一節(jié)中介紹的第(1)、(4)、(5)、(6)步,取消第(2)步,修改第(3)步。具體步聚如下:(1)分別編輯好同一程序中的各個(gè)源程序文件。同上一節(jié)中的第(1)步。(2)建立一個(gè)項(xiàng)目文件(不必先建立項(xiàng)目工作區(qū))。在VisualC++主窗口中選擇File(文件)--New(新建)命令,在彈出的New(新建)對(duì)話框中選擇上部的選項(xiàng)卡projects(項(xiàng)目),表示要建立一個(gè)項(xiàng)目文件。見圖1-27。在對(duì)話框中左部的列表中選擇"Win32consoleApplication”項(xiàng),在projectname(中文VisualC++中顯示為''工程”)文本框中輸入你指定的項(xiàng)目文件名(project1)?可以看到:在右部的中間的單選鈕處默認(rèn)選定了Createnewworkspace(創(chuàng)建新工作區(qū)),這是由于用戶未指定工作區(qū),系統(tǒng)會(huì)自動(dòng)開辟新工作區(qū)。圖1-27建立一個(gè)新的Win32ConsoleApplication項(xiàng)目單擊0K(確定)按鈕,出現(xiàn)*Win32ConsoleApplication-step1of1M對(duì)話框,選中右部的Anemptyproject單選鈕,單擊Finish(完成)按鈕后,tBSti<lNewprojectinformation"(新建工程信息)消息框。從它的下部可以看到項(xiàng)目文件的路徑。單擊0K(確定)按鈕,
在彈出的VisualC++主窗口的左部窗口的下方單擊FileView按鈕,窗口中顯示W(wǎng)orkspace,projectT:1project(s)'\見圖1-28。說明系統(tǒng)已自動(dòng)建立了一個(gè)工作區(qū),由于用戶未指定工作區(qū)名,系統(tǒng)就將項(xiàng)目文件名project1同時(shí)作為工作區(qū)名。圖1-28建立新項(xiàng)目成功向此項(xiàng)目文件添加內(nèi)容。步驟與方法一中的第(4)步相同。編譯和連接項(xiàng)目文件。步驟與方法一中的第(4)步相同。執(zhí)行可執(zhí)行文件。步驟與方法一中的第(6)步相同。顯然,這種方法比前一種方法簡單一些。在介紹單文件程序時(shí),為了盡量簡化手續(xù),這里沒有建立工作區(qū),也沒有建立項(xiàng)目文件,而是直接建立源文件,實(shí)際上,在編譯每一個(gè)程序時(shí)都需要一個(gè)工作區(qū),如果用戶未指定,系統(tǒng)會(huì)自動(dòng)建立工作區(qū),并賦予它一個(gè)默認(rèn)名(此時(shí)以文件名作為工作區(qū)名VisualC++6.0工程相關(guān)文件介紹序號(hào) 文件名序號(hào) 文件名\o"CurrentDocument"*.dsw\o"CurrentDocument"*.dsp*.ncb*.opt*.h*.cpp*.exe*plg*.pch*.pdb?.obj?.ilkVC工作區(qū)文件(DeveloperStudioProject)項(xiàng)目文件,文本格式。不熟悉的話不要手工修改無編譯瀏覽文件。當(dāng)自動(dòng)完成功能出問題時(shí),可以刪除此文件,編譯工程后會(huì)自動(dòng)生成。工程關(guān)于開發(fā)環(huán)境的參數(shù)文件,如VC工具條位置信息等。C/C++程序頭文件,可用文本編輯器打開C++源程序文件,可用文本編輯器打開程序可執(zhí)行文件編譯信息文件。編譯時(shí)的error和warning信息文件(實(shí)際上是一個(gè)html文件),一般用處不大。在Tools—OptionsfBuiId里面的選項(xiàng)可以控制這個(gè)文件的生成。(Pre-CompiledFile)是預(yù)編譯文件??梢约涌炀幾g速度,但是文件非常大(ProgramDatabase)記錄了程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息,在調(diào)試的時(shí)候有用源程序文件的□標(biāo)文件,編譯后生成源程序文件的連接文件,連接后生成在VC下建立一個(gè)工程后,會(huì)自動(dòng)產(chǎn)生17類型的文件。加入*.h、*.cpp文件編譯后產(chǎn)生7?12類型的文件。其中8~12類型的文件位于工程目錄下的Debug目錄下。1-4類型的文件都是工程相關(guān)的文件, 般不要?jiǎng)h除,因?yàn)閯h除后,必須手動(dòng)的重新建立工程(1.2.6詳細(xì)描述了如何建立一個(gè)工程)。對(duì)于大型項(xiàng)目來說,刪除這些文件的后果很嚴(yán)重。5?6類型的文件還有什么可說的,不僅不能刪除這些文件,還要備份這些文件。失去這些文件是災(zāi)難性的。7~12類型的所有文件都是可以刪除的,因?yàn)樵俅尉幾g連接運(yùn)行程序時(shí),會(huì)再次自動(dòng)生成這些文件。VisualC++6.0錯(cuò)誤信息程序錯(cuò)誤的類型1、嚴(yán)重錯(cuò)誤(fatalerror)很少出現(xiàn),通常是內(nèi)部編譯器出錯(cuò)。造成編譯立即停止。2、語法錯(cuò)誤(error)語法錯(cuò)誤是指源程序中存在不符合C/C++語言語法規(guī)定的語句,例如將int寫成Int,括號(hào)不匹配等?!缎╁e(cuò)誤不改正是不能通過編譯的。如圖1-29:W Configuration:projectl-Win32Debug ±工Compiling...Filel.cppD八并篡可05O1-2666M05-張三、實(shí)驗(yàn)一\M\project1\file1.cpp(6):errorC2865:'coutt':undeD八計(jì)就105O1-2M6酬OS謙三侯驗(yàn)一“s1\project1\file1.cpp(6):errorC2297:'?':illegalErrorexecutingject1.exe-2error(s),0warning(s)~Vjn\Build-Debut\FindinFiles1\I <圖1-29語法錯(cuò)誤3、警告錯(cuò)誤(warning)對(duì)于一些在語法上有輕微毛病但不影響程序運(yùn)行的錯(cuò)誤(如定義了變量但始終未使用),編譯時(shí)會(huì)發(fā)出警告信息,雖然程序能通過編譯、連接、運(yùn)行,但警告類的錯(cuò)誤常常帶來程序非法操號(hào)運(yùn)行錯(cuò)誤等問題。所以,盡量改正警告錯(cuò)誤。如圖1-30:W Configuration:projectl-Win32Debug RConpiling...Filel.cppD:\計(jì)算機(jī)8SQ1-2606a05-張三'實(shí)驗(yàn)一\vs1\project1\file1.cpp(6):warningCM101:'i,:unreferencedlocalvariableLject1.exe-0error(s),1varning(s)lUhBoiidXJ燉辿一斑F運(yùn)?_1_入」11」 ?r圖l?30警告錯(cuò)誤4、連接錯(cuò)誤(Linkerror)程序語法上沒有問題,但是在連接時(shí)出現(xiàn)錯(cuò)誤。這類問題常常是因?yàn)槌绦蛞蕾嚭瘮?shù)、庫不匹配造成的。如圖1-31:|29 Configuration:projectl-Win32Debug 二」Compiling...Filel.cppLinking... LIBCD.lib(crtO.obj)errorLNK2001:unresoluedexternalsymbolmainDebug7project1.exe:FatalerrorLNK1120:1unresoluedexternalsErrorexecutinglink.exF;project1?exe-2yror(s),0warning,") ▼T|T|\BuildXDebug\FindinFiles1~41I ?|~圖1-31連接錯(cuò)誤5、邏輯錯(cuò)誤邏輯錯(cuò)誤是指程序無語法錯(cuò)誤,也能正常運(yùn)行,但結(jié)果不對(duì)。這類錯(cuò)誤常常是設(shè)計(jì)算法時(shí)的錯(cuò)誤,計(jì)算機(jī)無法檢查出來。邏輯錯(cuò)誤是最難改正的錯(cuò)誤之一,引起錯(cuò)誤的原因往往可能很不起眼,比如就是一個(gè)變量沒有初始化等,所以改正這類錯(cuò)誤常常需要投入大量的精力。6、運(yùn)行錯(cuò)誤有時(shí)程序既無語法和邏輯錯(cuò)誤,但是程序就是不能正常運(yùn)行。多數(shù)情況下是輸入數(shù)據(jù)和程序要求的數(shù)據(jù)不匹配造成的,也可能是系統(tǒng)的支持問題。在C++中,語法、連接錯(cuò)誤相對(duì)較為容易改正。而邏輯錯(cuò)誤是最隱蔽的錯(cuò)誤,比較難以改正。運(yùn)行錯(cuò)誤則主要是在程序強(qiáng)壯性、兼容性上可能存在問題,可以通過提高程序的適應(yīng)能力來修正。而最容易讓程序開發(fā)人員忽略的就是警告錯(cuò)誤了,因?yàn)榫驽e(cuò)誤不一定會(huì)影響程序的運(yùn)行,但是正是這種不確定性也傳遞給了程序的執(zhí)行,你不知道程序什么時(shí)候會(huì)出問題,也許永遠(yuǎn)不會(huì)有問題,也許問題馬上出現(xiàn),也許問題n年后出現(xiàn),誰知道。所以,一定要重視警告錯(cuò)誤。表1-1是C++錯(cuò)誤的前綴描述,在遇到錯(cuò)誤時(shí)可以根據(jù)其前綴就知道錯(cuò)誤等級(jí)了。錯(cuò)誤等級(jí)錯(cuò)誤前綴錯(cuò)誤編號(hào)范圍示例嚴(yán)重錯(cuò)誤C1001~999C2065:Thespecifiedidentifierwasnotdeclared.(標(biāo)編譯錯(cuò)誤C2001-999識(shí)符,比如一個(gè)變量,未申明)。如圖1?29,court沒有申明過。C4101:'main*:unreferencedlocalvariable(局部變量警告錯(cuò)誤C4001?999申明后從未使用過)。如圖1-30,其中的i變量從未使用過。LNK2001:unresolvedexternalsymbol"symbol".鏈接錯(cuò)誤LNK1000~6026(連接指定的函數(shù)或庫異常)。如圖1?31,程序找不到main函數(shù)。錯(cuò)誤信息的查詢只有詳細(xì)地了解了錯(cuò)誤的原因,才能正確地改正錯(cuò)誤。Microsoft的MSDNLibrary(Microsoft開發(fā)幫助文檔庫,如圖1-32)提供了查詢錯(cuò)誤信息的功能。對(duì)于遇到的不明白的錯(cuò)誤,學(xué)生們應(yīng)該學(xué)習(xí)使用MSDN幫助文檔庫進(jìn)行錯(cuò)誤信息查詢,獲得錯(cuò)誤信息的解釋和可能的改正方法。具體方法如下:圖1-32MSDNLibrary
■I口1xl(1)選擇MSDNLibrary(如圖1-32)的索引屬性頁,在“鍵入要查找的關(guān)鍵字:”中輸入錯(cuò)誤號(hào)(由錯(cuò)誤刖綴和編號(hào)組成),比如輸入■I口1xl文件0)隔輯S<(V)跳轉(zhuǎn)⑹就助國)£EAA盤/盤魚盤活動(dòng)子集H)目錄素引國)|搜索£EAA盤/盤魚盤活動(dòng)子集H)目錄素引國)|搜索母)|書筌Q)|鹿人要查找的關(guān)艇字也).LJ.H5顯示6)I-CompilerErrorC2065(二 』-' '印誤解釋,identifier':undeclaredidentifierTh^'specifiedidentifierwasnotdec近曄L"Avariabl&^^lyjrfemustbespecifiedinadeclarationbeforeitcanbeused.Thepardfliitersthatafunctionusesmustbespecifiedinadeclaration,orprototype,beforethefunctioncanbeused.TipsMakesureanyincludefilecontainingtherequireddeclarationisnotomitted.MakesureyouareincludinganynecessaryheaderfilesifyouhavedefinedVC_EXTRALEAN,WIN32_LEAN_AND_MEAN,orWIN32_EXTRA_LEAN.Definingthesesymbolsexcludessomefunctionality(certainheaderfilesareexcluded)fromwindows.handafxv_w32.h(forMFCapplications)tospeedcompiles.Searchwindows.handafxv_w32.hforthesesymbolsforthemostup-to-datedescriptionofwhatisexcluded.Makesuretheidentifiernameisspelledcorrectly.Makesuretheidentifierisusingthecorrectupper-andlowercaseletters.Makesureallstnngconstantshaveclosingquotes.Thiserrorcanbecausedbyhavinganewlinecharacterinastnngconstantwithoutacontinuationcharacter.Forexample:圖1-33在MSDNLibrary中查找錯(cuò)誤信息(2)在索引列表框中雙擊選擇匹配的錯(cuò)誤后,錯(cuò)誤類型、可能原因、改正方法等信息則顯示在窗口的右邊部分。VisualC++6.0調(diào)試工具使用在開發(fā)程序的過程中,需要不斷地調(diào)試自己的程序,或檢查錯(cuò)誤,或測試程序的穩(wěn)定性,這就需要借助調(diào)試工具來進(jìn)行。選擇一個(gè)好的調(diào)試工具并能夠熟練地使用它,將會(huì)使程序開發(fā)變得更加容易,從而大大提高程序開發(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目錄,在該目錄下存放在開發(fā)過程進(jìn)行調(diào)試時(shí)生成的文件以及生成的可執(zhí)行文件(不同類型文件的解釋見1.3節(jié)VisualC++6.0工程相關(guān)文件介紹),不妨將此時(shí)生成的可執(zhí)行文件稱為Debug版本。在Debug版本當(dāng)中,包含著Microsoft格式的調(diào)試信息,而且不進(jìn)行任何代碼優(yōu)化。一般情況下,在程序的開發(fā)過程中使用Debug模式。在應(yīng)用程序開發(fā)完成之后,要將程序發(fā)行時(shí),需要編譯形成另一種版本的可執(zhí)行文件,稱為Release版本,在Release版本中對(duì)可執(zhí)行程序的二進(jìn)制代碼進(jìn)行了優(yōu)化,其中不包含任何的調(diào)試信息。要建立Release版本的可執(zhí)行文件,可以選擇菜單Project中的Setting命令,這時(shí)屏幕上面彈出ProjectSettings對(duì)話框,如圖1-34所示。在SettingsFor下拉列表中選擇Release,按OK按鈕退出。如果要在VisualC++中調(diào)試程序,則工程的應(yīng)設(shè)為Debug版本。一般VisualC++建立一個(gè)工程(Project)時(shí),默認(rèn)采用Debug版本。圖1-34設(shè)置工程的調(diào)試屬性學(xué)習(xí)設(shè)置斷點(diǎn)進(jìn)行單步調(diào)試通常,一個(gè)應(yīng)用程序是連續(xù)運(yùn)行的,但是在程序調(diào)試的過程中,往往需要在程序的運(yùn)行過程的某一階段來觀測應(yīng)用程序的狀態(tài),所以必須使程序在某一地點(diǎn)停下來。在VisualC++中,可以通過設(shè)置斷點(diǎn)來達(dá)到這樣的目的。在設(shè)置好斷點(diǎn)之后,當(dāng)程序運(yùn)行到設(shè)立斷點(diǎn)處時(shí)就停止運(yùn)行,此時(shí)就可以利用各種工具來觀察程序的狀態(tài),也可以設(shè)置各種條件使程序按要求繼續(xù)運(yùn)行,這樣就可以進(jìn)一步觀測程序的流向。在VisualC++中,可以設(shè)置多種類型的斷點(diǎn),這些斷點(diǎn)起作用的方式各不相同,可以將它們分為三類,即:位置斷點(diǎn)、邏輯斷點(diǎn)以及與Windows消息有關(guān)的斷點(diǎn)。下面我們只介紹簡單位置斷點(diǎn)的設(shè)置方法,其它高級(jí)斷點(diǎn)的設(shè)置可以在今后進(jìn)一步學(xué)習(xí)中掌握。1、設(shè)置位置斷點(diǎn)位置斷點(diǎn),這是一類最簡單的斷點(diǎn)類型,其設(shè)置方法也最為簡單,只要把光標(biāo)移到要設(shè)斷點(diǎn)的位置(當(dāng)然這一行必須包含一條有效語句):然后按工具條上的add/removebreakpoint按鈕或按快捷鍵F9;如圖1-35:承兇昌!Bl酒設(shè)置斷點(diǎn)圖1-35設(shè)置斷點(diǎn)按鈕這時(shí)將會(huì)在屏幕上看到在這一行的左邊出現(xiàn)一個(gè)紅色的圓點(diǎn),表示在該位置設(shè)立了一個(gè)斷點(diǎn),如圖1-36所示。如果你想取消斷點(diǎn),將光標(biāo)移動(dòng)到設(shè)置斷點(diǎn)的代碼行,按F9。
圖1-36設(shè)置一個(gè)斷點(diǎn)2、啟動(dòng)調(diào)試按F5或者在Build菜單中,選擇StartDebug然后選擇Go,就可以啟動(dòng)調(diào)試程序。程序會(huì)一直運(yùn)行到需要用戶輸入或者有斷點(diǎn)的代碼處。如圖1-37處的小黃箭頭,表明程序運(yùn)行到該處停止下來,等待下一步調(diào)試命令。圖1-37啟動(dòng)調(diào)試3、查看變量值查看變量值有多種方式,你可以選擇你喜歡的方式進(jìn)行。(1)你可以將鼠標(biāo)移動(dòng)到程序的變量名處,系統(tǒng)會(huì)自動(dòng)為你顯示變量的值:(2)復(fù)雜變量(如對(duì)象)可以通過QuickWatch查看,方法是:將光標(biāo)定位到所要查看值的變量處,按鼠標(biāo)右鍵,選擇QuickWatch菜單,就可以看到變量值。(3)啟動(dòng)調(diào)試程序后,屏幕下方將會(huì)出現(xiàn)兩個(gè)輸出窗口,一個(gè)是Watch,另一個(gè)是VariableoWatch窗口顯示變量名和變量值,你可以在Watch窗口中加上你想觀察值的變量名,也可以直接從源代碼中選擇變量名,并把它拖動(dòng)到Watch窗口中。Variable窗口顯示程序當(dāng)前運(yùn)行上下文涉及的變量的值。如圖1-38:圖1-38查看變量數(shù)據(jù)4、控制程序執(zhí)行你可以控制程序單步執(zhí)行(F10)、跟蹤到一個(gè)函數(shù)內(nèi)部(F11)、從一個(gè)函數(shù)運(yùn)行出來(shift+FH),運(yùn)行到光標(biāo)所在位置(Ctrl+F10),以便方便地調(diào)試程序。這些命令用于在某個(gè)局部范圍詳細(xì)地調(diào)試程序。你也可以通過設(shè)置斷點(diǎn)(F9)然后用直接運(yùn)行(GO或者F5)來控制程序直接運(yùn)行到斷點(diǎn)位置。如果你設(shè)置了多個(gè)斷點(diǎn),程序?qū)?huì)在遇到的第一個(gè)斷點(diǎn)處停下來。要從斷點(diǎn)處繼續(xù)運(yùn)行,可以用上面所說的各種命令(F5,F10,Fil,Shift+Fll,Ctrl+F10)?Debug中國圖1sz?眄小{供1}時(shí)爆10國匚I回用圖1-39調(diào)試控制工具條5、結(jié)束調(diào)試要結(jié)束調(diào)試,可以按shifit+F5或者選擇菜單Debug|StopDebugging。當(dāng)結(jié)束調(diào)試后,所有調(diào)試窗口會(huì)自動(dòng)關(guān)閉,Debug菜單也會(huì)自動(dòng)還原為Build菜單。程序調(diào)試的一般方法調(diào)試程序是程序設(shè)計(jì)課程的一個(gè)重要環(huán)節(jié)。初學(xué)者的程序往往不是一次就能順利通過,即使一個(gè)有經(jīng)驗(yàn)的程序員也常會(huì)出現(xiàn)某些疏忽。上機(jī)的目的不僅是驗(yàn)證程序的正確性,還要掌握程序調(diào)試的技術(shù),提高動(dòng)手能力。程序的調(diào)試具有很強(qiáng)的技術(shù)性和經(jīng)驗(yàn)性,其效率高低在很大的程度上依賴于程序設(shè)計(jì)者的經(jīng)驗(yàn)。有經(jīng)驗(yàn)的人很快就能發(fā)現(xiàn)錯(cuò)誤,而有的人在計(jì)算機(jī)顯示出錯(cuò)誤信息并告訴他哪一行有錯(cuò)之后還找不出錯(cuò)誤所在。所以初學(xué)者調(diào)通一個(gè)程序往往比編寫程序花的時(shí)間還多。程序調(diào)試過程中會(huì)遇到各種各樣的問題,附錄B中列舉了常見錯(cuò)誤。1、程序調(diào)試準(zhǔn)備工作上機(jī)之前要做好程序調(diào)試的準(zhǔn)備工作。程序調(diào)試的準(zhǔn)備工作包括熟悉程序的運(yùn)行環(huán)境和各個(gè)程序設(shè)計(jì)階段為程序調(diào)試所做的準(zhǔn)備。(1)上機(jī)前要先熟悉程序運(yùn)行的環(huán)境(2)程序設(shè)計(jì)過程中要為程序調(diào)試做好準(zhǔn)備:①采用模塊化、結(jié)構(gòu)化方法設(shè)計(jì)程序。所謂模塊化就是將一個(gè)大任務(wù)分解成若干個(gè)較小的部分,每一部分承擔(dān)一定的功能,稱為“功能模塊",這樣可以在相對(duì)較小的范圍內(nèi)確定出錯(cuò)誤,較快的改正錯(cuò)誤并對(duì)其重新編譯。提示:不要將全部語句都寫在main函數(shù)中,而要多利用函數(shù),用一個(gè)函數(shù)完成一個(gè)單一的功能。這樣既便于閱讀,也便于調(diào)試。②編程時(shí)要為調(diào)試程序提供足夠的靈活性。程序設(shè)計(jì)是針對(duì)具體問題的,但同時(shí)應(yīng)充分考慮程序調(diào)試時(shí)可能出現(xiàn)的的各種情況,在編寫程序時(shí)要為調(diào)試中臨時(shí)修改、選擇輸入數(shù)據(jù)的形式、個(gè)數(shù)和改變輸出形式等情況提供盡可能的靈活性。要做到這一點(diǎn)必須使程序具有通用性。一方面,在選擇和設(shè)計(jì)算法時(shí)要使其具有靈活性,另一方面數(shù)據(jù)的輸入要靈活,可以采用交互式輸入數(shù)據(jù)。例如排序算法、求和、求積分算法的數(shù)據(jù)個(gè)數(shù)都可以通過應(yīng)答程序的提問來確定,從而為程序的調(diào)試帶來了方便。③根據(jù)程序調(diào)試的需要,可以通過設(shè)置“分段隔離”、“設(shè)置斷點(diǎn)”、“跟蹤打印”來調(diào)試程序。對(duì)于復(fù)雜的程序可以在適當(dāng)?shù)牡胤皆O(shè)置必要的斷點(diǎn),這樣調(diào)試程序查找問題迅速、容易。為了判斷程序是否正常執(zhí)行,觀察程序執(zhí)行路徑和中間結(jié)果的變化情況,可以在適當(dāng)?shù)牡胤酱蛴〕霰匾闹虚g結(jié)果,通過這些中間結(jié)果可以觀察程序的執(zhí)行情況。調(diào)試結(jié)束后再將斷點(diǎn)、打印中間結(jié)果的語句刪掉。④要精心地準(zhǔn)備調(diào)試程序所用的數(shù)據(jù)。這些數(shù)據(jù)包括程序調(diào)試時(shí)要輸入的具有典型性和代表性的數(shù)據(jù)及相應(yīng)的預(yù)期結(jié)果。例如,選取適當(dāng)?shù)臄?shù)據(jù)保證程序中每條可能的路徑都至少執(zhí)行一次并使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。要選擇“邊界值”,即選取剛好等于、稍小于、稍大于邊界值的數(shù)據(jù),經(jīng)驗(yàn)表明,處理邊界情況時(shí)程序最容易發(fā)生錯(cuò)誤,例如許多程序錯(cuò)誤出現(xiàn)在下標(biāo)、數(shù)據(jù)結(jié)構(gòu)和循環(huán)等等的邊界附近。通過這些數(shù)據(jù)的驗(yàn)證,可以看到程序在各種可能條件下的運(yùn)行情況,暴露程序錯(cuò)誤的可能性更大,從而提高程序的可靠性。2,調(diào)試程序的方法與技巧程序調(diào)試主要有兩種方法,即靜態(tài)調(diào)試和動(dòng)態(tài)調(diào)試。(1)靜態(tài)調(diào)試程序的靜態(tài)調(diào)試就是在程序編寫完以后,由人工“模擬”計(jì)算機(jī),對(duì)程序進(jìn)行仔細(xì)檢查,主要檢查程序中的語法規(guī)則和邏輯結(jié)構(gòu)的正確性。實(shí)踐表明,有很大一部分錯(cuò)誤可以通過靜態(tài)檢查來發(fā)現(xiàn)。通過靜態(tài)調(diào)試,可以大大縮短上機(jī)調(diào)試的時(shí)間,提高上機(jī)的效率。①對(duì)程序語法規(guī)則進(jìn)行檢查A.語句正確性檢查。保證程序中每個(gè)語句的正確性是編寫程序時(shí)的基本要求。由于程序中包含大量的語句,書寫過程中由于疏忽或筆誤,語句寫錯(cuò)再所難免。對(duì)程序語句的檢查應(yīng)注意以下幾點(diǎn):檢查每個(gè)語句的書寫是否有字符遺漏,包括必要的空格符是否都有。檢查形體相近的字符是否書寫正確.例如字母。和數(shù)字0,書寫時(shí)要有明顯的分別。檢查函數(shù)調(diào)用時(shí)形參和實(shí)參的類型、個(gè)數(shù)是否相同。B.語法正確性檢查。書寫程序時(shí)必須遵守一定的語法規(guī)則,否則編譯時(shí)程序?qū)⒔o出錯(cuò)誤信息。語句的配對(duì)檢查:許多語句都是配對(duì)出現(xiàn)的,不能只寫半個(gè)語句。另外,語句有多重括號(hào)時(shí),每個(gè)括號(hào)也都應(yīng)成對(duì)出現(xiàn)。注意檢查語句順序:有些語句不僅句法本身要正確,而且語句在程序中的位置也必須正確。例如,變量定義要放在所有可執(zhí)行語句之前。②檢查程序的邏輯結(jié)構(gòu)A.檢查程序中各變量的初值和初值的位置是否正確。例如:經(jīng)常遇到的是“累加”、“累積”,其初值和位置都非常重要。用于累加的變量應(yīng)取0初值或給定的初值,用于累積的變量應(yīng)賦初值為或給定的值。因?yàn)槔奂踊蚶鄯e都是通過循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)的,因此這些變量賦初值語句應(yīng)在循環(huán)體之外。對(duì)于多重循環(huán)結(jié)構(gòu),內(nèi)循環(huán)體中的變量賦初值語句應(yīng)在內(nèi)循環(huán)之外;外循環(huán)體中的變量賦初值語句應(yīng)在外循環(huán)之外。如果賦初值的位置放錯(cuò)了,那么將得不到預(yù)想的結(jié)果。.檢查程序中分枝結(jié)構(gòu)是否正確。程序中的分枝結(jié)構(gòu)都是根據(jù)給定的條件來決定執(zhí)行不同的路徑的,因此在設(shè)置各條路徑的條件時(shí)一定要謹(jǐn)慎,在設(shè)置“大于”、“小于”這些條件時(shí),一定要仔細(xì)考慮是否應(yīng)該包括“等于"這個(gè)條件,更不能把條件寫反。尤其要注意的是,實(shí)型數(shù)據(jù)在運(yùn)算過程中會(huì)產(chǎn)生誤差,如果用“等于”或“不等于”對(duì)實(shí)數(shù)的運(yùn)算結(jié)果進(jìn)行比較,則會(huì)因?yàn)檎`差而產(chǎn)生誤判斷,路徑選擇也就錯(cuò)了。因此在遇到要判斷實(shí)數(shù)a與b相等與否作為條件來選擇路徑時(shí),應(yīng)該把條件寫成:ifbs(a-b)<=le-6),而不應(yīng)該寫成if(a=b)。要特別注意條件語句嵌套時(shí),if和else的配對(duì)關(guān)系。C.檢查程序中循環(huán)結(jié)構(gòu)的循環(huán)次數(shù)和循環(huán)嵌套的正確性。C語言中可用for循環(huán)、while循環(huán)、do—while循環(huán)。在給定循環(huán)條件時(shí),不僅要考慮循環(huán)變量的初始條件,還要考慮循環(huán)變量的變化規(guī)律、循環(huán)變量變化的時(shí)間,任何一條變化都會(huì)引起循環(huán)次數(shù)的變化。D.檢查表達(dá)式的合理與否。程序中不僅要保證表達(dá)式的正確性,而且還要保證表達(dá)式的合理性。尤其要注意表達(dá)式運(yùn)算中的溢出問題,運(yùn)算數(shù)值可能超出整數(shù)范圍就不應(yīng)該采用整型運(yùn)算,否則必然導(dǎo)致運(yùn)算結(jié)果的錯(cuò)誤。兩個(gè)相近的數(shù)不能相減,以免產(chǎn)生“下溢”。更要避免在一個(gè)分式的分母運(yùn)算中發(fā)生“下溢”,因?yàn)榫幾g系統(tǒng)常把下溢做零處理。因此分母中出現(xiàn)下溢時(shí)要產(chǎn)生'‘被零除"的錯(cuò)誤。由于表達(dá)式不合理而引起的程序運(yùn)行錯(cuò)誤往往很難查找,會(huì)增加程序調(diào)試的難度。因此,認(rèn)真檢查表達(dá)式的合理性,是減少程序運(yùn)行錯(cuò)誤,提高程序動(dòng)態(tài)調(diào)試效率的重要方面。程序的靜態(tài)調(diào)試是程序調(diào)試非常重要的一步。初學(xué)者應(yīng)培養(yǎng)自己靜態(tài)檢查的良好習(xí)慣,在上機(jī)前認(rèn)真做好程序的靜態(tài)檢查工作,從而節(jié)省上機(jī)時(shí)間,使有限的機(jī)時(shí)充分發(fā)揮作用。(2)動(dòng)態(tài)調(diào)試在靜態(tài)調(diào)試中可以發(fā)現(xiàn)和改正很多錯(cuò)誤,但由于靜態(tài)調(diào)試的特點(diǎn),有一些比較隱蔽的錯(cuò)誤還不能檢查出來。只有上機(jī)進(jìn)行動(dòng)態(tài)調(diào)試,才能夠找到這些錯(cuò)誤并改正它們。程序的動(dòng)態(tài)調(diào)試就是實(shí)際上機(jī)調(diào)試,它貫穿在編譯、連接和運(yùn)行的整個(gè)過程中。根據(jù)程序編譯、連接和運(yùn)行時(shí)計(jì)算機(jī)給出的錯(cuò)誤信息進(jìn)行程序調(diào)試,這是程序調(diào)試中最常用的方法,也是最初步的動(dòng)態(tài)調(diào)試。在此基礎(chǔ)上,通過“分段隔離”、“設(shè)置斷點(diǎn)”、“跟蹤打印”進(jìn)行程序的調(diào)試。①編譯過程中的調(diào)試編譯過程除了將源程序翻譯成目標(biāo)程序外,還要對(duì)源程序進(jìn)行語法檢查。如果發(fā)現(xiàn)源程序有語法錯(cuò)誤,系統(tǒng)將顯示錯(cuò)誤信息。用戶可以根據(jù)這些提示信息查找出錯(cuò)誤性質(zhì),并在程序中出錯(cuò)之處進(jìn)行相應(yīng)的修改。有時(shí)會(huì)發(fā)現(xiàn)編譯時(shí)有幾行的錯(cuò)誤信息都是一樣的,檢查這些行本身沒有發(fā)現(xiàn)錯(cuò)誤,這時(shí)要仔細(xì)檢查與這些行有關(guān)的名字、表達(dá)式是否有問題。例如,因?yàn)槌绦蛑袛?shù)組說明語句有錯(cuò),這時(shí),那些與該數(shù)組有關(guān)的程序行都會(huì)被編譯系統(tǒng)檢查出錯(cuò)。這種情況下,用戶只要仔細(xì)分析一下,修改了數(shù)組說明語句的錯(cuò)誤,許多錯(cuò)誤就會(huì)同時(shí)沒有了。對(duì)于編譯階段的調(diào)試,要充分利用屏幕給出的錯(cuò)誤信息,對(duì)它們進(jìn)行仔細(xì)分析判斷。只要注意總結(jié)經(jīng)驗(yàn),使程序通過編譯是不難做到的。②連接過程的調(diào)試編譯通過后要進(jìn)行連接。連接的過程也有查錯(cuò)的功能,它將指出外部調(diào)用、函數(shù)之間的聯(lián)系及存儲(chǔ)區(qū)設(shè)置等方面的錯(cuò)誤。如果連接時(shí)有這類錯(cuò)誤,編譯系統(tǒng)也會(huì)給出錯(cuò)誤信息,用戶要對(duì)這些信息仔細(xì)判斷,從而找出程序中的問題并改正之。連接時(shí)較常見的錯(cuò)誤有以下幾類:A.某個(gè)外部調(diào)用有錯(cuò),通常系統(tǒng)明確提示了外部調(diào)用的名字,只要仔細(xì)檢查各模塊中與該名有關(guān)的語句,就不難發(fā)現(xiàn)錯(cuò)誤。B.找不到某個(gè)庫函數(shù)或某個(gè)庫文件,這類錯(cuò)誤是由于庫函數(shù)名寫錯(cuò)、疏忽了某個(gè)庫文件的連接等。C.某些模塊的參數(shù)超過系統(tǒng)的限制。如,模塊的大小、庫文件文件的個(gè)數(shù)超出要求等。引起連接錯(cuò)誤的原因很多,而且很隱蔽,給出的錯(cuò)誤信息也不如編譯時(shí)給出的直接、具體。因此,連接時(shí)的錯(cuò)誤要比編譯錯(cuò)誤更難查找,需要仔細(xì)分析判斷,而且對(duì)系統(tǒng)的限制和要求要有所了解。③運(yùn)行過程中的調(diào)試運(yùn)行過程中的調(diào)試是動(dòng)態(tài)調(diào)試的最后一個(gè)階段。這一階段的錯(cuò)誤大體可分為兩類:A.運(yùn)行程序時(shí)給出出錯(cuò)信息。運(yùn)行時(shí)出錯(cuò)多與數(shù)據(jù)的輸入、輸出格式有關(guān),與文件的操作有關(guān)。如果給出數(shù)據(jù)格式有錯(cuò),這時(shí)要為要有關(guān)的輸入輸出數(shù)據(jù)格式進(jìn)行檢查,一般容易發(fā)現(xiàn)錯(cuò)誤。如果程序中的輸入輸出函數(shù)較多,則可以在中間插入調(diào)試語句,采取分段隔離的方法,很快就可以確定錯(cuò)誤的位置了。如果是文件操作有誤,也可以針對(duì)程序中的有關(guān)文件的操作采取類似的方法進(jìn)行檢查。.運(yùn)行結(jié)果不正常或不正確。1.6在線實(shí)驗(yàn)系統(tǒng)(OnlineJudge)的使用注冊歡迎大家使用ACM在線實(shí)驗(yàn)系統(tǒng)。本系統(tǒng)是供大家把自己寫好的代碼提交給服務(wù)器,由服務(wù)器來判定你所寫的代碼是否正確。0J平臺(tái)功能的簡介:WebBoard:在這里大家可以把自己不會(huì)的題目帖出來,拿出來和其他的人一起討論;當(dāng)然我們也有專門的論壇供大家討論(/modules/newbb/index.php7catM)o大家也可以在這個(gè)論壇里把自己不理解的問題提出來和大家談?wù)摗roblems這里是本平臺(tái)的所以題目,大家可以從這里進(jìn)入選擇你想做的題目。CurrentContest是當(dāng)前正在運(yùn)行的一些比賽或者欄目;PastContests 以前的一些比賽或者欄目;ScheduledContests將要進(jìn)行的一些比賽或者欄目。注冊步驟如下:1)進(jìn)入主頁,/oj/;如圖1-40:QCPCEncodeYourselfandFutureSWUSTCollegiateProgrammingContestJudgeOnlineHome|Problems|Online|Contests|Expenments|User|WebBoard|WelcomeToSWUSTOnlineJudgeSystemComeon,myfriend!Showyourintelligenceinhere.Youcanfindsomeinterestingproblemsandsumbitsolution,getyouraeditintheexperiment,andfindlike-mindedfriends,cellectionproblems,writelogetcIfyouwanttopublishyourproblemsorsetupyourownonlinecontest,justwriteus.Moreinfomation,pleasevisittheSCPC'sblog.Developedby軟件QCPCEncodeYourselfandFutureSWUSTCollegiateProgrammingContestJudgeOnlineHome|Problems|Online|Contests|Expenments|User|WebBoard|WelcomeToSWUSTOnlineJudgeSystemComeon,myfriend!Showyourintelligenceinhere.Youcanfindsomeinterestingproblemsandsumbitsolution,getyouraeditintheexperiment,andfindlike-mindedfriends,cellectionproblems,writelogetcIfyouwanttopublishyourproblemsorsetupyourownonlinecontest,justwriteus.Moreinfomation,pleasevisittheSCPC'sblog.Developedby軟件0903LocoSeci(DuJiongWangLeiJiangKaixiangLinDaigang) , ' ?……—編譯器說明本系卿在僅支特gcc/g++/pasca威洲編譯器嚇面針對(duì)gcc/g++與vc的區(qū)別作簡短說明JJ與4位整數(shù)gcc/g++:(unsigned)longlongvc:(unsigned)_int64jj斑標(biāo)準(zhǔn)C1庫中.沒有l(wèi)ostreamhil個(gè)頭文件(VC6.0支持這個(gè)),使用#indude<iostream>^Qusingnamespacestd,/V圖l?40JudgeOnline主頁2)注冊:點(diǎn)擊Registei?進(jìn)入注冊頁面;如圖1?41所示:3)填寫注冊信息:使用你的學(xué)號(hào)注冊為UserID(注意:以后C語言的考試和實(shí)驗(yàn)考核將以UserID為唯?標(biāo)識(shí));Email填寫你真實(shí)的郵箱地址。RegisterInformation圖1-41JudgeOnline注冊頁面4)4)登陸:圖1-42登陸頁面1.6.2題目提交選擇完題目編寫好代碼時(shí)題目下面的[Submit]對(duì)題目進(jìn)行提交。如圖143。在提交代碼時(shí)應(yīng)注意兩點(diǎn):SubmitYourSolutionViaWebCompiler|g++3Source:Submit圖1-43提交頁面language:如果你是用C++編寫的代碼則選擇G++;如果你是用C語言編寫的代碼你就選擇GCC;否則將出現(xiàn)錯(cuò)誤。提交范例:例如:題目楊輝三角形,題目ID:0086①進(jìn)入0086題目:如圖1-44:楊輝三角形TimeLimit2000MSMemoryLimit655360KBSubmissions41Accepted12Description提至(楊輝三角形大家應(yīng)該都很熟悉這是我國宋朝數(shù)學(xué)家楊輝在公元1261年著書《詳解九章苴法》搜出的.111121133114641151010511615201561我們不難其規(guī)律S1,這些敷拉列的形狀保等腰三角形,兩膜上的數(shù)都是1S2:從右往左斜著看,第一列是31.31,1.1,1:第二列是,1,2.3,5.6i第三列是1?3,6.10.15i第四列是0?第五列是1,5.15i第六列是1,6 .從左往右斜著看,第一列是1,1,1,1,1,1,1,第二列是1,2,3,4,5,6和前面的看法一樣.我發(fā)現(xiàn)這個(gè)數(shù)列是左右對(duì)稱的.S3,上面兩個(gè)數(shù)之和就是下面的一行的數(shù).S4,這行數(shù)是更幾行,就是第二個(gè)數(shù)加一. 現(xiàn)在要求輸入你想輸出楊輝三角形的行數(shù)n.輸出揚(yáng)輝三角形的前誨Input輸入你想輸出楊輝三角形的行數(shù)n(n<=20)當(dāng)輸入網(wǎng)程序結(jié)束Output對(duì)于每一個(gè)輸入的數(shù)輸出其要求的三角形每兩個(gè)輸出數(shù)中間有一個(gè)空格每輸完一個(gè)三角形換行SampleInputTOC\o"1-5"\h\z5 :;7 ?:0 jSampleOutput;i }:ii:121:13 3 1 ;14 6 4 1 :1 :圖1-44題目1015楊輝三角形②在VC++6.0中通過的代碼復(fù)制inta[20][20],n,i,j;while(scanf("%d",&n)tn)For(i=0;i<n;i*+)a[i][0]-1;}ForFor(j-1;j<i;j++)a[i][j]-a[i-1][j-1]*a[i-1][j];For(i-0;i<n;i**)For(j-0;j<-i;j*+)printfC,%d,,,a[i][j]);putchar('\n*);③將代碼粘貼并選擇相應(yīng)的編譯器G++,點(diǎn)擊Submit,如圖1-45:SubmitYourSolutionViaWebCompiler|g++三]Source:?includeotdio.h> Alintmain()(in€a[20][20]rnrirj;while(scanf("%dR,&n),n)(for(i?0;i<n;i4-+)(a[i][0]-l;a[i])for(i-2;i<n;i++)(for(j-1;j<i;j++)(a(U(j]=a[i-l]b-l]+a(i-l](jj;)}for(i?0;l<n;1-?+)(for(j-0;j<-i;j++)(printf("%d",a(i][j]);)pucchar(?\n*);})return0;)dSubmit Rest圖1-45提交代碼④出現(xiàn)ACCEPTED貝ij提交成功,如圖1-46:IProblemIDUserIDResultMemory[KB]Time[MS]CompilerI00861020010060Accepted10200g++圖1-46提交成功1.6.3OJ常見問題及解答Q表示Question,A表示Answer。Q:OnlineJudge(以下簡稱OJ)支持哪些語言?A:目前為止,HDOJ支持C、C++和Pascal三種語言。Q:在0J上我能使用哪些輸入輸出?A:OJ上只能使用標(biāo)準(zhǔn)輸入輸出,您的程序不允許操作文件,否則將被判為'RuntimeError'或者'WrongAnswer*o比如要通過1000這個(gè)題目,您可以使用以下幾種形式的程序:C++代碼:#include<iostream>usingnamespacestd;intmain()inti,j;cin?i?jcout?i+j?endl;return0;)c代碼:#include<stdio.h>intmain(void)(inta,b;scanf("%d%d”,&a,&b);printf("%d\n”,a+b);return0;Q:我提交了程序,0J回復(fù)的那些評(píng)判結(jié)果是什么意思?A:下面是常見的0J評(píng)判結(jié)果以及它們表示的意思:Accepted(AC):您的程序是正確的,恭喜!PresentationError(PE):雖然您的程序貌似輸出了正確的結(jié)果,但是這個(gè)結(jié)果的格式有點(diǎn)問題。請檢查程序的輸出是否多了或者少了空格(’’)、制表符('\t')或者換行符('\n').WrongAnswer(WA):輸出結(jié)果錯(cuò),這個(gè)一般認(rèn)為是算法有問題。RuntimeError(RE):運(yùn)行時(shí)錯(cuò)誤,這個(gè)一般是程序在運(yùn)行期間執(zhí)行了非法的操作造成的。以下列出常見的錯(cuò)誤類型:ACCESS_VIOLATION您的程序想從一些非法的地址空間讀取或向其中寫入內(nèi)容。?般例如相針、數(shù)組下標(biāo)越界都會(huì)造成這個(gè)錯(cuò)誤的。ARRAY_BOUNDS_EXCEEDED您的程序試圖訪問一個(gè)超出硬件支持范圍的數(shù)組單元。FLOAT_DENORMAL_OPER
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技進(jìn)步與項(xiàng)目優(yōu)化
- 專利使用權(quán)及收益分配合同版B版
- 2025年度運(yùn)動(dòng)健身器材試用買賣服務(wù)合同4篇
- 二零二五年度大數(shù)據(jù)中心建設(shè)不可撤銷數(shù)據(jù)安全保密合同3篇
- 2025年度產(chǎn)學(xué)研產(chǎn)學(xué)研合作企業(yè)社會(huì)責(zé)任合作協(xié)議:社會(huì)責(zé)任履行與產(chǎn)業(yè)和諧發(fā)展3篇
- 2025年度文化用品場買賣合同規(guī)范文本4篇
- 二零二五年度獵頭服務(wù)與人才效能提升合作協(xié)議3篇
- 2024藥店門店店長聘用合同范本3篇
- 二零二五年度車輛租賃與車輛租賃行業(yè)規(guī)范制定協(xié)議3篇
- 專用消防設(shè)備增補(bǔ)協(xié)議規(guī)范文本版B版
- 學(xué)霸高中數(shù)學(xué)高中數(shù)學(xué)筆記全冊(最終)
- 熱棒的要點(diǎn)及要求
- 有史以來最完整的App運(yùn)營推廣計(jì)劃方案分享
- 《土地寶懺》2019版定稿
- D3_電生理導(dǎo)管
- 談?wù)?免疫及兒童原發(fā)性免疫缺陷病
- 建設(shè)領(lǐng)域禁止、限制使用落后技術(shù)通告版
- Harris-髖關(guān)節(jié)功能評(píng)分標(biāo)準(zhǔn)(共1頁)
- 成都市優(yōu)質(zhì)結(jié)構(gòu)工程申報(bào)指南
- 小學(xué)四年級(jí)上冊-數(shù)學(xué)口算題精選(分頁打印)
- 【納棺夫日記】
評(píng)論
0/150
提交評(píng)論