c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)
《C語(yǔ)言調(diào)試常見錯(cuò)誤及修改方法(附習(xí)題)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言調(diào)試常見錯(cuò)誤及修改方法(附習(xí)題)(12頁(yè)珍藏版)》請(qǐng)?jiān)谌巳宋膸?kù)網(wǎng)上搜索。
1、1.調(diào)試C程序時(shí)常見的錯(cuò)誤類型分析 一般情況下,錯(cuò)誤主要分為兩大類:一、語(yǔ)法錯(cuò)誤。對(duì)于這種錯(cuò)誤,用編譯器很容易解決。所以,改錯(cuò)題的第一步是先編譯,解決這類語(yǔ)法錯(cuò)誤。下面總結(jié)了二級(jí)C語(yǔ)言上機(jī)改錯(cuò)題中常見的語(yǔ)法錯(cuò)誤:(1)丟失分號(hào),或分號(hào)誤寫成逗號(hào)。(2)關(guān)鍵字拼寫錯(cuò)誤,如本來小寫變成大寫。(3)語(yǔ)句格式錯(cuò)誤,例如for語(yǔ)句中多寫或者少寫分號(hào)。(4)表達(dá)式聲明錯(cuò)誤,例如:少了()(5)函數(shù)類型說明錯(cuò)誤。與main()函數(shù)中不一致。(6)函數(shù)形參類型聲明錯(cuò)誤。例如:少*等。(7)運(yùn)算符書寫錯(cuò)誤,例如:/寫成了。二、邏輯錯(cuò)誤,或者叫語(yǔ)義錯(cuò)誤,這和實(shí)現(xiàn)程序功能緊密相關(guān),一般不能用編譯器發(fā)現(xiàn)。對(duì)于邏輯錯(cuò)誤。
2、可以按這樣的步驟進(jìn)行查找。(1)先讀試題,看清題目的功能要求。(2)通讀程序,看懂程序中算法的實(shí)現(xiàn)方法。(3)細(xì)看程序,發(fā)現(xiàn)常見錯(cuò)誤點(diǎn)。2.改錯(cuò)題的改錯(cuò)方式總結(jié),當(dāng)然這些總結(jié)只能對(duì)大部分改錯(cuò)行有效。 1、若錯(cuò)誤行是函數(shù)首部,可分為以下幾種情況: A、該行最后若有分號(hào)則刪除,中間若有分號(hào)則改成逗號(hào) B、形參類型不一致的問題,特別是指針類型,若后面用到某形參時(shí)有指針運(yùn)算則該形參必為指針類型;若形參是二維數(shù)組或指向m個(gè)元素的指針變量,則第二維的長(zhǎng)度必須與main中對(duì)應(yīng)數(shù)組的第二維長(zhǎng)度相同 C、函數(shù)類型不一致的問題,若函數(shù)中沒有return語(yǔ)句則函數(shù)類型為void,若有return語(yǔ)句則函數(shù)的類型必須。
3、與return后變量的類型一致。 2、若錯(cuò)誤行是if或while語(yǔ)句,則首先看有沒有用小括號(hào)將整個(gè)表達(dá)式括起,若沒有則加上小括號(hào)。 3、若錯(cuò)誤行中有if、while、for則要特別注意條件表達(dá)式的錯(cuò)誤問題: A、指針變量的應(yīng)用,若表達(dá)式中有指針變量且沒有指針運(yùn)算符,則加上指針運(yùn)算符 B、若條件表達(dá)式中只有一個(gè)等于號(hào),則改成兩個(gè)等于號(hào),若為其它比較運(yùn)算符則一般是進(jìn)行逆轉(zhuǎn)或加一個(gè)等于號(hào) C、for中要用分號(hào)分隔表達(dá)式,而不是用逗號(hào) 4、語(yǔ)法錯(cuò)誤 A、語(yǔ)句缺少分號(hào),若錯(cuò)誤行中有語(yǔ)句沒有用分號(hào)結(jié)束,則加上分號(hào)。 B、大小寫不對(duì),若錯(cuò)誤行中有大寫字母則一般都改成小寫字母。 5、指針變量的運(yùn)用,若錯(cuò)誤行中。
4、有指針變量,并且該變量名前沒有指針運(yùn)算符則一般都是加上指針運(yùn)算符 6、若錯(cuò)誤行為return語(yǔ)句,則首先看是否是缺少分號(hào)若是則加上分號(hào)即可;否則就是return后的變量或表達(dá)式錯(cuò)誤(此時(shí)可通過看題意,來分析該返回哪一變量或表達(dá)式) 7、若錯(cuò)誤行中見到整型1除以某個(gè)表達(dá)式時(shí),一概改成1.0。但若是整型變量或表達(dá)式則只能用強(qiáng)制轉(zhuǎn)換 8、復(fù)合運(yùn)算符寫錯(cuò) 9、字符串結(jié)束符寫錯(cuò),若有字符串結(jié)束符則要特別注意有沒有寫錯(cuò),但第11題例外,因?yàn)樵擃}是要將數(shù)字字符轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字。 10、若錯(cuò)誤行是定義語(yǔ)句,則首先看類型是否符合;再看所賦初值是否正確;若以上均不是,則看是否少定義了某個(gè)變量或少了花括號(hào)。 11、。
5、表達(dá)式錯(cuò)誤(占的份量最多,并且沒有統(tǒng)一的改法,我們只能通過題目要求來分析并修改) 12、若錯(cuò)誤行中有一條橫線,則必須將橫線刪除再填空。填空題中亦是如此。 例題/*1.下面給定的程序的功能是:讀入一個(gè)整數(shù)k(22 #include 3 IsPrime(int n);4 5 int i,m;6 m=1;7 for(i=2;i#include IsPrime(int n)int i,m;m=1;for(i=2;i=0; i-) /參考答案:for (i=sl, j=0; i=0; i-=2)/ t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = 0; /參考答案:t。
6、2*j = 0;/main() char s100, t100;clrscr();printf(nPlease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %sn, t);第6題給定程序MODI1.C中函數(shù) fun 的功能是:將在字符串s中下標(biāo)為奇數(shù)位置上的字符,緊隨其后重復(fù)出現(xiàn)一次,放在一個(gè)新串t中,t中字符按原字符串中字符出現(xiàn)的逆序排列。(注意0為偶數(shù))例如:當(dāng)s中的字符串為:ABCDEFG時(shí),則t中的字符串應(yīng)為:FFDDBB。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增。
7、行或刪行,也不得更改程序的結(jié)構(gòu)!Modi1.c#include#include#includevoid fun (char *s, char *t) int i, j, sl;sl = strlen(s);/*found*/if(sl%2) Sl-=2; else Sl-; /參考答案:if(sl%2) sl-=2; else sl-;/for (i=sl, j=0; i=0; i-=2) t2*j = si;t2*j +1 = si;j+;/*found*/t2*sl = 0; /參考答案:t2*j = 0;/main() char s100, t100;clrscr();printf(nP。
8、lease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %sn, t);第7題給定程序MODI1.C中函數(shù) fun 的功能是:把在字符串s中出現(xiàn)的每個(gè)字符,緊隨其后重復(fù)出現(xiàn)一次,形成一個(gè)新串放在t中,且在t中把原相鄰字符的位置進(jìn)行了交換。例如:當(dāng)s中的字符串為:ABCDE時(shí),則t中的字符串應(yīng)為:BBAADDCCEE。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!Modi1.c#include#include#includevoid fun (ch。
9、ar *s, char *t)/*found*/int i, j; /參考答案:int i,j,sl;/sl = strlen(s);for (i=0, j=0; i if (i+1 tl) /參考答案:if (j=tl)*u+ = si;*u = 0;main() char s100, t100, u100;clrscr();printf(nPlease enter string s:); scanf(%s, s);printf(nPlease enter string t:); scanf(%s, t);fun(s, t, u);printf(the result is: %sn, u);。
10、第9題給定程序MODI1.C中函數(shù) fun 的功能是:將未在字符串s中出現(xiàn)而在字符串t中出現(xiàn)的字符形成一個(gè)新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。例如:當(dāng)s = ABCDE,t = BDFGG時(shí),u中的字符串為FGG。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!Modi1.c#include#include#includevoid fun (char *s, char *t, char *u) int i, j, sl, tl;sl = strlen(s); tl = strlen(t);/*f。
11、ound*/for (i=0; i/*found*/ for (j=0; jif (ti = sj) break;if (j=sl) *u+ = ti;/*found*/u = 0; /參考答案 *u = 0;main() char s100, t100, u100;clrscr();printf(nPlease enter string s:); scanf(%s, s);printf(nPlease enter string t:); scanf(%s, t);fun(s, t, u);printf(The result is: %sn, u);第10題給定程序MODI1.C中函數(shù) fun。
12、 的功能是:將既在字符串s中出現(xiàn)又在字符串t中出現(xiàn)的字符構(gòu)成一個(gè)新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字符。例如:當(dāng)s=ABBCDE,t=BDFG時(shí),u中的字符串為:BBD。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!Modi1.c#include#include#includevoid fun (char *s, char *t, char *u) int i, j, sl, tl;sl = strlen(s); tl = strlen(t);for (i=0; i for (j=0; jif (si = tj) break;/*found*/if (j=tl) /參考答案if (j*u+ = si;/*found*/*u = 0; /參考答案*u = 0;main() char s100, t100, u100;clrscr();printf(nPlease enter string s:); scanf(%s, s);printf(nPlease enter string t:); scanf(%s, t);fun(s, t, u);printf(The result is: %sn, u。
總結(jié)
以上是生活随笔為你收集整理的c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言 程序循环,C语言程序设计-循环例
- 下一篇: 招商证券开户佣金多少