C語言程序設(shè)計(jì):常見錯誤總結(jié)分析_第1頁
C語言程序設(shè)計(jì):常見錯誤總結(jié)分析_第2頁
C語言程序設(shè)計(jì):常見錯誤總結(jié)分析_第3頁
C語言程序設(shè)計(jì):常見錯誤總結(jié)分析_第4頁
C語言程序設(shè)計(jì):常見錯誤總結(jié)分析_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1常見錯誤總結(jié)分析C 語言程序設(shè)計(jì)2程序出錯有三種情況:1. 語法錯誤指違背了C語法規(guī)定。對這類錯誤,編譯程序一般能給出“出錯信息”,并且告訴你在哪一行出錯。只要細(xì)心,是可以很快發(fā)現(xiàn)并排除的。 3程序并無違背語法規(guī)則,但程序執(zhí)行結(jié)果與原意不符。這是由于程序設(shè)計(jì)人員設(shè)計(jì)的算法有錯或編寫程序有錯,通知給系統(tǒng)的指令與解題的原意不相同,即出現(xiàn)了邏輯上的混亂。2. 邏輯錯誤4程序既無語法錯誤,也無邏輯錯誤,但在運(yùn)行時出現(xiàn)錯誤甚至停止運(yùn)行。3. 運(yùn)行錯誤例如:int a ,b ,c;scanf(%d %d,&a,&b);c=b/a;printf(c=%dn,c);如果輸入a的值為0, 就會出現(xiàn)錯誤。 因此

2、程序應(yīng)能適應(yīng)不同的數(shù)據(jù), 或者說能經(jīng)受各種數(shù)據(jù)的“考驗(yàn)” , 具有“健壯性”5常見錯誤列舉6(1) 忘記定義變量void main()x=3; y=6; printf(%dn,x+y); C要求對程序中用到的每一個變量都必須定義其類型,上面程序中沒有對x、y進(jìn)行定義。應(yīng)在函數(shù)體的開頭加: intx,y;7(2) 輸入輸出數(shù)據(jù)的類型與所用格式說明符不一致例如。 int a=3; float b=4.5; printf(%f%dn,a,b);并不是按照賦值的規(guī)則進(jìn)行轉(zhuǎn)換(如把4.5轉(zhuǎn)換成4),而是將數(shù)據(jù)在存儲單元中的形式按格式符的要求組織輸出。編譯時不給出出錯信息,但運(yùn)行結(jié)果將與原意不符,輸出為

3、0.00000010749214728(3) 輸入變量時忘記使用地址符 int a,b; scanf(“%d%d”,a, b);C語言要求指明“向哪個地址標(biāo)識的單元送值”。應(yīng)寫成scanf(%d%d,&a,&b);9(4) 輸入時數(shù)據(jù)的組織與要求不符假如有以下scanf函數(shù):scanf(%d%d,&a,&b); 按下面的方法輸入數(shù)據(jù):3,4對scanf函數(shù)中格式字符串中除了格式說明符外,對其他字符必須按原樣輸入。想在屏幕上顯示一行提示信息:input a & b:scanf(input a & b:%d,%d,&a,&b);可以另加一個printf函數(shù)語句:printf(input a & b

4、:);scanf(%d,%d,&a,&b);10(5) 誤把“=”作為“等于”比較符在C語言中,“=”是賦值運(yùn)算符,“=”才是關(guān)系運(yùn)算符“等于”。C編譯系統(tǒng)將(a=b)作為賦值表達(dá)式處理,將b的值賦給a,然后判斷a的值是否零,若為非零,則為“真”;若為零則為“假”。這種錯誤在編譯時是檢查不出來的,但運(yùn)行結(jié)果往往是錯的。而且由于習(xí)慣的影響,程序設(shè)計(jì)者自己往往也不易發(fā)覺。int a=3,b=4; if(a=b)printf(“a 等于 b); printf(“a 不等于 b);11(6) 語句后面漏分號 a=3 b=4t=a; a=b; b=t C語言規(guī)定語句末尾必須有分號。編譯時,編譯程序在“a

5、=3”后面未發(fā)現(xiàn)分號,就把下一行“b=4”也作為上一行的語句的一部分,這就出現(xiàn)語法錯誤。有時編譯時指出某行有錯,但在該行上并未發(fā)現(xiàn)錯誤,應(yīng)該檢查上一行是否漏了分號。12(7)在不該加分號的地方加了分號要求:當(dāng)ab時輸出“aislarger than b”的信息。 int a=3,b=4;if(ab);printf(aislarger than bn);由于在if(ab)后加了分號,因此if語句到此結(jié)束。即當(dāng)(ab)為真時,執(zhí)行一個空語句。本來想ab時不輸出上述信息,但現(xiàn)在printf函數(shù)語句并不從屬于if語句,而是與if語句平行的語句。不論ab還是ab,都輸出“a is larger than

6、 b”。13又如先后輸入10個數(shù),每輸入一個數(shù)后輸出它的平方值:for(i=0;i10;i+); scanf(%d,&x); printf(%dn,x*x); 由于在for()后加了一個分號,使循環(huán)體變成了空語句。只能輸入一個整數(shù)并輸出它的平方值。在if、for、while語句中,不要畫蛇添足多加分號。14(8) 對應(yīng)該有花括弧的復(fù)合語句,忘記加花括弧實(shí)現(xiàn)1+2+100,即i。sum=0; i=1; while(i=100) sum=sum+i; i+;上面的循環(huán)體只有sum=sum+i一條語句,而且循環(huán)永不終止。應(yīng)改為while(i=100) sum=sum+i; i+; 15(9) 括弧不

7、配對當(dāng)一個語句中使用多層括弧時常出現(xiàn)這類錯誤,純屬粗心所致。少了一個右括弧 while(c=getchar()!=#) 16(10)引用數(shù)組元素時誤用了圓括弧void main() int i, a(10); for(i=0;i10;i+) scanf(%d,&a(i); C語言中對數(shù)組的定義或引用數(shù)組元素時必須用方括弧。17(11) 在定義數(shù)組時,將定義的“元素個數(shù)”誤認(rèn)為是“可使用的最大下標(biāo)值”void main() int a10=1,2,3,4,5,6,7,8,9,10; int i; for(i=1;iy?x:y);(20) 函數(shù)需先定義后使用,否則需要函數(shù)聲明增加函數(shù)聲明語句voi

8、d main()float max(float x,float y);float x,y,z;x=3.5;y=-7.6;z=max(x,y);printf(%fn,z);float max(float x,float y) float z;return (z=xy?x:y);float max(float x,float y) float z;return (z=xy?x:y);void main()float x,y,z;x=3.5;y=-7.6;z=max(x,y);printf(%fn,z);把函數(shù)定義放前面27如定義函數(shù)首行:int fun(int x,float y,long z)(21) 函數(shù)聲明與函數(shù)定義不匹配在主調(diào)函數(shù)中做聲明:1. float fun(int x, float y, long z);2. int fun(int x, int y, int z);3. int fun(int x, float y);4. in

溫馨提示

  • 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

提交評論