C語言實(shí)習(xí)內(nèi)容_第1頁
C語言實(shí)習(xí)內(nèi)容_第2頁
C語言實(shí)習(xí)內(nèi)容_第3頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C 語言程序設(shè)計(jì)實(shí) 習(xí) 指 導(dǎo) 書黃河水利職業(yè)技術(shù)學(xué)院自動(dòng)化工程系目錄一、實(shí)習(xí)的目的和意義 2 頁二 、 實(shí) 習(xí)內(nèi) 容2 頁(一)三種基本結(jié)構(gòu)應(yīng)用練習(xí) 2 頁1根據(jù)字母判斷是星期幾2 頁2輸出正弦曲線4頁3 完全 數(shù)頁( 二 ) 函 數(shù) 6 頁 4求最大公約數(shù)與最小公倍數(shù)6 頁5遞歸函數(shù)的應(yīng)用頁(三)數(shù)組應(yīng)用 8 頁6選擇法排序8 頁7打印楊輝三角形9 頁8字符數(shù)組應(yīng)用 10 頁(四)指針應(yīng)用10 頁9指針處理數(shù)據(jù)交換問題 10 頁10用指針處理矩陣轉(zhuǎn)置問題11 頁(五)文件操作及C 的圖形處理12 頁11字母大小寫轉(zhuǎn)化并在磁盤中保存12 頁12閃動(dòng)的多彩圓13 頁三、實(shí)習(xí)時(shí)間安排及成績?cè)u(píng)定辦

2、法15 頁四、Turbo C 2.0 集成開發(fā)環(huán)境的使用介紹 16 頁(一)主菜單16 頁(二)Turbo C 2.0 的工作環(huán)境的確立 24 頁(三)程序動(dòng)態(tài)調(diào)試的方法26 頁五、常見錯(cuò)誤提示信息27 頁一、實(shí)習(xí)的目的和意義“CC行的實(shí)踐教學(xué)環(huán)節(jié),其目的是培養(yǎng)學(xué)生具有初步的 C 語言程序設(shè)計(jì)、編程、調(diào)試和排除 C握 C的基本方法。通過實(shí)習(xí),使學(xué)生將程序設(shè)計(jì)的理論知識(shí)與實(shí)踐相結(jié)合,為學(xué)生 學(xué)習(xí)其他計(jì)算機(jī)編程語言打下基礎(chǔ)。在一周的實(shí)習(xí)時(shí)間里,學(xué)生要認(rèn)真復(fù)習(xí)基本概念,獨(dú)立編寫程序,并上機(jī) 經(jīng)驗(yàn)豐富的人,當(dāng)編譯時(shí)出現(xiàn)“出錯(cuò)信息”時(shí),能很快地判斷出錯(cuò)誤所在,并 改正之。而缺乏經(jīng)驗(yàn)的人即使在系統(tǒng)給出明確

3、出錯(cuò)提示信息下也往往找不出錯(cuò) 誤而求救于別人。對(duì)于學(xué)生來說,不僅要了解和熟悉有關(guān)理論和方法,還要求些經(jīng)驗(yàn)是只能“意會(huì)”難以“言傳C 語言程序設(shè)計(jì)之后,每個(gè)學(xué)生應(yīng)當(dāng)掌握的一項(xiàng)基本功。因此,在實(shí)習(xí)時(shí)千萬不要在程序通過后就認(rèn)為完成任務(wù)了,而應(yīng) 當(dāng)在已通過的程序基礎(chǔ)上作一些改動(dòng)(改變輸入數(shù)據(jù)的方法等,甚至于“自設(shè)障礙scanf ”符號(hào),使數(shù)組下標(biāo)越界,使整數(shù)溢出等,觀察和分析所出現(xiàn)的情況,并認(rèn)真、及時(shí)總結(jié)。這樣的學(xué)習(xí)是靈活主動(dòng)的學(xué)習(xí) 而不是呆板被動(dòng)的學(xué)習(xí),才會(huì)有真正的收獲。二、實(shí)習(xí)內(nèi)容(一)三種基本結(jié)構(gòu)應(yīng)用練習(xí)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等三種結(jié)構(gòu)是C 語言程序設(shè)計(jì)的三種基本結(jié)構(gòu),嚴(yán)格來說,所有的 C

4、 安排這三種基本結(jié)構(gòu)的應(yīng)用練習(xí),旨在使學(xué)生對(duì)于這三種結(jié)構(gòu)有一個(gè)更加深刻的理解,能夠根據(jù)處理問題的需要選擇不同的結(jié)構(gòu)進(jìn)行處理。由于順序結(jié)構(gòu)在這三種結(jié)構(gòu)中是最基本的,實(shí)際上當(dāng)我們把程序中的選擇結(jié)構(gòu)部分和循環(huán)結(jié)構(gòu)部分看作一個(gè)整體時(shí),那么,整個(gè)程序就總是由順序結(jié)構(gòu)組成的了。在此我們不再布置專門練習(xí)順序結(jié)構(gòu)的題目,主要給學(xué)生提供幾個(gè)有關(guān)選擇控制語句和循環(huán)控制的練習(xí)。根據(jù)字母判斷是星期幾題目如下:平時(shí)我們看到 M 時(shí)就想到星期一,看到 W 時(shí)就想到星期三, 請(qǐng)用 C 語言程序編寫當(dāng)輸入星期幾的第一個(gè)字母就判斷出是星期幾,如果第一個(gè)字母一樣,則用第二個(gè)字母來判斷。要求輸入為字母Y時(shí),結(jié)束判斷。題目分析本題要

5、求使用C 語言的switch 判斷是星期幾。本題的目的是讓學(xué)生掌握多分支switch 語句的用法。當(dāng)一個(gè)表達(dá)式取不同的值時(shí),則會(huì)有不同的結(jié)果,所以用多分支switch 語句來解決輸入不同的字母而輸出不同值的方法比較好,如果第一個(gè)字母一樣, 如星期二和星期四Tuesday 和Thursda,則用if 語句判斷第二個(gè)字母,這樣 星期幾相同的字母時(shí),則可給出提示信息: printf(“PLEASE INPUT SECONDLETTERn”),這樣就可以判斷是星期幾了。另外為了實(shí)現(xiàn)可以多次進(jìn)行判斷, 此題還需用循環(huán)進(jìn)行控制。當(dāng)輸入字符不為Y時(shí)M輸出Monday;break;判斷輸入的第 2 個(gè)字符=u

6、當(dāng)輸入字符不為Y時(shí)M輸出Monday;break;判斷輸入的第 2 個(gè)字符=u真(T)2 個(gè)字符=h假(F)T輸出Tuesday真(T)假(F)S2 個(gè)字符u輸出Saturday真(T)輸出Sunday假(F)輸出DATA ERROR!break;其它輸出DATAERROR!根據(jù)輸出Thursday輸出DATA ERROR!輸入break;字符W輸出Wednesday;break;確定F輸出Friday;break;是星判斷輸入的第 2 個(gè)字符=a期幾真(T)假(F)圖 1關(guān)鍵程序提示輸入字母為“Y”時(shí)結(jié)束判斷,可用如下所示的表達(dá)式作為條件:(letter=getchar()!=Y)lette

7、r*/當(dāng)輸入S,再輸入a 時(shí)則輸出星期六,而再輸入為u 時(shí),則輸出星期天, 否則就輸出錯(cuò)誤,這一過程可用如下程序?qū)崿F(xiàn):case S:printf(“please input second lettern”);if (letter=getchar()=a) printf(“Saturdayn”); else if(letter=getchar()=u) printf(“Sundayn”); else printf(“DATA ERROR!n”);break;輸出正弦曲線題目如下:以下程序可以輸出 sin(x)函數(shù) 02的圖形。(請(qǐng)學(xué)生自行上機(jī)驗(yàn)證)#include main()#include

8、main()double x; intfor(i=1;i80;i+)if(i= =40) printf(“*”);elseprintf(“-”);printf(“n”);for (x=10.0;xy?40:y; for(i=1;i=yy;i+)if(i= =y)printf(“*”);else if(i= =40) printf(“|”);else printf2printf(“n”);根據(jù)以上程序,編寫程序,打印出如圖2 所示正弦函數(shù)圖形。題目分析此題主要考查 for 循環(huán)語句的應(yīng)用。通過循環(huán)語句控制在輸出屏幕上的不同位置打印空格和非空格字符(*,從而可以輸出按一定規(guī)律排列的圖形。此類問題的

9、關(guān)鍵是正確控制空格字符的插入位置及個(gè)數(shù),以及不同 行所應(yīng)插入的非空格字符的個(gè)數(shù)。在解決時(shí)還要注意回車的控制。請(qǐng)學(xué)生認(rèn)真 分靈活運(yùn)用完成本題后,學(xué)生可根據(jù)各自情況,選做下面的題目,以達(dá)到靈活運(yùn)用的目的。選做題一:通過循環(huán)實(shí)現(xiàn)打印出如圖3 所示的菱形圖案。* * * * * * * *完全數(shù)題目如下:編寫一個(gè)程序,求出500 以內(nèi)的所有完全數(shù)(等于它的因子(自身除外)6=1+2+3,則6 是完全數(shù))題目分析本題使用了 C 語言中的循環(huán),輸出 500 以內(nèi)的所有完全數(shù)。目的是讓學(xué)生掌握完全數(shù)的概念及多種循環(huán)語句的區(qū)別。5001-500500然后再把每個(gè)數(shù)的因子加起來,但不能加上它本身,同時(shí)再利用if

10、 條件語句, 看這個(gè)數(shù)本身是不是等于所有因子的和(它自身除外。本例使用dowhile 語句,while 語句與 dowhilefor1 題寫出本題的N-S 圖。關(guān)鍵程序提示判斷i 是否是a 的公約數(shù)的條件可表示為:(a%i=0 )利用 dowhile 語句把某個(gè)數(shù)的公約數(shù)加起來,可用下面的程序段來實(shí)現(xiàn):do if (a%i=0)/*i 是否可整除a*/sum=sum+i;若能整除,則累加到變量sum 內(nèi)i+;while(i=a/2);說明此題的求解類似于我們?cè)鲞^的求“水仙花數(shù)”的程序,學(xué)生可以參照求“水仙花”數(shù)的程序編寫出本題的程序。(二)函數(shù)我們?nèi)绻?C 語言進(jìn)行大程序設(shè)計(jì),一般采用模

11、塊化的思想。其基本思想是將一個(gè)大的程序按照功能進(jìn)行分割成一些模塊,使每一個(gè)模塊都成為功能單一、結(jié)構(gòu)清晰、接口簡單、容易理解的小程序。C 語言是用函數(shù)來實(shí)現(xiàn)這種模塊化功能的。我們用 C 語言設(shè)計(jì)程序,任務(wù)只有一種,就是編寫函數(shù),至少也要編寫一個(gè) main()函數(shù)。根據(jù)程序的復(fù)雜程度,還可以編寫多個(gè)子函數(shù)。在這一部分我們就通過練習(xí)進(jìn)一步掌握用子函數(shù)來進(jìn)行模塊化程序設(shè)計(jì)的方法, 熟悉子函數(shù)的調(diào)用和執(zhí)行過程。求最大公約數(shù)與最小公倍數(shù)u v 要求求最大公約數(shù)和最小公倍數(shù)的過程用子函數(shù)來實(shí)現(xiàn)。題目分析要求分別編寫求最大公約數(shù)與求最小公倍數(shù)子函數(shù),通過主函數(shù)調(diào)用子函數(shù),在主函數(shù)中分別將子函數(shù)返回的最大公約數(shù)

12、與最小公倍數(shù)輸出。在定義函數(shù)時(shí),要注意函數(shù)的類型,同時(shí)在調(diào)用時(shí)注意其“實(shí)參”和“形參”之間的關(guān)系。本題主要考查學(xué)生編寫子函數(shù)處理復(fù)雜問題的能力,以及求最大公約數(shù)和最小公倍數(shù)的方法。求最大公約數(shù)一般用輾轉(zhuǎn)相除法,其算法可以描述為: 當(dāng) v 不為 0 時(shí),輾轉(zhuǎn)用操作:r=u%,u=,v=r 代表余數(shù))消去相同的因子。直到v=0 時(shí),u 的值即為所求的解。 v u*v/(u v 的最大公約數(shù)。關(guān)鍵程序提示在求最大公約數(shù)時(shí),注意是用大數(shù)除以小數(shù)的,即如果用 u%v,則應(yīng)保證,否則,就要進(jìn)行u 和v 的互換。互換時(shí)可以這樣實(shí)現(xiàn)t 為中間變量if (u0)p=power(x,n-1)*x;/*n0 */e

13、lsep=1;n=0 時(shí),返回1,并由此遞推出xn */選做題學(xué)生完成此題后,要認(rèn)真思考,一定要弄清楚遞歸函數(shù)的執(zhí)行過程??梢栽囍鴮⑶笞畲蠊s數(shù)的函數(shù)改用遞歸方法來實(shí)現(xiàn),其求解過程用遞歸描述為(gysb 是待求最大公約數(shù)的兩個(gè)數(shù),且:b(b(a%b=0)gys(b,a%b)(a%b!=0)(三)數(shù)組應(yīng)用數(shù)組是一種構(gòu)造數(shù)據(jù)類型,指的是一組同類型數(shù)據(jù)組成的序列,運(yùn)用數(shù)組用方式等內(nèi)容。選擇法排序題目如下:對(duì)于 n 用一維數(shù)組來存放這n 個(gè)數(shù),且要以子函數(shù)來實(shí)現(xiàn)。題目分析在計(jì)算機(jī)內(nèi)部,信息常以數(shù)組形式存在,信息的初始化有多種方法,使用輸入函數(shù)循環(huán)控制是常用的方式。對(duì)數(shù)組中的數(shù)據(jù)進(jìn)行排序是數(shù)據(jù)處理的基本

14、操作。排序的方法較多,如冒泡法、選擇法、插入法等。這里要求用選擇法對(duì) n 個(gè)數(shù)據(jù)排序。選擇法的思路是,對(duì)于給定的一組數(shù)n n-1 輪,每一輪比較的次i n-i 次 。本題主要考查學(xué)生對(duì)選擇排序算法的掌握程度, 以及用數(shù)組處理問題的方法。要求畫出流程圖,然后實(shí)現(xiàn)之。關(guān)鍵程序提示用給定的數(shù)據(jù)對(duì)數(shù)組初始化(首先應(yīng)確定排序數(shù)據(jù)個(gè)數(shù)即n 的值for(i=0;in;i+)sanf(“%d”,&ai);最小數(shù)據(jù)的確定循環(huán)結(jié)束時(shí)ak是剩余數(shù)中的最小數(shù)for(j=i+1;jn;j+)if(ajak)k=j;/*k*/排序本題只需使用一個(gè)數(shù)組,因此排序過程是最小數(shù)與當(dāng)前數(shù)的交換過程。注意題目要求用子函數(shù)來實(shí)現(xiàn)。i

15、f(k!=i)num=ak;ak=ai;ai=num;說明處理的方法。理解其結(jié)構(gòu),并能夠靈活運(yùn)用。7處理的方法。理解其結(jié)構(gòu),并能夠靈活運(yùn)用。7打印楊輝三角形題目如下:使用循環(huán)結(jié)構(gòu)輸出楊輝三角形, 使用二維數(shù)組處理。(如圖 6 所示)題目分析圖6本題主要使用雙重循環(huán)for 語句來控制循環(huán),雙重for 語句控制打印數(shù)值, 同時(shí)還控制打印他們的間距。另外練習(xí)二維數(shù)組的應(yīng)用,理解二維數(shù)組的行列坐標(biāo)關(guān)系。這是一個(gè)比較典型的用雙重循環(huán)分別控制二維數(shù)組的行列下表來進(jìn)行數(shù)據(jù)處理的問題。通過給出的楊輝三角形的前面幾行我們可以看出以下規(guī)律:各行第一個(gè)數(shù)和最后一個(gè)數(shù)都是 1;3 行起,除上面指出的第一個(gè)和最后一個(gè)數(shù)

16、外,其余各數(shù)是上一行5 3 個(gè)數(shù)4 2 個(gè)數(shù)4 3 個(gè)數(shù)之和。由此可以推廣到,第i j 樣表示(二維數(shù)組名為:aij=ai-1j+ai-1j-1。使數(shù)組第一列和對(duì)角線元素為 1;元素為 ij=ai-1j+ai-1j-1(用雙重 for 循環(huán)實(shí)現(xiàn))輸出二維數(shù)組的內(nèi)容使數(shù)組第一列和對(duì)角線元素為 1;元素為 ij=ai-1j+ai-1j-1(用雙重 for 循環(huán)實(shí)現(xiàn))輸出二維數(shù)組的內(nèi)容關(guān)鍵程序提示圖71for(i=0;in;i+) ai0=1;aii=1;下一項(xiàng)為它上對(duì)角兩項(xiàng)的和:for(i=2;in;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;控制打印空格和回車for(i

17、=0;i10;i+)for(j=0;j *max真(T)p 中的地址放入(max=p)假(F)max*p*min真(T)p min(min=p)假(F)交換(將最大數(shù)與第一數(shù)交換,最小數(shù)與最后一數(shù)交換)圖 8題目分析此題是一道用指針處理一維數(shù)組的問題。搞清楚數(shù)組地址的表示方式,將相應(yīng)的地址賦給一個(gè)指針變量就可以了。把此題關(guān)鍵部分即進(jìn)行查找最大和最N-S 8 一組運(yùn)行結(jié)果。程序提示判斷并進(jìn)行交換的子函數(shù)可參考下面的程序段實(shí)現(xiàn):change(intarray10)int *max,*min,*p,*array_end; array_end=array+10; max=min=array; for(

18、p=array+1;p*max) max=p;/*max10 */else if (*p*min) min=p;/*min10 */*p=array0;array0=*max;*max=*p;/*最大數(shù)放在array0*/*p=array9;array9=*min;*min=*p;/*array9*/ return;學(xué)生要認(rèn)真分析各語句含義,在主函數(shù)中完成對(duì)此函數(shù)的調(diào)用。用指針處理矩陣轉(zhuǎn)置問題題目如下:寫一個(gè)函數(shù),將一個(gè) 34 的矩陣轉(zhuǎn)置。要求用指針處理數(shù)組。題目分析所謂矩陣轉(zhuǎn)置是指一個(gè)矩陣的行和列互換,如有a123,則轉(zhuǎn)置14456b 2536以后將變?yōu)椋捍祟}考查學(xué)生用二維數(shù)組處理矩陣問題的

19、方法,另外由于題目要求用指針來進(jìn)行處理,所以首先要搞清楚指向二維數(shù)組的指針和其地址間的關(guān)系。如:有 int *p,a34p=&a00,就代表將指針p 元素,它與p=a 是等價(jià)的。分析問題,并寫出其算法,然后上機(jī)實(shí)現(xiàn)此題。關(guān)鍵程序提示在程序的定義部分,定義數(shù)組和指針,可用下面語句:int a34,*p;使指針p 和數(shù)組a 之間建立關(guān)系,即使p 指向數(shù)組a: p=&a00;矩陣轉(zhuǎn)置的實(shí)現(xiàn)要設(shè)計(jì)成子函數(shù)形式,其關(guān)鍵部分可用下面的雙重循環(huán)來進(jìn)行控制:for(i=0;i3;i+) for(j=i;j=a&stri=z)stri=stri-32; fputc(stri,fp);i+;打開test 文件并保

20、存: fp=fopen(“test”, “r”); fgets(str ,strlen(str)+1,fp); printf(“%sn”,str);以下將會(huì)給出一個(gè)有關(guān)用C 語言實(shí)現(xiàn)圖形繪制功能的實(shí)例,使學(xué)生對(duì)C 語言的功能強(qiáng)大的繪圖函數(shù)能夠有所了解。也在一定意義上使學(xué)生對(duì)C 設(shè)計(jì)產(chǎn)生更大的興趣,激發(fā)其自主學(xué)習(xí)的動(dòng)力。閃動(dòng)的多彩圓3000 15 按上面的變化情況變化,但它的背景也要不斷的變化。題目分析本題的目的是讓讀者掌握如何使用圖形控制寄存器功能,設(shè)置像素函數(shù), for 語句來設(shè)置不斷變大的圓,并且同時(shí)利用它來改變其顏色,最后利用雙重 循環(huán)語句來完成背景、圓、線條的顏色同步改變的效果。在本例

21、還用到延時(shí)函數(shù),它表示兩次變化過程的時(shí)間間隔。本例中出現(xiàn)的一些圖形控制方便的函數(shù),如果不理解,則學(xué)生可以到圖書館查閱相關(guān)的資料,培養(yǎng)自己查閱各種參考文獻(xiàn),從中搜集所需知識(shí)的能力。關(guān)鍵程序提示如果要用 C “#include graphics.圖形初始化:intigraph(&gdriver,&gmode;設(shè)置不同顏色,畫不同半徑的圓:for(i=0;i=15;i+) setcolor(i);/*設(shè)置不同顏*/ circle(319,239,20+i*15);/*畫半徑不同的delay(3000);/*延遲3000 毫秒*/設(shè)置不同的背景:for(i=0;iDirectorie17所示。所要設(shè)定

22、各選項(xiàng)對(duì)應(yīng)意義如下:Include directories: IncludeLibrary directories: LibOutput directory: 臨時(shí)文件和最終EXETurbo C directory: TC按照前邊的目錄結(jié)構(gòu),這里應(yīng)如下設(shè)置: Include directories: C: TURBOC2INCLUDE Library directories: C: TURBOC2LIB Output directory: C: TURBOC2OUTPUT Turbo C directory: C: TURBOC2圖 17注意:如果將Turboc2 解壓到其他目錄下的話,請(qǐng)相應(yīng)

23、修改設(shè)置。3保存設(shè)置TURBO C 2.0Options-Save option(如圖 18 所示直接選擇覆蓋默認(rèn)文件;如果是多人共用同一TURBO C,可以通過每人存儲(chǔ)設(shè)置有不同Output 路徑的環(huán)境文件將各自的執(zhí)行文件分開,以便于管理,每次使用時(shí)只要導(dǎo)入自己的環(huán)境文件即可( options 命令。圖 18至此,確立 TURBO C2.0 C2.0Turbo C 目錄下,否則時(shí)間一長將很難找到。(三)程序動(dòng)態(tài)調(diào)試的方法程序的編譯和連接沒有錯(cuò)誤,不等于運(yùn)行結(jié)果一定正確。編譯系統(tǒng)能檢查出語法錯(cuò)誤,但無法檢查出邏輯錯(cuò)誤。下面介紹兩種動(dòng)態(tài)調(diào)試方法。按步執(zhí)行方法:這種方法的特點(diǎn)是:程序一次執(zhí)行一行

24、。每執(zhí)行完一行后,就停下來,用戶可以檢查此時(shí)各有關(guān)變量和表達(dá)式的值,以便發(fā)現(xiàn)問題所在 。此方法可用下面的功能鍵實(shí)現(xiàn):F7鍵(RuTRACE INT”命令按步執(zhí)行,每按一次,執(zhí)行一行中的語句。Ctrl+F(Break/WatcADD WATC”命令:在輸入框中輸入某個(gè)變量,此時(shí)可在屏幕下部的Watch 窗口動(dòng)態(tài)觀察變量值的變化情況。設(shè)置斷點(diǎn)方法:按步執(zhí)行法能有效地、一行一行地檢查感興趣的數(shù)據(jù)的值,但是如果程序很長,是難以逐行進(jìn)行檢查的。對(duì)于一個(gè)較長的程序,常用的方法是在程序中設(shè)若干個(gè)斷點(diǎn),程序執(zhí)行到斷點(diǎn)時(shí)暫停,用戶可以檢查此時(shí)有關(guān)變量或表達(dá)式的值。如果未發(fā)現(xiàn)錯(cuò)誤,就使程序繼續(xù)執(zhí)行到下一個(gè)斷點(diǎn),如

25、此一段一段地檢查。這種方法實(shí)質(zhì)上是把一個(gè)程序分割成幾個(gè)分區(qū),逐區(qū)檢查有無錯(cuò)誤,這樣就可以將找錯(cuò)的范圍從整個(gè)程序縮小到一個(gè)分區(qū),然后集中精力檢查有問題的分區(qū)。再在該分區(qū)內(nèi)設(shè)若干個(gè)斷點(diǎn),把一個(gè)分區(qū)分成幾個(gè)小區(qū),然后尋找有錯(cuò)的小區(qū)。用這種方法可不斷縮小找錯(cuò)范圍直到找到出錯(cuò)點(diǎn)。與斷點(diǎn)執(zhí)行方法有關(guān)的功能鍵有如下: Ctrl+F8: 設(shè)置斷點(diǎn)(再按一次取消設(shè)置Ctrl+F9: 繼 續(xù) 執(zhí) 行 Ctrl+F7:在輸入框中輸入某個(gè)變量五、常見錯(cuò)誤提示信息Turbo C告錯(cuò)誤。致命錯(cuò)誤一般很少出現(xiàn),它通常是內(nèi)部編譯出錯(cuò),一旦出現(xiàn)這類錯(cuò)誤,編譯就立即停止。編譯系統(tǒng)遇到這類錯(cuò)誤時(shí),一般也要停止編譯。警告信息是指一些

26、值得懷疑的情況,而這些又可能是源程序中合理的一部分。因此,警告信息只是提醒用戶注意,編譯過程并不停止。編譯系統(tǒng)在發(fā)現(xiàn)源程序中的各類錯(cuò)誤時(shí),首先顯示錯(cuò)誤信息,然后顯示源文件名以及出錯(cuò)的行號(hào)。但必須注意,真正有錯(cuò)的位置可能是前一行,甚至有可能在前幾行,有時(shí),好像發(fā)生了許多錯(cuò)誤,而實(shí)際上可能是由一個(gè)錯(cuò)誤造成的。學(xué)生在實(shí)習(xí)過程中,如果程序出現(xiàn)了錯(cuò)誤,應(yīng)認(rèn)真分析,根據(jù)錯(cuò)誤提示的信息,努力找出原因所在,應(yīng)培養(yǎng)獨(dú)立修改程序中出現(xiàn)的常見錯(cuò)誤的能力。下面列出常見的一些編譯錯(cuò)誤信息,并指出可能的原因。1致命錯(cuò)誤Bad call of inline function 內(nèi)部函數(shù)的不合法調(diào)用在使用一個(gè)宏定義的內(nèi)部函數(shù)時(shí)

27、,未能正確調(diào)用。一個(gè)內(nèi)部函數(shù)應(yīng)以兩個(gè)短下劃線(_ _)開始和結(jié)束。Irreducible expression tree 不可約表達(dá)式樹3)Register allocation failure 寄存器分配失敗源文件中的表達(dá)式太復(fù)雜,代碼生成程序無法為它生成代碼。此時(shí)應(yīng)簡化這種繁瑣的表達(dá)式或干脆避免使用它。2 一般錯(cuò)誤1)#operator not followerd by macro argument name “#”運(yùn)算符后無宏變?cè)T诤甓x中,“#”用于標(biāo)志一宏變?cè)谴?,因此,在?”后面必須要跟隨一個(gè)宏變?cè)?)xxxxxxxxnot an argumentxxxxxxxx不是 函

28、數(shù)參數(shù)。在源程序中將該標(biāo)識(shí)符定義為一個(gè)函數(shù),但它沒有在函數(shù)表中出現(xiàn)。Ambiguous symbolxxxxxxxxxxxxxxx偏移、類型不同,因此,在變量或表達(dá)式中引用該域但未帶結(jié)構(gòu)名時(shí),就會(huì)產(chǎn) 生二義性。在這種情況下,需要修改域名,或在引用時(shí)加上結(jié)構(gòu)名。Argument # missing name參數(shù)#名丟失。參數(shù)名已脫離用于定義函數(shù)的函數(shù)原型。C 語言規(guī)定,如果函數(shù)以原型定義,該函數(shù)必須包含所有的函數(shù)名。5)Argument list syntax errorC并以右括號(hào)結(jié)束,若源文件中含有一個(gè)其后不是逗號(hào),也不是右括號(hào)的參數(shù), 則會(huì)出現(xiàn)本錯(cuò)誤。Array bounds missin

29、g方括號(hào)結(jié)束,則會(huì)出現(xiàn)錯(cuò)誤。Array size too larg數(shù)組長度太大,定義的數(shù)組太大,可用內(nèi)存不夠。8)Bad format in include directive包含指令中文件名格式不正確。包含文件名必須用雙引號(hào)(如“)號(hào)()括起來,否則將出現(xiàn)本錯(cuò)誤。9)Call of non-function調(diào)用未定義的函數(shù)。正被調(diào)用的函數(shù)未定義,通常是由于不正確的函數(shù)聲明或函數(shù)名拼寫錯(cuò)誤所造成的。Cannot modify a constant object不能修改一個(gè)常量對(duì)象。對(duì)定義為常量的對(duì)象進(jìn)行不合法的操作(如對(duì)常量進(jìn)行賦值)會(huì)產(chǎn)生本錯(cuò)誤。Case outside of switchc

30、aseswitchcase 語句在switch是由于括號(hào)不匹配所造成。Case statement missingcase 語句漏掉。Case 語句必須包含一個(gè)以冒號(hào)結(jié)束的常量表達(dá)式??赡艿脑蚴莵G了冒號(hào)或在冒號(hào)前多了別的符號(hào)。Case syntax errorCase 俄俄語法錯(cuò)誤??赡茉贑as 俄中包含了一些不正確的符號(hào)14)Character constant too long字符常量太長。15)Compound statement missing 常是由于大括號(hào)不匹配造成的。16) Constant expression required 要求常量表達(dá)式數(shù)組的大小必須是常量,本錯(cuò)誤通常

31、是由#define17)Could not find file xxxxxxxx.xxxxxxxxxx.xxDeclaration syntax error聲明必須給出類型或存儲(chǔ)類。如聲明“i,j;”是錯(cuò)誤的。Declaration syntax error說明出現(xiàn)語法錯(cuò)誤。在源文件中,某個(gè)說明丟失了某些符號(hào)或有多余的符號(hào)。20)default outside of switchdefault 在switch 外出現(xiàn)。這個(gè)錯(cuò)誤通常是由于括號(hào)不匹配造成。Division by Zero除數(shù)為零。在源文件的表達(dá)式中出現(xiàn)除數(shù)為零的情況。Do statement must have whiledo語句

32、中必須要有while 23)Do-while statement missing(do-while語句中漏掉了 24)Duplicate Casecase的情況不唯一Switch 語句中的每個(gè)case 必須有一個(gè)唯一的常量表達(dá)式。25)Error writing output file寫輸出文件出現(xiàn)錯(cuò)誤。通常是由于磁盤空間不夠造成的。26)Expression syntax表達(dá)式語法錯(cuò)誤。如:在表達(dá)式中連續(xù)出現(xiàn)兩個(gè)操作符、括號(hào)不匹配或缺少括號(hào)、前一語句漏掉了分號(hào)等。Extra parameter in call調(diào)用時(shí)出現(xiàn)多余參數(shù)在調(diào)用函數(shù)時(shí),實(shí)際的參數(shù)個(gè)數(shù)多于函數(shù)定義中的參數(shù)個(gè)數(shù)。too lo

33、ng文件名太長。#include 指令中給出的文件名太長,編譯程序無法處理。DOS 下的文件名不能超過 64 個(gè)字符。For statement missing( for( Function call missing)函數(shù)調(diào)用缺少“ 31)Function definition out of place函數(shù)定義位置錯(cuò)誤。函數(shù)定義不能出現(xiàn)在另一個(gè)函數(shù)內(nèi)。函數(shù)內(nèi)的任何說明,只要以類似于帶有一個(gè)參數(shù)表的函數(shù)開始,就被認(rèn)為是一個(gè)函數(shù)定義。32) Goto statement missing lablegoto語句缺少標(biāo)號(hào)。在goto關(guān)鍵字后必須要有一個(gè)標(biāo)識(shí)符33)If statement missin

34、g(if語句缺少(。34) Illegal character c(0 xXX)非法字符(0 xXX)編譯程序發(fā)現(xiàn)輸入文件中有非法字符,以十六進(jìn)制方式打印該字符35)Illegal initialization非法初始化初始化必須是常量表達(dá)式,一全局變extern或static的地址加減一常量36)Illegal octal digit非法八進(jìn)制數(shù)編譯程序發(fā)現(xiàn)在一個(gè)八進(jìn)制常數(shù)中包含了非法八進(jìn)制數(shù)字符(如8或 37)Illegal pointer subtraction38)Illegal structure operation非法結(jié)構(gòu)操作。結(jié)構(gòu)只能使用、取地址符)和賦值操作符作為函數(shù)的參數(shù)傳遞

35、。當(dāng)編譯程序發(fā)現(xiàn)結(jié)構(gòu)使用了其它操作符時(shí)出現(xiàn)本錯(cuò)誤。Illegal use of floating point件(?、間接)以及其它一些操作符中。Illegal use of pointer非法使用指針指針只能在加、減、賦值、比較、間接(*)或箭頭()操作中使用。Incompatible type conversion不相容的類型轉(zhuǎn)換。源文件中試圖把一種類型轉(zhuǎn)換成另一種類型,但這兩種類型是不相容的。如函數(shù)與非函數(shù)間轉(zhuǎn)換、一種結(jié)構(gòu)或數(shù)組與一種標(biāo)準(zhǔn)類型間轉(zhuǎn)換、浮點(diǎn)數(shù)與指針間轉(zhuǎn)換等。Incorrect number format不正確的數(shù)據(jù)格式。編譯程序發(fā)現(xiàn)在十六進(jìn)制數(shù)中出現(xiàn)十進(jìn)制小數(shù)點(diǎn)。43)Inc

36、orrect use of defaultdefault 的不正確使用。編譯程序發(fā)現(xiàn)default 關(guān)鍵字后缺少分號(hào)44)Initializer syntax error初始化語法錯(cuò)誤初始化過程中缺少或多了操作符,括號(hào)不匹配,或其它一些不正常的情況。45)Invalid indrection無效的間接運(yùn)算。間接運(yùn)算符(*)要求非空指針作為操作分量。46)Invalid pointer addition無效的指針相加。源程序中試圖把兩個(gè)指針相加47)Lvalue required賦值請(qǐng)求賦值操作符的左邊必須是一個(gè)地址表達(dá)式,包括數(shù)值變量、指針變量、結(jié)構(gòu)引用域、間接指針或數(shù)組分量。48)Misma

37、tch number of parameters in definition定義中參數(shù)個(gè)數(shù)不匹配。定義中的參數(shù)和函數(shù)原型中提供的信息不匹配。49)Misplaced breakbreak 位置錯(cuò)誤。編譯程序發(fā)現(xiàn)break 語句在switch 語句或循環(huán)結(jié)構(gòu)外。50)Misplaced continuecontinue位置錯(cuò)。編譯程序發(fā)現(xiàn)continue語句在循環(huán)結(jié)構(gòu)外51)Misplaced decimal poin十進(jìn)制小數(shù)點(diǎn)位置錯(cuò)編譯程序發(fā)現(xiàn)浮點(diǎn)常數(shù)的指數(shù)部分有一個(gè)十進(jìn)制小數(shù)點(diǎn)。52)Misplaced elseelse 位置錯(cuò)。編譯程序發(fā)現(xiàn)else 語句缺少與之相匹配的if 語句。本錯(cuò)誤

38、的產(chǎn)生除了由于else 多余外,還有可能是由于有多余的分號(hào)、漏寫了大括號(hào)或前面的if 語句出現(xiàn)語法錯(cuò)誤而引起。53) Must be addressable必須是可編址取址操作作用于一個(gè)不可編址的對(duì)象如寄存器變量54)must take address of memory location必須是內(nèi)存一地址源文件中對(duì)不可編址的表達(dá)式使用了地址操作符,如對(duì)寄存器變量 55)Out of memory內(nèi)存不夠56)pointer required on left side of操作符左邊是一個(gè)指針57)Redeclaration of xxxxxxxx“xxxxxxxx” 重定義58)Size of

39、 structure or array not known結(jié)構(gòu)或數(shù)組大小不定有些表達(dá)式(如sizeof 或存儲(chǔ)說明)讀數(shù)組。如果結(jié)構(gòu)長度不需要,則在定義之前就可引用;如果數(shù)組不申請(qǐng)存儲(chǔ) 空間或者初始化時(shí)給定了長度,則可定義為空長。Statement missingStructure or union syntax error結(jié)構(gòu)或聯(lián)合語法錯(cuò)誤編譯程序發(fā)現(xiàn)在struct 或 union 關(guān)鍵字后面沒有標(biāo)識(shí)符或左花括號(hào)。61)Structuer size too large結(jié)構(gòu)太大。源文件中說明的結(jié)構(gòu)所需的內(nèi)存區(qū)域太大以致于內(nèi)存空間不夠。62)Subscripting missing下標(biāo)缺少。可能

40、是由于漏掉或多寫操作符或括號(hào)不匹配引起 63)Switch statement missing(swith語句中缺少(”Too few parameters in call函數(shù)調(diào)用參數(shù)太少。對(duì)帶有原型的函數(shù)調(diào)用(通過一個(gè)函數(shù)指針)參數(shù)太少。原型要求給出所有參數(shù)。Too few parameters in call to xxxxxxxx調(diào)用“xxxxxxxx”時(shí)參數(shù)太少。調(diào)用指定的函數(shù)(該函數(shù)用一原型聲明) 時(shí),給出的參數(shù)太少。Too many casescase 太多switch語句最多允許有257個(gè)case。67)Too many decimal points十進(jìn)制小數(shù)點(diǎn)太多68)Too

41、many default casedefault太多。Switch語句中只能有一個(gè)default。Too many initializers初始化太多。Too much auto memory in function函數(shù)中自動(dòng)存儲(chǔ)太多。當(dāng)前函數(shù)聲明的自動(dòng)存儲(chǔ)超過了可用的存儲(chǔ)空間。71)Too much code define in file文件定義的代碼太多。當(dāng)前文件中函數(shù)的總長度超過了 64K 字節(jié)??梢砸迫ゲ槐匾拇a或把源文件分開寫72)Too much global data define in file 文件中定義的全局?jǐn)?shù)據(jù)太多全局?jǐn)?shù)據(jù)聲明的總數(shù)超過了64K如果所有的說明都是必要的,

42、則要考慮重新組織程序。73)Two consecutive dots兩個(gè)連續(xù)點(diǎn)。因?yàn)槭÷蕴?hào)包括三個(gè)點(diǎn)(使用一個(gè)點(diǎn).,所以,在C程序中不允許出現(xiàn)兩個(gè)連續(xù)點(diǎn)。Type missmatch in parameter # in call to XXXXXXXX的參數(shù),而給定的參數(shù)(從左到右逐個(gè)加1)不能轉(zhuǎn)換為已說明的參數(shù)類型。Type missmatch in parameterXXXXXXXX參數(shù)“XXXXXXXX”類型不匹配。源文件中通過一個(gè)原型說明了可由函數(shù)指針調(diào)用的函數(shù),而指定的參數(shù)不能轉(zhuǎn)換為已說明的參數(shù)類型。TypemissmatchinparameterXXXXXXXXincallto調(diào)用

43、“YYYYYYYY”時(shí),參數(shù)“XXXXXXXX”類型不匹配。源文件中通過一個(gè)原型說明了指定的參數(shù),而給定的參數(shù)不能轉(zhuǎn)換為另一個(gè)已說明的參數(shù)類型。Type missmatch in redeclaration ofXXX重定義類型不匹配。源文件中把一個(gè)已經(jīng)說明的變量重新說明為另一種變量。如果一個(gè)函數(shù)被調(diào)用,而后又被說明成非整型也會(huì)產(chǎn)生本錯(cuò)誤。在這種情況下,必須在第一次調(diào)用函數(shù)前,給函數(shù)加上extern 說明。Unable to creat output file XXXXXXXX.XXX不能創(chuàng)建輸出文XXXXXXXX.XX當(dāng)工作軟盤已滿或有寫保護(hù)時(shí)產(chǎn)生本錯(cuò)誤 79)Unable to creat

44、 turboc.lnk不能創(chuàng)建turboc.lnk編譯程序不能創(chuàng)建臨時(shí)文件TURBOC.LN,因?yàn)椴荒艽嫒〈疟P或磁盤已滿。Unable to execute commandxxxxxxxx不能執(zhí)行“xxxxxxxx”命令。找不到TLINKMASM。或者磁盤出錯(cuò)。Unable to open include file xxxxxxxx. xxxxxxxx.xx#includeCONFIG.SYS 中沒有設(shè)置能同時(shí)打開的文件個(gè)數(shù)(試加一句。Unable to open inputfile xxxxxxxx. xxxxxxxx.xx誤。檢查文件名是否拼錯(cuò),或檢查對(duì)應(yīng)的磁盤目錄中是否有此文件。Unde

45、fined labelxxxxxxxx標(biāo)號(hào)“xxxxxxxx”未定義。函數(shù)中g(shù)oto 語句后的標(biāo)號(hào)沒有定義。84)Undefined structure xxxxxxxx結(jié)構(gòu)“xxxxxxxx”未定義。源文件中使用了未經(jīng)說明的某個(gè)結(jié)構(gòu)??赡苁怯捎诮Y(jié)構(gòu)名拼寫錯(cuò)誤或缺少結(jié)構(gòu)說明而引起的。85)Undefined symbol xxxxxxxx符號(hào)“xxxxxxxx”未定義。標(biāo)識(shí)符無定義,可能是由于說明或引用處有拼寫錯(cuò)誤,也可能是由于標(biāo)識(shí)符說明錯(cuò)誤而引起。86)Unexpected end of comment started on line #源文件在某個(gè)注釋中意外結(jié)束。通常是由于注釋結(jié)束標(biāo)志(*

46、/)漏掉引起。87)Unterminated character constant未終結(jié)的字符常量。編譯程序發(fā)現(xiàn)一個(gè)不匹配的省略符。88)Unterminated string未終結(jié)的串。編譯程序發(fā)現(xiàn)一個(gè)不匹配的引號(hào)。89)Unterminated string or character constant未終結(jié)的串或字符常量。編譯程序發(fā)現(xiàn)串或字符常量開始后沒有終結(jié)。90)User break用戶中斷。在集成環(huán)境中進(jìn)行編譯或連接時(shí)用戶按了Ctrl+Break 鍵91)While statement missing(while語句漏掉(”警告信息1)xxxxxxxx declared but never usedxxxxxxxx”但未使用。在源文件中說明了該變量,但沒有使用。2)xxxxxxxxis assigned a value which is never used “xxxxxxxx直到函數(shù)結(jié)束都未使用過。xxxxxxxx not part of structure “xxxxxxxx”不是結(jié)構(gòu)的一部分。出現(xiàn)在點(diǎn)或箭頭()不是結(jié)構(gòu)的一部分;或者點(diǎn)的左邊不是結(jié)構(gòu),箭頭的左邊不指向結(jié)構(gòu)。Code has no effect代

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論