《C語言程序糾錯》PPT課件.ppt_第1頁
《C語言程序糾錯》PPT課件.ppt_第2頁
《C語言程序糾錯》PPT課件.ppt_第3頁
《C語言程序糾錯》PPT課件.ppt_第4頁
《C語言程序糾錯》PPT課件.ppt_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、程序改錯,2,程序改錯,是個大悲大喜的過程,一天之內(nèi)可以讓人在悲傷的低谷和喜悅的巔峰之間跌宕起伏。 如果改過了成千上萬個錯誤, 改錯很像偵破案件,有壞事發(fā)生了,而僅有的信息是它的確發(fā)生了。 必須從結(jié)果出發(fā),逆向思考,3,程序改錯,改錯的第一步是找出錯誤的根源,然后對癥下藥 尋找錯誤根源的過程稱為調(diào)試。,4,程序改錯,難點(diǎn)在于: 癥狀和根源可能相隔很遠(yuǎn) 有人問阿凡提:“我肚子疼,該用什么藥?” 癥狀可能在另一個錯誤被糾正后暫時消失 癥狀并不是某個程序錯誤引發(fā)的,如誤差累積 癥狀可能時隱時現(xiàn),如“內(nèi)存泄露” 很難產(chǎn)生完全一樣的輸入條件,難以恢復(fù)“錯誤的現(xiàn)場”,5,程序中常見的出錯原因,編譯錯誤 指

2、在編譯過程中發(fā)現(xiàn)的錯誤,通常屬于語法錯誤,即編寫的語句不符合C語言的語法規(guī)則。 Undefined symbol xxx 標(biāo)識符xxx未定義 Expression syntax error 表達(dá)式語法錯誤 Too few parameter in call 函數(shù)調(diào)用時的實(shí)參少于函數(shù)的形參,6,程序中常見的出錯原因,運(yùn)行錯誤 指在程序運(yùn)行時發(fā)生的錯誤 往往是由于語義上的錯誤造成的,即語句雖然合乎語法,但要求計算機(jī)去做不該做或做不到的事情。 例如當(dāng)用0做除數(shù)時,運(yùn)行后將顯示“Division by zero”錯誤提示信息,并立即返回編輯屏幕。查看運(yùn)行結(jié)果時,可在User screen(用戶屏幕)上

3、看到給出的錯誤提示信息。,7,邏輯錯誤 程序中有邏輯錯時,不影響程序運(yùn)行并得到運(yùn)行結(jié)果,只是運(yùn)行結(jié)果不正確。比較隱蔽,出錯后不易查找。 累加求和運(yùn)算時,累加和變量忘記了賦初值; 累乘運(yùn)算時,累乘變量初值賦值為0; 函數(shù)聲明時的返回值數(shù)據(jù)類型與實(shí)際返回的數(shù)據(jù)類型不一致,導(dǎo)致自動類型轉(zhuǎn)換 數(shù)組下標(biāo)越界(即超出了定義的范圍); 程序中存在死循環(huán);,程序中常見的出錯原因,8,程序改錯,在程序設(shè)計語言的發(fā)展中,一個重要的努力方向就是想通過語言特征的設(shè)計幫助避免錯誤 如下標(biāo)范圍檢查,受限制的指針甚至完全取消指針,內(nèi)存回收,強(qiáng)類型檢查 但沒有任何語言能防止我們犯錯誤,每個為預(yù)防某些問題而設(shè)置的語言特征都會帶

4、給它自身額外的代價 作為程序員應(yīng)知道所用語言中有潛在危險和引起錯誤傾向的那些語言特征 如goto語句,全局變量,無限制的指針,自動類型轉(zhuǎn)換 世界上最好的調(diào)試工具是那些有經(jīng)驗的人,9,調(diào)試的基本方法,“粗分細(xì)找” 定位大致的范圍:歸納、推理、二分、排除 縮減輸入數(shù)據(jù) 設(shè)法找到能導(dǎo)致失敗的最小輸入 采用注釋的辦法切掉一些代碼 減少有關(guān)的代碼區(qū)域,調(diào)試無誤后再將它們打開注釋,即采用分而治之的策略將問題局部化 利用調(diào)試工具 逐條語句跟蹤 插入打印語句 觀看屏幕輸出結(jié)果,10,錯誤案例,關(guān)系運(yùn)算符= 錯寫成 賦值運(yùn)算符= if (a = b) printf(yes); /*運(yùn)行結(jié)果錯誤*/ Warnin

5、g:Possibly incorrect assignment in function main if (a = b) printf(yes); /*正確*/ = 表示賦值操作 = 表示比較是否相等的操作,11,錯誤案例,while后面有分號 while (n 100); n+; 循環(huán)體為空語句,導(dǎo)致死循環(huán) for后的表達(dá)式2省略 for (n=1; ;n+) /*死循環(huán)*/,12,錯誤案例,判斷字符是大寫字符或者小寫字符 (a =a int sum; sum = a + b; TC下編譯,不提示任何錯誤 VC下編譯 warning C4244: = : conversion from dou

6、ble to int , possible loss of data,14,錯誤案例,函數(shù)聲明時的返回值類型與實(shí)際返回的數(shù)據(jù)類型不一致,導(dǎo)致自動類型轉(zhuǎn)換 double Add(double a, double b) int sum; return sum; 不提示任何錯誤 int Add(double a, double b) double sum; return sum; warning C4244: return : conversion from double to int , possible loss of data,15,錯誤案例,#include stdio.h #include

7、 math.h int main() int a=4,b=8,c; c=sqrt(a); printf(%d %dn,c,b); printf(%d %dn,(int)sqrt(a),b); printf(%f %dn,sqrt(a),b); printf(%d %dn,sqrt(a),b); return 0; ,16,錯誤案例,數(shù)組下標(biāo)越界 int a10,i,sum; for (i=1; i=10; i+) sum = sum + ai; 不提示任何錯誤,或者提示W(wǎng)ritten、read之類信息,17,關(guān)于代碼風(fēng)格問題,縮進(jìn)(indent)保證代碼整潔、層次清晰的主要手段,int isp

8、rime(int n) int k,i; k=sqrt(double)n); for (i=2;i=k;i+) if(n%i=0) return 0; return 1; ,#include int main() int i; for (i=2;i100;i+) if(isprime(i) printf(%dt,i); return 0; ,18,關(guān)于代碼風(fēng)格問題,良好風(fēng)格的程序應(yīng)嚴(yán)格采用梯形層次對應(yīng)好各層次,int isprime(int n) int k, i; k = sqrt(double)n); for (i=2; i=k; i+) if (n % i = 0) return 0; return 1; ,#include int main() int i; for (i=2; i100; i+) if (isprime(i) printf(%dt,i); return 0; ,19,程序版式,現(xiàn)在的許多開發(fā)環(huán)境

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論