freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第16章常見(jiàn)錯(cuò)誤和程序調(diào)試-資料下載頁(yè)

2024-10-04 19:05本頁(yè)面
  

【正文】 以上只是列舉了一些初學(xué)者常出現(xiàn)的錯(cuò)誤,這些錯(cuò)誤大多是對(duì)于 C語(yǔ)法不熟悉之故。對(duì) C語(yǔ)言使用多了,比較熟練了,犯這些錯(cuò)誤自然就會(huì)減少了。在深入使用 C語(yǔ)言后,還會(huì)出現(xiàn)其他一些更深入、更隱蔽的錯(cuò)誤。 程序出錯(cuò)有三種情況: ① 語(yǔ)法錯(cuò)誤。指違背了 C語(yǔ)法的規(guī)定,對(duì)這類錯(cuò)誤,編譯程序一般能給出“出錯(cuò)信息”,并且告訴你在哪一行出錯(cuò)。只要細(xì)心,是可以很快發(fā)現(xiàn)并排除的。 ② 邏輯錯(cuò)誤。程序并無(wú)違背語(yǔ)法規(guī)則,但程序執(zhí)行結(jié)果與原意不符。這是由于程序設(shè)計(jì)人員設(shè)計(jì)的算法有錯(cuò)或編寫(xiě)程序有錯(cuò),通知給系統(tǒng)的指令與解題的原意不相同,即出現(xiàn)了邏輯上的混亂。例如:前面第 9條錯(cuò)誤: sum=0。i=1。 while(i< =100) sum=sum+i。 i++。 語(yǔ)法并無(wú)錯(cuò)誤。但 while語(yǔ)句通知給系統(tǒng)的信息是當(dāng) i≤100時(shí),執(zhí)行“ sum=sum+i?!?。 C系統(tǒng)無(wú)法辨別程序中這個(gè)語(yǔ)句是否符合作者的原意,而只能忠實(shí)地執(zhí)行這一指令。這種錯(cuò)誤比語(yǔ)法錯(cuò)誤更難檢查。要求程序員有較豐富的經(jīng)驗(yàn)。 ③ 運(yùn)行錯(cuò)誤。程序既無(wú)語(yǔ)法錯(cuò)誤,也無(wú)邏輯錯(cuò)誤,但在運(yùn)行時(shí)出現(xiàn)錯(cuò)誤甚至停止運(yùn)行。例如: int a , b , c。 scanf(%d %d, amp。a, amp。b)。 c=b/a。 printf(c=%d\n, c)。 輸入 a和 b的值, 輸出 b/a的值, 程序沒(méi)有錯(cuò)。 但是如果輸入 a的值為 0, 就會(huì)出現(xiàn)錯(cuò)誤。 因此程序應(yīng)能適應(yīng)不同的數(shù)據(jù), 或者說(shuō)能經(jīng)受各種數(shù)據(jù)的“考驗(yàn)” , 具有“健壯性”。 寫(xiě)完一個(gè)程序只能說(shuō)完成任務(wù)的一半 (甚至不到一半 )。調(diào)試程序往往比寫(xiě)程序更難,更需要精力、時(shí)間和經(jīng)驗(yàn)。常常有這樣的情況:程序花一天就寫(xiě)完了,而調(diào)試程序二三天也未能完。有時(shí)一個(gè)小小的程序會(huì)出錯(cuò)五六處,而發(fā)現(xiàn)和排除一個(gè)錯(cuò)誤,有時(shí)竟需要半天,甚至更多。希望讀者通過(guò)實(shí)踐掌握調(diào)試程序的方法和技術(shù)。 程 序 調(diào) 試 所謂程序調(diào)試是指對(duì)程序的查錯(cuò)和排錯(cuò)。 調(diào)試程序一般應(yīng)經(jīng)過(guò)以下幾個(gè)步驟: (1) 先進(jìn)行人工檢查,即靜態(tài)檢查。在寫(xiě)好一個(gè)程序以后,不要匆匆忙忙上機(jī),而應(yīng)對(duì)紙面上的程序進(jìn)行人工檢查。這一步是十分重要的,它能發(fā)現(xiàn)程序設(shè)計(jì)人員由于疏忽而造成的多數(shù)錯(cuò)誤。而這一步驟往往容易被人忽視。有人總希望把一切推給計(jì)算機(jī)系統(tǒng)去做,但這樣就會(huì)多占用機(jī)器時(shí)間。而且,作為一個(gè)程序人員應(yīng)當(dāng)養(yǎng)成嚴(yán)謹(jǐn)?shù)目茖W(xué)作風(fēng),每一步都要嚴(yán)格把關(guān),不把問(wèn)題留給后面的工序。 為了更有效地進(jìn)行人工檢查,所編的程序應(yīng)注意力求做到以下幾點(diǎn):①應(yīng)當(dāng)采用結(jié)構(gòu)化程序方法編程,以增加可讀性 。② 盡可能多加注釋,以幫助理解每段程序的作用 。③ 在編寫(xiě)復(fù)雜的程序時(shí),不要將全部語(yǔ)句都寫(xiě)在 main函數(shù)中,而要多利用函數(shù),用一個(gè)函數(shù)來(lái)實(shí)現(xiàn)一個(gè)單獨(dú)的功能。這樣既易于閱讀也便于調(diào)試,各函數(shù)之間除用參數(shù)傳遞數(shù)據(jù)這一渠道以外,數(shù)據(jù)間盡量少出現(xiàn)耦合關(guān)系,便于分別檢查和處理。 (2) 在人工 (靜態(tài) )檢查無(wú)誤后,才可以上機(jī)調(diào)試。通過(guò)上機(jī)發(fā)現(xiàn)錯(cuò)誤稱動(dòng)態(tài)檢查。在編譯時(shí)給出語(yǔ)法錯(cuò)誤的信息 (包括哪一行有錯(cuò)以及錯(cuò)誤類型 ),可以根據(jù)提示的信息具體找出程序中出錯(cuò)之處并改正之。應(yīng)當(dāng)注意的是:有時(shí)提示的出錯(cuò)行并不是真正出錯(cuò)的行,如果在提示出錯(cuò)的行上找不到錯(cuò)誤的話應(yīng)當(dāng)?shù)缴弦恍性僬摇? 另外,有時(shí)提示出錯(cuò)的類型并非絕對(duì)準(zhǔn)確,由于出錯(cuò)的情況繁多而且各種錯(cuò)誤互有關(guān)聯(lián),因此要善于分析,找出真正的錯(cuò)誤,而不要只從字面意義上死摳出錯(cuò)信息,鉆牛角尖。 如果系統(tǒng)提示的出錯(cuò)信息多,應(yīng)當(dāng)從上到下逐一改正。有時(shí)顯示出一大片出錯(cuò)信息往往使人感到問(wèn)題嚴(yán)重,無(wú)從下手。其實(shí)可能只有一二個(gè)錯(cuò)誤。例如,對(duì)所用的變量未定義,編譯時(shí)就會(huì)對(duì)所有含該變量的語(yǔ)句發(fā)出出錯(cuò)信息。只要加上一個(gè)變量定義,所有錯(cuò)誤都消除了。 (3) 在改正語(yǔ)法錯(cuò)誤 (包括“錯(cuò)誤” (error)和“警告” (warning))后,程序經(jīng)過(guò)連接 (link)就得到可執(zhí)行的目標(biāo)程序。運(yùn)行程序,輸入程序所需數(shù)據(jù),就可得到運(yùn)行結(jié)果。應(yīng)當(dāng)對(duì)運(yùn)行結(jié)果作分析,看它是否符合要求。有的初學(xué)者看到輸出運(yùn)行結(jié)果就認(rèn)為沒(méi)問(wèn)題了,不作認(rèn)真分析,這是危險(xiǎn)的。 有時(shí),數(shù)據(jù)比較復(fù)雜,難以立即判斷結(jié)果是否正確??梢允孪瓤紤]好一批“試驗(yàn)數(shù)據(jù)”,輸入這些數(shù)據(jù)可以得出容易判斷正確與否的結(jié)果。例如解方程 ax2+bx+c=0,輸入 a、 b、 c的值分別為 1時(shí),根 x的值是 1。這是容易判斷的,若根不等于 1,程序顯然有錯(cuò)。 但是,用“試驗(yàn)數(shù)據(jù)”時(shí),程序運(yùn)行結(jié)果正確,還不能保證程序完全正確。因?yàn)橛锌赡茌斎肓硪唤M數(shù)據(jù)時(shí)運(yùn)行結(jié)果不對(duì)。例如,用 x=b177。 b24ac2a公式求根 x的值,當(dāng) a≠0和 b24ac> 0時(shí),能得出正確結(jié)果,當(dāng) a=0或 b24ac< 0時(shí),就得不到正確結(jié)果(假設(shè)程序中未對(duì) a=0作防御處理以及未作復(fù)數(shù)處理 )。因此應(yīng)當(dāng)把程序可能遇到的多種方案都一一試到。例如, if語(yǔ)句有兩個(gè)分支,有可能在流程經(jīng)過(guò)其中一個(gè)分支時(shí)結(jié)果正確,而經(jīng)過(guò)另一個(gè)分支時(shí)結(jié)果不對(duì)。必須考慮周全。 事實(shí)上,當(dāng)程序復(fù)雜時(shí)很難把所有的可能方案全部都試到,選擇典型的情況作試驗(yàn)即可。 (4) 運(yùn)行結(jié)果不對(duì),大多屬于邏輯錯(cuò)誤。對(duì)這類錯(cuò)誤往往需要仔細(xì)檢查和分析才能發(fā)現(xiàn)??梢圆捎靡韵罗k法: ① 將程序與流程圖 (或偽代碼 )仔細(xì)對(duì)照,如果流程圖是正確的話,程序?qū)戝e(cuò)了,是很容易發(fā)現(xiàn)的。例如,復(fù)合語(yǔ)句忘記寫(xiě)花括弧,只要一對(duì)照流程圖就能很快發(fā)現(xiàn)。 ② 如果實(shí)在找不到錯(cuò)誤,可以采取“分段檢查”的方法。在程序不同位置設(shè)幾個(gè) printf函數(shù)語(yǔ)句,輸出有關(guān)變量的值,逐段往下檢查。直到找到在某一段中數(shù)據(jù)不對(duì)為止。這時(shí)就已經(jīng)把錯(cuò)誤局限在這一段中了。不斷縮小“查錯(cuò)區(qū)”,就可能發(fā)現(xiàn)錯(cuò)誤所在。 ③ 也可以用第 9章介紹過(guò)的“條件編譯”命令進(jìn)行程序調(diào)試(在程序調(diào)試階段,若干 printf函數(shù)語(yǔ)句要進(jìn)行編譯并執(zhí)行。當(dāng)調(diào)試完畢,這些語(yǔ)句不要再 編譯了,也不再被執(zhí)行了 )。這種方法可以不必一一刪去 printf函數(shù)語(yǔ)句,以提高效率。 ④ 如果在程序中沒(méi)有發(fā)現(xiàn)問(wèn)題,就要檢查流程圖有無(wú)錯(cuò)誤,即算法有無(wú)問(wèn)題,如有則改正之,接著修改程序。 ⑤ 有的系統(tǒng)還提供 debug(調(diào)試 )工具,跟蹤流程并給出相應(yīng)信息,使用更為方便,請(qǐng)查閱有關(guān)手冊(cè)。 總之,程序調(diào)試是一項(xiàng)細(xì)致深入的工作,需要下功夫、動(dòng)腦子、善于累積經(jīng)驗(yàn)。在程序調(diào)試過(guò)程中往往反映出一個(gè)人的水平、經(jīng)驗(yàn)和科學(xué)態(tài)度。希望讀者能給以足夠的重視。上機(jī)調(diào)試程序的目的決不是為了“驗(yàn)證程序的正確性”,而是“掌握調(diào)試的方法和技術(shù)”。
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1