




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.調(diào)試C程序時(shí)常見的錯(cuò)誤類型分析 一般情況下,錯(cuò)誤主要分為兩大類:一、語法錯(cuò)誤。對(duì)于這種錯(cuò)誤,用編譯器很容易解決。所以,改錯(cuò)題的第一步是先編譯,解決這類語法錯(cuò)誤。下面總結(jié)了二級(jí)C語言上機(jī)改錯(cuò)題中常見的語法錯(cuò)誤:(1)丟失分號(hào),或分號(hào)誤寫成逗號(hào)。(2)關(guān)鍵字拼寫錯(cuò)誤,如本來小寫變成大寫。(3)語句格式錯(cuò)誤,例如for語句中多寫或者少寫分號(hào)。(4)表達(dá)式聲明錯(cuò)誤,例如:少了()(5)函數(shù)類型說明錯(cuò)誤。與main()函數(shù)中不一致。(6)函數(shù)形參類型聲明錯(cuò)誤。例如:少*等。(7)運(yùn)算符書寫錯(cuò)誤,例如:/寫成了。二、邏輯錯(cuò)誤,或者叫語義錯(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語句則函數(shù)類型為void,若有return語句則函數(shù)的類型必須
3、與return后變量的類型一致。 2、若錯(cuò)誤行是if或while語句,則首先看有沒有用小括號(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、語法錯(cuò)誤 A、語句缺少分號(hào),若錯(cuò)誤行中有語句沒有用分號(hào)結(jié)束,則加上分號(hào)。 B、大小寫不對(duì),若錯(cuò)誤行中有大寫字母則一般都改成小寫字母。 5、指針變量的運(yùn)用,若錯(cuò)誤行中
4、有指針變量,并且該變量名前沒有指針運(yùn)算符則一般都是加上指針運(yùn)算符 6、若錯(cuò)誤行為return語句,則首先看是否是缺少分號(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ò)誤行是定義語句,則首先看類型是否符合;再看所賦初值是否正確;若以上均不是,則看是否少定義了某個(gè)變量或少了花括號(hào)。 11、
5、表達(dá)式錯(cuò)誤(占的份量最多,并且沒有統(tǒng)一的改法,我們只能通過題目要求來分析并修改) 12、若錯(cuò)誤行中有一條橫線,則必須將橫線刪除再填空。填空題中亦是如此。 例題/*1.下面給定的程序的功能是:讀入一個(gè)整數(shù)k(2=k=10000),打印他所有的質(zhì)因子(即所有為素?cái)?shù)的的質(zhì)因子)。例如,若輸入整數(shù)2310,則應(yīng)輸出:2、3、5、7、11。請(qǐng)改正程序中的錯(cuò)誤,使程序得到正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:1 #include 2 #include 3 IsPrime(int n);4 5 int i,m;6 m=1;7 for(i=2;in;i+)8
6、if!(n%i)9 10 m=0;break;11 12 return(m);13 14 main()15 16 int j,k;17 clrscr();18 printf(nPlease enter an integer nunber 2 and 10000:);scanf(%d,&k);19 printf(nnThe Prime factor(s) of %d is (are):,k);20 for(j=2;j=k;j+)21 if(!(k%j)&(IsPrime(j)22 printf(n %4d,j);23 printf(n);24 試題解答及分析錯(cuò)誤一:第三行的末尾不需要分號(hào),這并不
7、是一個(gè)語句的結(jié)束,這是一個(gè)函數(shù)的頭部;錯(cuò)誤二:第八行應(yīng)該該為if(!(n%i),這是由if語句的執(zhí)行過程決定的,if語句先判斷緊跟著它的()里面的條件的真假,如果真執(zhí)行下面的語句,如果是多條語句可以用括起來如果嫁就跳過直接執(zhí)行下面的語句但這個(gè)if語句中把括號(hào)忘了。自然出錯(cuò);程序整體分析我們的題目要求判斷求出一個(gè)整數(shù)的所有質(zhì)因子我們可以求出它所有的因子,再看這些因子中哪些是素?cái)?shù)不就行了,程序先通過scanf(%d,%k);從鍵盤讀入一個(gè)整數(shù),接著我們開始循環(huán),對(duì)于2到k之間的每一個(gè)j;用!(k%j)判斷j是不是k的因子,如果是的話,k%j=0,則非0就是真的,再用一個(gè)判斷它是不是素?cái)?shù)的函數(shù)IsP
8、rime(int n)來判斷它是不是素?cái)?shù),如果是的話就是我們所求的。IsPrime()函數(shù)分析,函數(shù)語句的意思是,只要2到n中有任意一個(gè)數(shù)有能被n整除的話,就返回0(假),否則返回1(真),我們看一下循環(huán)體if(!(n%i))這個(gè)語句的分析上面有,只要n能把i整除的話m=0,break語句會(huì)使程序立刻跳出循環(huán)體,執(zhí)行return (m);語句。*/#include #include IsPrime(int n)int i,m; m=1; for(i=2;in;i+) if(!(n%i) m=0;break; return(m); main() int j,k; clrscr(); printf
9、(nPlease enter an integer nunber 2 and 10000:);scanf(%d,&k); printf(nnThe Prime factor(s) of %d is (are):,k); for(j=2;j=0; i-) /參考答案: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(nPlease enter string s:); scanf(%s, s)
10、;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ù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!Modi1.c#include#include#includevoid fun (char *s, char *t) int i, j, s
11、l;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(nPlease enter string s:); scanf(%s, s);fun(s, t);printf(The result is: %sn, t);第7題給定程序MO
12、DI1.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 (char *s, char *t)/*found*/int i, j; /參考答案:int i,j,sl;/sl = strlen(s);for (i=0, j=0; i if
13、 (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);第9題給定程序MODI1.C中函數(shù) fun 的功能是:將未在字符串s中出現(xiàn)而在字符串t中出現(xiàn)的字符形成一個(gè)新的字符串放在u中,u中字符按原字符串中字符順序排列,不去掉重復(fù)字
14、符。例如:當(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);/*found*/for (i=0; i/*found*/ for (j=0; jif (ti = sj) break;if (j=sl) *u+ = ti;/*found*/u
15、 = 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 的功能是:將既在字符串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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子包裝買賣合同4篇
- 3G系列鼠標(biāo)2025年度銷售代理合同2篇
- 專業(yè)車輛考試題庫及答案
- 上海安全員B證考試題庫及答案
- 胰腺疾病術(shù)后護(hù)理
- 家具商場(chǎng)出租合同6篇
- 工業(yè)設(shè)計(jì)美學(xué)分享
- T/ZJSEE 0014-2023集中壓縮空氣綜合供應(yīng)系統(tǒng)建設(shè)質(zhì)量驗(yàn)收規(guī)程
- 新型疫苗:亞單位疫苗項(xiàng)目績(jī)效評(píng)估報(bào)告
- 木聚糖酶項(xiàng)目績(jī)效評(píng)估報(bào)告
- 上海市同濟(jì)大學(xué)第二附屬中學(xué)2024-2025學(xué)年八年級(jí)下冊(cè)期末物理試卷
- 2025年液壓馬達(dá)開發(fā)行業(yè)深度研究報(bào)告
- 樹木移栽施工協(xié)議書
- 手術(shù)前抗凝藥停用時(shí)間
- 租地解除合同協(xié)議書
- 2025智能礦山暨無人駕駛行業(yè)藍(lán)皮書-億歐智庫
- 2025湖北水發(fā)集團(tuán)園招聘40人筆試參考題庫附帶答案詳解
- 2025年人工智能應(yīng)用技術(shù)考試試題及答案
- 2024北森圖形推理題
- 2025年全國(guó)國(guó)家版圖知識(shí)競(jìng)賽賽(附答案)
- 2025年社區(qū)工作者考試試題及答案
評(píng)論
0/150
提交評(píng)論