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

正文內(nèi)容

第16章常見錯誤和程序調(diào)試-資料下載頁

2025-09-25 19:05本頁面
  

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