《C程序設(shè)計》實(shí)驗指導(dǎo)_第1頁
《C程序設(shè)計》實(shí)驗指導(dǎo)_第2頁
《C程序設(shè)計》實(shí)驗指導(dǎo)_第3頁
《C程序設(shè)計》實(shí)驗指導(dǎo)_第4頁
《C程序設(shè)計》實(shí)驗指導(dǎo)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《C程序設(shè)計》實(shí)驗指導(dǎo)

《c程序設(shè)計》教研組

上機(jī)操作簡介

用TurboC上機(jī)過程

TurboC是一個集程序編輯、編譯、連接、調(diào)試為一體的C語言程序開發(fā)軟件,具有速度快、

效率高、功能強(qiáng)等優(yōu)點(diǎn),使用非常方便。C語言程序員可在TurboC環(huán)境下進(jìn)行全屏幕編輯,利

用窗口功能進(jìn)行編譯、連接、調(diào)試、運(yùn)行、環(huán)境設(shè)置等工作。

在DOS提示符下鍵入TC并回車;或在WINDOWS環(huán)境下,點(diǎn)擊“我的電腦”或“資源管理器”

圖標(biāo),找到TC.EXE文件,直接雙擊該文件,進(jìn)入TC屏和含本產(chǎn)品版本的框,當(dāng)擊任一鍵后,版

本信息即消失,全主屏仍然保持(按ALT+ENTER,轉(zhuǎn)入全屏顯示)。

TC主屏,由四部分組成:主菜單、編輯窗口、消息窗口和功能鍵提示行。

1.TC編輯器簡介

編輯窗口中插入(Insert)模式下輸入代碼時,可用回車鍵來結(jié)束一行(TC編輯器不自動

換行)。最大行寬為248個字符,編輯器窗口寬77歹lj,如打過77歹U,窗口隨著字符的鍵入滾動。

TC屏狀態(tài)行告訴光標(biāo)在文件中行、歹上

編輯窗口里如何操作源文件

如果在調(diào)用編輯窗口之前未裝入文件,即么TC編輯器將自動命名為NONAME.C,這時編輯器

具有一切特征,可以:

?建立名為N0NAME.C或別的名字的新源文件。

?裝入編輯器一己存在的文件。

?從源文件列表中選擇一個裝入窗口進(jìn)行編輯。

?保存編輯窗口中的文件。

?把編輯器里的文件寫入一個新文件。

?消息窗口和編輯窗口之間進(jìn)行切換。

創(chuàng)建和編輯源文件,但還未編譯時,勿需消息窗口,所以可用F5把編輯窗口擴(kuò)大到整個屏

幕,再按F5還原(回到分屏模式)。

1)創(chuàng)建源文件

可用下面兩種方法建立文件:

?主菜單中,選File/New,再按回車鍵,可打開編輯窗口,文件名為NONAME.C

?主菜單中,選File/Load,裝入文件名提示框打開,鍵入新源文件名。(任何時候按熱鍵

F3也可達(dá)到相同目的)。

File/Load或File/Pick可裝入編輯一己存在的文件。

主菜單中選File/Load后,可以:

?鍵入想編輯文件的名字;例如,路徑可以接受,C:\TURBOC\TESTFILE.C

?在裝入文件名字提示框中打入過通匹符(用DOS中*和?匹配符),然后按回車鍵。*.*

顯示當(dāng)前目錄中的所有文件和其它子目錄。目錄名后跟反斜杠(\)。選擇目錄將顯示其中

的文件。例如,鍵入C:\*.,只顯示根目錄中具有該擴(kuò)展名的文件。

按Up/Down及Left/Right光標(biāo)鍵把高亮長條移到所需文件的名字上,回車;即可裝入選擇

的文件,當(dāng)前的狀態(tài)是編輯狀態(tài)。

2

還有一個熱鍵可重裝入(加載)先前裝入的文件,按ALTF6(改變窗口內(nèi)容,切換當(dāng)前編

輯器里的文件與前次加載的文件)。

2)源文件存盤

?系統(tǒng)中任何時候,按F2

?主菜單中,選擇File/Save

3)寫輸出文件

可以把編輯器里的文件寫到一個新文件,也可重寫一個已存在文件。即可以寫到當(dāng)前(缺?。?/p>

目錄,也可以寫到另外一個驅(qū)動器和目錄里。

2.菜單命令簡介

主菜單中,選File/WriteTo,然后在新名字提示窗口中,鍵入新文件全名;例如:

C:\dir\subdir\filename.ext

主菜單中包含一些用戶主要使用的條目:裝入、編輯、編譯、連接、調(diào)試及運(yùn)行TurobC程

序。這八個菜單選擇包括:File、Edit>Run>Compile、Project、Options>Debug和Break/Watcho

這里給出它們的詳細(xì)描述。主菜單中的一些下拉菜單中的任選項是為高級編程服務(wù)的,第三章再

作詳述。

1)文件菜單

文件下拉菜單提供了裝入已存在文件;建立編輯器;然后,可將其存入任何一個目錄任何一

個文件名。另外,通過文件菜單中可以改變目錄;暫時退到命令解釋程序,或者說退出Turbo。

Load(力口載)

裝入一個文件,可用類似DOS的匹配符(如*.C)來進(jìn)行列表選擇,也可裝入某一個文件,

只要給出其文件名即可。

注:若驅(qū)動器或路徑給錯了,屏幕上將出現(xiàn)一錯誤框。確認(rèn)框是在未存一個修改過的文件前

又加載另一文件的情況下出現(xiàn)的。不論哪種情況,只有敲了所需鍵之后熱鍵才起作用。

Pick(選擇)

最近裝入進(jìn)編輯窗口的8個文件列成一個表,讓用戶選擇其一,選擇后又裝入編輯器,光標(biāo)

置在上次修改過的地方。若選了“一Loadfile—”條目,屏幕上將出現(xiàn)LoadFile相應(yīng)熱鍵是

ALT_X.

2)編輯命令

編輯命令調(diào)用內(nèi)部編輯器。編輯器中按F10可返回主菜單(或用ALT加所需主菜單命令的首

字母),這時仍然保持在屏幕上,主菜單中按ESC或E,即可回到編輯器(按ALT_E也可,且任何

時候都起作用)。

編輯命令簡要說明

下面是最常用的編輯命令的一個提要:

,Up/Down、Left/Right和Pgup/PgDn鍵翻滾正文。

?CTRL_Y刪除一行。

?CTRL_T刪除一個單詞。

?CTRL_KB設(shè)置(開始)

3

?CTRLKK設(shè)置(結(jié)尾)置塊標(biāo)塊。

?CTRL_KV塊移動。

?CTRL_KC塊拷貝。

?CTRL_KY塊刪除。

3)Run運(yùn)行

Run/Run運(yùn)行程序可用Options/Argument傳遞參數(shù)。若自上次編譯后源代碼有變動,則啟

用“make”來重編譯、連接程序。(“make”是集成開發(fā)環(huán)境里的一程序開發(fā)工具。)

若不想調(diào)試程序,編譯連接時Debug/SourceDebugging開關(guān)應(yīng)置為None或Standalone。

否則,產(chǎn)生的可執(zhí)行代碼中將包含調(diào)試信息,在下面幾個方面對程序的執(zhí)行效果有所影響:

若上次編譯后未修改過源代碼:

*若設(shè)有斷點(diǎn)則Run/Run使程序運(yùn)行到下一斷點(diǎn)。否則運(yùn)行到底。

若上次編譯后修改過源代碼:

*若已通過Run/StepOver(F8)或Run/TraceInto(F7)單步執(zhí)行程序,Run/Run將在屏幕

上詢問是否要重make程序。

*按Y,將重新編譯連接程序,再從頭開始運(yùn)行。

*按2則運(yùn)行至下一斷點(diǎn)?;蜻\(yùn)行到底(若無斷點(diǎn))。

若不是在單步執(zhí)行,則在重新編譯連接程序之后,從頭開始運(yùn)行。

調(diào)試命令及熱鍵

熱鍵菜單命令說明

F4Run/TotoCursor運(yùn)行程序到光標(biāo)所在行。將初始化?調(diào)試節(jié)。

CTRL_F2Run/ProgramReset結(jié)束當(dāng)前調(diào)試節(jié),釋放分配的內(nèi)存,關(guān)閉所有文件。僅在

調(diào)節(jié)有效。

F7Run/TraceInto運(yùn)行當(dāng)前函數(shù)中的下?條語句。若遇到更低一級的函數(shù)調(diào)

用,而該函數(shù)編譯時O/C/C/OBDebugInformation開關(guān)

為On,則跟蹤進(jìn)函數(shù)內(nèi)部。將初始化一調(diào)試節(jié)。

F8Run/StepOver運(yùn)行當(dāng)前函數(shù)中的下?條語句。不跟蹤宗函數(shù)。將初始化

一調(diào)試節(jié)。

CTRL_F9Run/Run運(yùn)行程序,有或沒有調(diào)試器,必要時將編譯、連接源文件,

如經(jīng)編譯了,而連接時

Debug/SourceDebugging和O/C/OBJDebugInformation

又置為On,則程序運(yùn)行至斷點(diǎn)或運(yùn)行完。

F5放大縮小活動窗口

ALT_F5顯示轉(zhuǎn)入用戶屏,擊任意鍵返回集成環(huán)境屏

F6循環(huán)激活編輯、監(jiān)視和消息窗口

ALT_F6若編輯窗口是活動的,則轉(zhuǎn)到上次裝入編輯器的文件,若

下面的那個窗口是活動的,則進(jìn)行監(jiān)視窗口與消息窗口間

的切換

CTRLJ9Run/Run運(yùn)行程序,有或沒有調(diào)試器,必要時將編譯、連接源文件,

如經(jīng)編譯了,而連接時

Debug/SourceDebugging和O/C/OBJDebugInformation

乂置為On,則程序運(yùn)行至斷點(diǎn)或運(yùn)行完。

Project/RemoveMessages刪除消息窗口中的內(nèi)容

4

4)編譯菜單

可用編譯菜單里的條目來將源文件編譯成OBJ文件(CompiletoOBJ);生成.EXE文件(Link

EXEFile);重建(BuildAll);設(shè)置PrinmaryCFile;運(yùn)行或顯示上次編譯的信息(GetInfo)。

CompiletoOBJ編譯生成目標(biāo)碼

此命令將一.C源文件編譯成.OBJ文件,同時顯示生成的文件的名字;例如C:

EXAMPLE.OBJ,.OBJ文件名由以下兩種方法依序產(chǎn)生:

-源.C文件名;或者,

?如沒說明時,上次裝入編輯窗口的文件名。

TurboC編譯時,彈出一窗口,顯示編譯結(jié)果。編譯/組裝(make)完之后,擊任一鍵去掉

編譯窗口。若發(fā)現(xiàn)錯,則轉(zhuǎn)到消息窗口的第一條錯誤上(高亮度標(biāo)志)。

此命令熱鍵為ALT_F9o

MakeEXEFile生成執(zhí)行文件

此命令調(diào)用Project_Make來生成一.EXE文件,顯示生成的.EXE文件名,例如:

C:EXAMPLE.EXE

5)消息窗口

編譯和調(diào)試源程序時都需要通過消息窗口(MessageWindow)來察看診斷消息。TC唯一的錯

誤跟蹤機(jī)制把所有編譯文件的警告和錯誤都更在消息窗口若懸河了,同時在編輯窗口中指出錯誤

在源文件中的相應(yīng)位置(依Option/Envionment菜單中的MessageTracking命令設(shè)置而定)。

上機(jī)實(shí)驗總的目的和要求

學(xué)習(xí)程序設(shè)計,上機(jī)實(shí)驗總的目的:

(1)加深對講授內(nèi)容的理解,尤其是一些語法規(guī)定,光靠課堂講授,很難記住,通過多次上機(jī),

就能自然地、熟練地掌握。

(2)熟悉所用的計算機(jī)系統(tǒng)的操作方法,也就是了解和熟悉C語言程序開發(fā)的環(huán)境。

(3)學(xué)會匕機(jī)調(diào)試程序,要善于發(fā)現(xiàn)程序中的錯誤,并能很快地排除這些錯誤,使程序能正確

運(yùn)行。計算機(jī)技術(shù)是實(shí)踐性很強(qiáng)的技術(shù),要求從事這一領(lǐng)域的人不僅能了解和熟悉有關(guān)理

論和方法,還要自己動手實(shí)現(xiàn)。對程序設(shè)計者來說,要求會編程序并上機(jī)調(diào)試通過。因此

調(diào)試程序本身是程序設(shè)計課程的一個重要的內(nèi)容和基本要求,應(yīng)充分重視。在實(shí)驗時千萬

不要在程序通過后就認(rèn)為萬事大吉、完成任務(wù),而應(yīng)當(dāng)在已通過的程序基礎(chǔ)上作一些改動,

再進(jìn)行編譯、連接和運(yùn)行,注意觀察和分析所出現(xiàn)的情況,這樣的學(xué)習(xí)才會有真正的收獲,

才是靈活主動地學(xué)習(xí)而不是呆板被動地學(xué)習(xí)。

上機(jī)實(shí)驗一般應(yīng)包括以下幾個步驟:

(1)準(zhǔn)備好上機(jī)所需的程序。手編程序應(yīng)書寫整齊,并經(jīng)人工檢查無誤后才能上機(jī),以提高

上機(jī)效率。以程序中自己有疑問的地方,應(yīng)作出記號,以便在上機(jī)時給予注意。

(2)上機(jī)輸入和調(diào)試自已所編的程序。上機(jī)過程中出現(xiàn)的問題,除了系統(tǒng)題以外,一般應(yīng)自

已獨(dú)立處理,不要輕易問教師。尤其對“出錯信息”,應(yīng)善于自己分析判斷。這是學(xué)習(xí)調(diào)試

程序的良好機(jī)會。

使用鍵盤時,最好采用正確的指法擊鍵,為今后提高輸入速度打下基礎(chǔ)。

(3)上機(jī)結(jié)束后,應(yīng)對運(yùn)行情況作出分析,總結(jié)本次調(diào)試程序所取得的經(jīng)驗,并由指導(dǎo)老師

登記成績,此成績將作為總評成績的一部分。

下面給出八個實(shí)驗內(nèi)容,供學(xué)生上機(jī)用。

5

實(shí)驗一

目的要求

1.了解所用的計算機(jī)系統(tǒng)的基本操作方法,學(xué)會獨(dú)立使用該系統(tǒng)。

2.熟悉并掌握在該系統(tǒng)上如何編輯、編輯、連接和運(yùn)行一個C程序。

3.通過運(yùn)行簡單的C程序,初步了解C源程序的特點(diǎn)。

4.掌握C語言數(shù)據(jù)類型,熟悉如何定義一個整型、字符型、實(shí)型變量,以及對它們賦值

的方法,了解以上類型數(shù)據(jù)輸出時所用的格式轉(zhuǎn)換符。

5.學(xué)會使用C的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自加(++)和

自減(")運(yùn)算符的使用。

二.實(shí)驗內(nèi)容

1.學(xué)習(xí)從開機(jī)開始的操作,包括如何建立子目錄、使用操作命令列目錄、刪除文件、復(fù)

制文件等。

2.調(diào)試編輯程序。

輸入程序,以testl.c為文件名保存,并進(jìn)行編譯和運(yùn)行。

main()

(

printf("Thisisabook..”);

printf("Thisisapen.");

}

應(yīng)了解所用的系統(tǒng)是用什么命令進(jìn)行編譯和連接運(yùn)行的。編譯和連接后所得到的目標(biāo)

程序的后綴是什么形式的?若將兩個語句分行輸出,應(yīng)怎樣修改程序?

3.輸入并運(yùn)行程序:

main()

{charcl,c2;

cl=97;c2=98;

printf("%c%c\n>>,cl,c2);

printf(“枇枇\n”,cl-32,c2-32);

printf(%c,%d,cl,c2);

)

在此基礎(chǔ)上:

1)加一個printf語句,并運(yùn)行之。

printf("%d,%d”,cl,c2);

2)再將第三行改為:

intcl,c2;

6

再使之運(yùn)行。

3)再將第四行改為:

c1=300;c2=400;

再使之運(yùn)行,分析其運(yùn)行結(jié)果。

4.輸入并運(yùn)行程序:

main()

(

inti,j,m,n;

i=8;>10;

m=++i;n=++j;

printf("%d,%d,%d,%d,%d,%d”,i,j,++i,++j,m,n);

)

分別作以下改運(yùn)并運(yùn)行:

1)將第5行改為:

m=i++;n=++j;

2)程序改為

main()

{inti,j;

i=8;j=10;

printf(K%d,%dM,i++,j++);

)

3)將2)程序第4行,改為:

printf("%d,%d",++i,++j);

4)自己作任意修改。

實(shí)驗評分—指導(dǎo)老師簽名

實(shí)驗二

目的與要求

消化教科書上第5、6章的內(nèi)容,并將之靈活地運(yùn)用到實(shí)際問題中去。

1.掌握C語言邏輯量的表示方法(以0代表“假”,1代表“真”)

2.學(xué)會正確地使用關(guān)系表達(dá)式和邏輯表達(dá)式

3.掌握各種形式的條件語句(注意()和{)的使用)

4.掌握switch語句

二.實(shí)驗內(nèi)容

編制程序,解決以下問題,然后上機(jī)調(diào)試運(yùn)行程序

7

2X2+3X+1y2-l

-Q-----------——x>O,y>0

4x+4x+2y~+1

2/+3%+1.

x>0,y<0

y2+i

kl+N

x<0,y<0

2x~+3x+1

要求對任意一組x,y的確定值,均能輸出相關(guān)的信息。

2.每噸貨物每公里運(yùn)費(fèi)p與運(yùn)輸距離s有關(guān)。路途愈遠(yuǎn),每噸公里運(yùn)價愈低。公式

如下:

108<100

8100<s<150

7150<s<200

6200<s<500

5500<s

若所付的總運(yùn)費(fèi)超過5000元時,再給予九五折優(yōu)待。從鍵盤輸入貨物噸數(shù)、運(yùn)輸公

里數(shù),用開關(guān)語句(switch)計算運(yùn)費(fèi)。

實(shí)驗評分指導(dǎo)老師簽名

實(shí)驗三

目的與要求:

循環(huán)是構(gòu)造C語言程序的一種十分重要的控制結(jié)構(gòu),稍微復(fù)雜一點(diǎn)的程序就可能必須

包含循環(huán)結(jié)構(gòu),所以,必須通過聽課、復(fù)習(xí)及上機(jī)熟練地掌握第七章的有關(guān)內(nèi)容。

1.熟練地掌握while、do-while及for語句實(shí)現(xiàn)循環(huán)的方法,了解它們各自的長處,

及相互轉(zhuǎn)換的方法。

2.掌握在程序設(shè)計中用循環(huán)的方法實(shí)現(xiàn)各種算法(如窮舉、迭代、遞推等算法)。

實(shí)驗內(nèi)容

1.編程并上機(jī)調(diào)試運(yùn)行以下程序

已知:F(N)=F(N—1)—2F(N—2)+F(N—3)

F(0)=F(1)=F(2)=1

求(1)F(50)

(2)F(0)+..+F(50)

8

2.編程求100以內(nèi)的勾股數(shù)組

說明:我國古代稱直角三角形的兩條直角邊為勾和股,斜邊為弦。早在“周髀算經(jīng)”

的第?篇內(nèi)就談到“勾廣三,股修四,弦隅五”。在公元263年,我國數(shù)學(xué)家劉徽寫的“九

章算術(shù)”中有:

32+42=5252+122=13272+242=25282+152=172

的記載,凡是滿足V+/=z2的正整數(shù)數(shù)組(x,%z)就叫做一個勾股數(shù)組。

如:(3,4,5)、(5,12,13)、(7,24,25)、(8,15,17)均為合法的勾股數(shù)組。

實(shí)驗評分指導(dǎo)老師簽名

實(shí)驗四

目的與要求:

①掌握編譯預(yù)處的文件包含(^include)命令,了解#include使用的環(huán)境、格式(兩

種)與作用

②掌握函數(shù)的有關(guān)知識,學(xué)會靈活地使用函數(shù)

③掌握函數(shù)的定義方法

④掌握函數(shù)形參與實(shí)參的對應(yīng)關(guān)系及“值傳遞”方法

⑤掌握函數(shù)的嵌套調(diào)用和遞歸調(diào)用方法

⑥掌握全局變量和局部變量、靜態(tài)存儲變量和動態(tài)存儲變量的概念與存儲方法。

二.實(shí)驗內(nèi)容:

編程解決下列問題,并上機(jī)調(diào)試運(yùn)行

1.用牛頓迭代法求方程的根,系數(shù)a,6,在主函數(shù)中輸入,求x

在1附近的一個實(shí)根。求出實(shí)根后,在主函數(shù)中輸出。

說明:牛頓迭代法的公式為

x=%-系署,設(shè)迭代到IO一時結(jié)束.

2.編程求任意兩個整數(shù)a,b的最大公約數(shù)和最小公倍數(shù)。用一個函數(shù)求最大公約數(shù),

另一函數(shù)求最小公倍數(shù)。

(1)用全局變量方法:將兩個整數(shù)的最大公約數(shù)、最小公倍數(shù)都設(shè)為全局變量。

(2)不用全局變量,兩個整數(shù)在主函數(shù)中輸入,并傳送給一個函數(shù),求出最大公約

數(shù)后返回主函數(shù),然后再與兩個整數(shù)一起作為實(shí)參傳給另一個函數(shù),以求出最小公倍數(shù)。

返回到主函數(shù)輸出最大公約數(shù)和最小公倍數(shù)。

3.下面的C程序?qū)崿F(xiàn)以下函數(shù)的計算,請將其中的錯誤更正。

sinxsinysinz

sum=----------;---------F—----------\--------+----------;--------

sin(x-y)sin(x-z)sin(y—z)+sin(y-x)sin(z-x)sin(z-y)

#include"math.h"

#include“stadio.h"

9

main()

{floatx,y,z,sum;

scanf("%d%d%d”,x,y,z)

sun=f(x,y,z)+f(y,z,x)+f(z,x,y);

printf(^sum=%fw,sun);

)

floatf(a,b,c)

{value=sin(a)sin(b)*sin(c)};

return(value);

)

實(shí)驗評分指導(dǎo)老師簽名

實(shí)驗五

目的與要求

1.掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法。

2.掌握字符數(shù)組和字符串函數(shù)的使用。

3.掌握與數(shù)組有關(guān)的算法(例如排序)。

二.實(shí)驗內(nèi)容

1.用選擇法對10個字母排序,10個字母用scanf函數(shù)輸入。

2.輸入下列程序,并編譯、連接并運(yùn)行。

main()

(

inti,j,k,score;

intscores[10][5];

for(i=0;i<10;i++)

{j=0;

while(j<5)

{printf("Pleaseenterscore#%d:"j);

scanf("%d”,score);

if(score<0)

break;

scores[i][++j]=score;

)

scores[i][0]=j;

}

}

10

3.上述程序統(tǒng)計十個學(xué)生四門課程成績(第一列為從1開始的順序號),當(dāng)輸入成績

為負(fù)數(shù)時,退出該運(yùn)行程序。現(xiàn)要求當(dāng)輸入負(fù)數(shù)時,只不計入該學(xué)生成績,并不退出

運(yùn)行,試將上述程序改寫,實(shí)現(xiàn)此功能。

實(shí)驗評分指導(dǎo)老師簽名

實(shí)驗六指針

目的要求

1.掌握指針的概念、指針變量的定義和使用方法。

2.學(xué)會使用數(shù)組的指針和指向數(shù)組的指針變量。

3.學(xué)會使用字符串的指針和指向字符串的指針變量。

4.學(xué)會使用指向函數(shù)的指針變量。

5.了解指向指針的指針的概念及其使用方法。

二.實(shí)驗內(nèi)容

1.編寫一個strcmp函數(shù)實(shí)現(xiàn)兩個字符串的比較:

strcmp(sl,s2)

如果sl=s2,則函數(shù)返回值為0;如果slws2,返回它們兩者之間第一個不同字符的ASCII

碼差值(如“B0Y”與“BAD”,第二個字母不同,“0”與“A”之差為79-65=14);如果

sl〉s2,則輸出正值;如果sl<s2,則輸出負(fù)值。

兩個字符串sl、s2在main函數(shù)中輸入,strcmp函數(shù)的返回值也在main函數(shù)中輸出。

請編寫程序并上機(jī)調(diào)試運(yùn)行。

2.下列程序求a數(shù)組中所有素數(shù)之和,函數(shù)isprime用來判斷自變量是否為素數(shù)。

請將程序補(bǔ)充完整并上機(jī)調(diào)試運(yùn)行。

#include"stdio.h"

main()

{inti,a[10],*p=a,sum=0;

printf(/zEnter10num:\nzz);

for(i=0;i<10;i++)scanf&a[i]);

for(i=0;i<10;i++)

if(isprime(*(p+))—1)

{printfC%d”,*(a+i));

)

printf(z/\nThesum=%d\n”,sum);

)

isprime(x)

11

intx;

{inti;

for(i=2;i<=x/2;i++)if(x%i==0)return0;

實(shí)驗評分—指導(dǎo)老師簽名

實(shí)驗七結(jié)構(gòu)體與共用體

目的要求

2.掌握結(jié)構(gòu)體類型變量的定義和使用方法。

3.掌握結(jié)構(gòu)體類型數(shù)組的概念和使用方法。

4.掌握共用體的概念與使用方法。

實(shí)驗內(nèi)容

1.有5個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓名、三門課程的成績,從鍵盤輸入輸

出5個學(xué)生的數(shù)據(jù),要求打印出三門課程的總平均成績,以及最高分學(xué)生的數(shù)據(jù)

(包括學(xué)號、姓名、三門課程的成績、平均分?jǐn)?shù))。

請編寫程序并上機(jī)調(diào)試運(yùn)行。

2.下面程序運(yùn)行后的正確結(jié)果是7,2,5。但程序中有概念上的錯誤和鍵入錯誤,請

改正程序中的錯誤并上機(jī)調(diào)試運(yùn)行。

structks

{inta;

int*b;

};

main()

{structkss[4],*p;

intn=l,i;

for(i=0;i<4;i++)

{s[i].a=n;

s[i].b=&s[i].a;

n=n+2;

)

P=&s[0];

printf(,z%d,%d,%d\n,z,s[3]->a,++(*p->b),*s[2]->b);

)

實(shí)驗評分指導(dǎo)老師簽名

12

實(shí)驗八

目的與要求

1.掌握文件以及緩沖文件系統(tǒng)、文件指針的概念。

2.學(xué)會使用文件的打開與關(guān)閉、文件的讀寫等操作函數(shù)。

3.學(xué)會用緩沖文件系統(tǒng)對文件進(jìn)行簡單的操作。

實(shí)驗內(nèi)容

1.下述程序用于統(tǒng)計文件中的字符個數(shù),請補(bǔ)充程序。

#include<stdio.h>

main()

{FILE*FP;

longnum=0;

if((fp=fopen(“TEST”,“rt”))=NULL)

{printf("Can'topenfile.");

return;}

while((1))num++;

⑵;

printf("num=%Id”,num);)

2.假設(shè)文件A.DAT和B.DAT中的字符都按降序排列,下述程序?qū)⑦@兩個文件合并成

一個降序排列的文件C.DAT,請將程序補(bǔ)充完整。

#include<stdio.h>

main()

{FILE*fl,*f2,*out;

intflag1=1,flag2=l;

chara,b,c;

fl=fopen("A.DAT“,“r");

f2=fopen("B.DAT",“r”);

out=fopen("C.DAT”,"w");

if(!fl;;!f2||lout)

{printf("can'topenfile.");

return;

)

do

{if(!feof(fl)&&⑴)

{a=fgetc(fl);

if(⑵)

break;

}

13

if(!feof(f2)&&flag2)

{b=fget(f2);

if(⑵)

break;

)

if(a>b)

{c=a;flagl=l;flag2=0;

)

else

{c=b;flagl=0;flag2=l;

}

fputc((3))

while(1);

fclose(fl);

fclose(f2);

fclose(out);

3.有5個學(xué)生,每個學(xué)生有3門課的成績,從鍵盤輸入以上數(shù)據(jù)(包括學(xué)生號,姓

名,三門功課成績),計算出平均成績,將原始數(shù)據(jù)和計算出的平均成績存放在磁盤文件

“stud"中。

實(shí)驗評分指導(dǎo)老師簽名

14

常見編譯錯誤信息

TurboC編譯程序查出的源序錯誤分為三類:致命錯誤、一般錯誤和警告。

致命錯誤出現(xiàn)很少,它通常是內(nèi)部編譯出錯。在發(fā)生致命錯誤時,編譯立即停止,必

須采取一些適當(dāng)?shù)拇胧┎⒅匦戮幾g。

一般錯誤指程序的語法錯誤、磁盤或內(nèi)存存取錯誤或命令行錯誤等。編譯程序?qū)⑼瓿?/p>

現(xiàn)階段的編譯,然后停止。編譯程序在每個階段(預(yù)處理、語法分析、優(yōu)化、代碼生成)

盡可能多地發(fā)現(xiàn)源程序中的錯誤。

警告并不阻止編譯進(jìn)行。它指出一些值得懷疑的情況,而這些情況本身乂可以合理地

成為源程序的一部分。如果在源文件中使用了與機(jī)器有關(guān)的結(jié)構(gòu),編譯也將產(chǎn)生警告信息。

編譯程序首先輸出這三類錯誤信息:然后輸出源程序文件名和發(fā)現(xiàn)出錯的行號,最后

輸出信息的內(nèi)容。

下面按字母順序分別列出這三類錯誤信息。對每?條信息,提供可能產(chǎn)生的原因和糾

正方法。

請注意錯誤信息處有關(guān)行號的一個細(xì)節(jié):編譯程序只產(chǎn)生被檢測到的信息。因為C

并不限定在正文的某行放一語句,這樣,真正產(chǎn)生錯誤的行可能在編譯指出的前一行或幾

行。在下面的信息列表中,我們指出了這種可能。

致命錯誤

1.Badcallofin-linefunction內(nèi)部函數(shù)非法調(diào)用

在使用一個宏定義的,內(nèi)部函數(shù)時,沒能正確調(diào)用。一個內(nèi)部函數(shù)以兩個劃線(_一)

開始和結(jié)束。

2.Irreducibleexpressiontree不可約表達(dá)式樹

這種錯誤指的是文件行中的表達(dá)式使得代碼生成無法為它產(chǎn)生代碼。這種表達(dá)式必須

避免使用。如果編譯時總遇到這種情況,應(yīng)該通知Borland公司。

3.Registeralloctionfailure存儲器分配失效

這種錯誤指的是源文件行中的表達(dá)式太復(fù)雜,代碼生成程序無法為它生成代碼。此時

應(yīng)簡化這種繁雜的表達(dá)式或干脆避免使用它。如果編譯時總遇到這種錯誤,應(yīng)通知Borland

公司。

一般錯誤

1.ftoperatornotfollowedbymactoargumentname

#運(yùn)算符后沒跟宏變元名。在宏定義中,#用于標(biāo)識一宏變元名串,“#”后必須跟一

宏變元名。

2.'xxxxxxxx'notanargument

'xxxxxxxx'不是函數(shù)參數(shù)。在源程序是將該標(biāo)識符定義為一個函數(shù)參數(shù),但此標(biāo)識

符沒有函數(shù)表中出現(xiàn)。

3.Ambiguoussymbol'xxxxxxxx'

二義性符號'xxxxxxxx'。兩個或多個結(jié)構(gòu)的某一域名相同,但具有的偏移、類型不

15

同。在變量或表達(dá)式中引用該域而未帶結(jié)構(gòu)名時,將產(chǎn)生二義性,此時需修改某個域名或

在引用時加上結(jié)構(gòu)名。

4.Argument#missingname

參數(shù)#名丟失。參數(shù)名已脫離用于定義函數(shù)的函數(shù)原型。如果函數(shù)或原型定義必須包

含所有的參數(shù)名。

5.Argumentlistsyntaxerror

參數(shù)表出列語錯誤。函數(shù)調(diào)用的參數(shù)間必須以逗號隔開,并以?右括號結(jié)束。若源文

件中含有一個其后不是逗號也不是右括號的參數(shù),則出錯。

6.Arrayboundsmissing

數(shù)組的界線符'1'丟失。在源文件中定義了一個數(shù)組,但此數(shù)組沒有以一右方括號

結(jié)束。

7.Arraysizetoolarge

數(shù)組長度太大。定義的長度太大,可用內(nèi)存不夠。

8.Assemblerstatementtoolong

匯編語句太長。內(nèi)部匯編語句最長不能超過480字節(jié)。

9.Badconfigurationfile

配置文件不正確。TURBOC.CFG配置文件中包含不是合適命令行選擇項的非注解文字。

配置文件命令選擇必須以一短橫線(一)開始。

10.Badfilenameformatinincludedirective

包含指令中文件名格式不正確。包含文件名必須引用("filename』")或尖括號

(〈filename」〉)括起來,否則將產(chǎn)生本類錯誤。如果使用了宏,則產(chǎn)生的擴(kuò)展文本也不

正確(因為無引號)。

11.Badifdefdirectivesyntax

ifdef指令語法錯誤。#ifdef必須以單個標(biāo)識符(只此一個)作為該指令的體。

12.Badifndefdirectivesyntax

ifndef指令語法錯誤。#ifndef必須以單個標(biāo)識符(只此一個)作為該指令的體。

13.Badundefdirectivesyntax

undef指令語法錯誤。#undef指令必須以單個標(biāo)識符(只此一個)作為該指令的體。

14.Badfilesizesyntax

位字段長語法錯誤。一個位字段長必須是1?16位的常量表達(dá)式。

15.Callofnon-function

調(diào)用未定義函數(shù)。正被調(diào)用的函數(shù)無定義,通常是由于不正確的函數(shù)聲明或函數(shù)名拼

錯造成的。

16.Cannotmodifyaconstobject

不能修改個常量對象。對定義為常量的對象進(jìn)行不含法操作(如常量賦值)引起本

錯誤。

17.Caseoutsideofswitch

Case出現(xiàn)在switch外。編譯程序發(fā)現(xiàn)Case語句外面,通常是由于括號不匹配造成

的。

16

18.Casestatementmissing

Case語句漏掉。Case語句必須包含一以冒號終結(jié)的常量表達(dá)式。可能的原因是丟了

冒號或在冒號前多了別的符號。

19.Castsyntaxerror

Cast語法錯誤。Cast中包含了?些不正確的符號。

20.Characterconstanttoolong

字符常量太長。字符常量只能是個或兩個字符長。

21.Compoundstatementmissing

復(fù)合語句漏掉。編譯程序掃描到源文件末時,未發(fā)現(xiàn)結(jié)束大括號,通常是由于大括號

不匹配造成的。

22.Conflictingtypemodifiers

類型修飾符沖突。對同一指針,只能指定一種變址修飾符(如near或far);而對

于同?函數(shù),也只能給出,種語言修飾符(如cdecl、pascal或interrupt)。

23.Constantexpressionrequired

要求常量表達(dá)式。數(shù)組的大小必須是常量,本錯誤通常是由于#define常量的拼寫出

錯而引起的。

24.Couldnotfndfile'xxxxxxx.xxxx'

找不到'xxxxxxxx.xxx,文件。編譯程序找不到命令行上給出的文件。

25.Declarationmissing

說明漏掉在源文件中包含了一個struct或union域聲明,但后面漏掉了分號

(;)。

26.Declarationneedstypeorstorageclass

說明必須給出類型或存儲類。說明必須飲食?個類型或?個存儲類,以下說明是不正

確的:i,j;

27.Declarationsyntaxerror

聲明出現(xiàn)語法錯誤。在源文件中,某個聲明丟失了某些符號或有多余的符號。

28.Defaultoutsideofswitch

Default在switch外出現(xiàn)。編譯程序發(fā)現(xiàn)default語句出現(xiàn)在switch語句之外,通

常是由于括號不匹配造成的。

29.Definedirectiveneedsanidentifer

Define指令必須有一-個標(biāo)識符。#Define后面的第?個非空格符必須是?標(biāo)識符,若

編譯程序發(fā)現(xiàn)一些其它字符,則出現(xiàn)本錯誤。

30.DivisionbyZero

除數(shù)為零。源文件的常量表達(dá)式中,出現(xiàn)除數(shù)為零的情況。

31.Dostatementmusthavewhile

Do語句中必須有while。源文件中包含一無while關(guān)鍵字的do語句時,出現(xiàn)本錯誤。

32.Do-whilestatementmissing(

Do—while語句中漏掉了(o在do語句中,編譯程序發(fā)現(xiàn)while關(guān)鍵字后無左括號。

33.Do-whilestatementmissing)

17

Do-while語句中漏抻了)。在do語句中,編譯程序發(fā)現(xiàn)條件表達(dá)式后無右括號。

34.Do一whilestatementmissing;

Do-while語句中漏掉了分號。在do語句中的條件表達(dá)式中,編譯程序發(fā)現(xiàn)右括號

后面無分號。

35.DuplicateCase

Case的情況不唯一。Switch語句的每個case必須有一個唯一的常量表達(dá)式值。

36.Enumsyntaxerror

Enum語法出現(xiàn)錯誤。Enum說明的標(biāo)識符表的格式不對。

37.Enumerationconstantsyntaxerror

枚舉常量語法錯誤。賦給enum類型變量的表達(dá)式值不為常量。

38.ErrorDirective:xxxx

Error指令:xxxxo源文件處理指令時,顯示該指令指出的信息。

39.Errorwritingoutputfile

寫輸出文件出現(xiàn)錯誤。通常是由于磁盤空間滿造成的,盡量刪掉一些不必要的文件。

40.Expressionsyntax

表達(dá)式語法錯誤。當(dāng)編譯程序分析一表達(dá)式并發(fā)現(xiàn)一些嚴(yán)重錯誤時,出現(xiàn)本錯誤,通

常是由于兩個連續(xù)操作符、括號不匹配或缺少括號、前?語句漏掉了分號等引起的。

41.Extraparameterincall

調(diào)用時出現(xiàn)多余參數(shù)。調(diào)用函數(shù)時,其實(shí)際參數(shù)個數(shù)多于函數(shù)定義中的參數(shù)個數(shù)。

42.Extraparameterincalltoxxxxxxxx

調(diào)用xxxxxxxx函數(shù)時出現(xiàn)了多余的參數(shù)。其中該函數(shù)由原型定義。

43.Filenametoolong

文件名太長。#include指令給出的文件名太長,編譯程序無法處理。DOS下的文件

名不能超過64個字符。

44.Forstatenentmissing(

For語句漏掉"("。編譯程序發(fā)現(xiàn)在for關(guān)鍵字后缺少左括號。

45.Forstatemenmissing)

For語句缺少")在for語句中,編譯程序發(fā)現(xiàn)在控制表達(dá)式后缺少右括號。

46.Forstatementmissing;

For語句缺少":"。在for語句中,編譯程序發(fā)現(xiàn)在某個表達(dá)式后缺少分號。

47.Functioncallmissing)

函數(shù)調(diào)用缺少")函數(shù)調(diào)用的參數(shù)表有幾種語法錯誤,如左括號漏掉或括號不匹

配。

48.Functiondefinitionoutofplace

函數(shù)定義位置錯誤。函數(shù)定義不可出現(xiàn)在另函數(shù)內(nèi)。函數(shù)內(nèi)的任何說明,只要以類

似于帶有一個參數(shù)表的函數(shù)開始,就被認(rèn)為是一個函數(shù)定義。

49.Functiondoesn'ttakeavariablenumberofargument

函數(shù)不接受可變的參數(shù)個數(shù)。源文件中的某個函數(shù)內(nèi)使用了va-start宏,此函數(shù)不

能接受可變數(shù)量的參數(shù)。

18

50.Gotostatementmissinglabel

Goto語句缺少標(biāo)號。在goto關(guān)鍵字后面必須有一個標(biāo)識符。

51.Ifstaementmissing(

If語句缺少"在if語句中,編譯程序發(fā)現(xiàn)if關(guān)鍵字后面缺少左括號。

52.Ifstatementmissing)

If語句缺少“)在if語句中,編譯程序發(fā)現(xiàn)測試表達(dá)式后缺少右括號。

53.Illegalcharacter'('(oxXX)

z

非法字符'((oxXX)o編譯程序發(fā)現(xiàn)輸入文件中有一些非法字符。以十六進(jìn)制方式

打印該字符。

54.Illegalinitialization

非法初始化必須是常量表達(dá)式后?個全局變量extern或static的地址加減-常量。

55.Illegaloctaldigit

非法八進(jìn)制數(shù)。編譯程序發(fā)現(xiàn)在?個八進(jìn)制常數(shù)中包含了非八進(jìn)制數(shù)字(8或9)。

56.Illegalpointersubtraction

非法指針相減。這是由于試圖以一個非指針變量減去一?個指針變量而造成的。

57.Illegalstructureoperation

非法結(jié)構(gòu)操作。結(jié)構(gòu)只能使用(.)、取地址(&)和賦值(=)操作符,或作為函數(shù)的

參數(shù)傳遞。當(dāng)編譯程序發(fā)現(xiàn)結(jié)構(gòu)使用了其它操作符時,出現(xiàn)本錯誤。

58.Illegaluseoffloatingpoint

浮點(diǎn)運(yùn)算非法。浮點(diǎn)運(yùn)算操作數(shù)不允許出現(xiàn)在移位、按位置邏輯操作、條件(?:)、

間接(*)以及其它?些操作符中。編譯程序發(fā)現(xiàn)上述操作符中使用了浮點(diǎn)操作數(shù)時,出

現(xiàn)本錯誤。

59.Illegaluseofpointer

指針使用非法。指針只能在加、減、賦值、比較、間接(*)或箭頭(一)操作中使

用。如用其它操作符,則出現(xiàn)本錯誤。

60.Improperuseofatypedefsymbol

typedef符號使用不當(dāng)?源文件中使用了一個符號,符號變量應(yīng)在一個表達(dá)式中出現(xiàn)。

檢查一下此符號的說明和可能的拼寫錯誤。

61.In-lineassemblynotallowed

內(nèi)部匯編語句不允許。源文件中含有直接插入的匯編語句,若在集成環(huán)境下進(jìn)行編譯,

則出現(xiàn)本錯誤。必須使用TCC命令行編譯此源文件。

62.Incompatiblestorageclass

不相容的存儲類。源文件的一個函數(shù)定義中使用了extern關(guān)鍵字,而只有static(或

根本沒有存儲類型)是允許的。

63.Incompatibletypeconversion

不相容的類型轉(zhuǎn)換。源文件中試圖把一種類型轉(zhuǎn)換成另一種類型。但這兩種類型是不

相容的。如函數(shù)與非函數(shù)間轉(zhuǎn)換、?種結(jié)構(gòu)或數(shù)組與一種標(biāo)準(zhǔn)類型轉(zhuǎn)換、浮點(diǎn)數(shù)和指針間

轉(zhuǎn)換等。

64.Incorrectcommandlineargument:xxxxxxxx

19

不正確的命令行參數(shù):XXXXXXXXo編譯程序認(rèn)為此命令行參數(shù)是非法的。

65.Incorrectconfigurationfileargument:xxxxxxxx

不正確的配置文件參數(shù):XXXXXXXX(-),編譯程序認(rèn)為此配置文件是非法的。檢查一

下前面的短橫線(-)

66.Incorrectnumberformat

不正確的數(shù)據(jù)格式。編譯程序發(fā)現(xiàn)在十六進(jìn)制數(shù)中出現(xiàn)十進(jìn)制小數(shù)點(diǎn)。

67.Incoorectuseofdefault

default不正確使用。編譯程序發(fā)現(xiàn)default關(guān)鍵字后缺少分號。

68.Initializersyntaxerror

初始化語法錯誤。初始化過程缺少或多了操作符,括號不匹配或其它一些不正常情況。

69.Invalidindrection

無效的間接運(yùn)算。間接運(yùn)算操作符(*)要求非空指針作為操作分量。

70.Invatidmacroargumentseperator

無效的宏參數(shù)分隔符。在宏定義中,參數(shù)必須用逗號相隔。編譯程序發(fā)現(xiàn)在參數(shù)名后

面有其它非法字符,出現(xiàn)本錯誤。

71.Invalidpointeraddition

無效的指針相加。源程序中試圖把兩個指針相加。

72.Invaliduseofarray

箭頭使用錯。在箭頭(f)操作符后必須跟一標(biāo)識符。

73.Invaliduseofdot

點(diǎn)使用錯。在點(diǎn)(.)操作符后必須跟-標(biāo)識符。

74.Lvaluerequired

賦值請求。賦值操作符的左邊必須是一個地址表達(dá)式,包括數(shù)值變量、指針變量、結(jié)

構(gòu)引用域、間接指針和數(shù)組分量。

75.Macroargumentsyntaxerror

宏參數(shù)語法錯誤。宏定義中的參數(shù)必須是一個標(biāo)識符。編譯程序發(fā)現(xiàn)所需的參數(shù)不是

標(biāo)識符的字符,則出現(xiàn)本錯誤。

76.Macroexpansiontoolong

宏擴(kuò)展太長。一個宏擴(kuò)展不能多于4096個字符。當(dāng)宏遞歸擴(kuò)展自身時,常出現(xiàn)本錯

誤。宏不能對自身進(jìn)行擴(kuò)展。

77.Maycompileonlyonefilewhenanoutputfilenameisgiven

給出一個輸出文件名時,可能只編譯一個文件。在命令行編譯中使用-。選擇,只允許

一個輸出文件名。此時,只編譯第一個文件,其它文件被忽略。

78.Mismatchnumberofparametersindefinition

定義中參數(shù)個數(shù)不匹配。定義中的參數(shù)和函數(shù)原型中提供的信息不匹配。

79.Miaplacedbreak

break位置錯誤。編譯程序發(fā)現(xiàn)break語句在switch語句或循環(huán)結(jié)構(gòu)外。

80.Misplacedcontinue

Continue位置錯。編譯程序發(fā)現(xiàn)continue語句在循環(huán)結(jié)構(gòu)外。

20

81.Misplaceddecimalpoint

十進(jìn)制小數(shù)點(diǎn)位置錯。編譯程序發(fā)現(xiàn)浮點(diǎn)常數(shù)的指數(shù)部分有一個十進(jìn)制小數(shù)點(diǎn)。

82.Misplacedelse

else位置錯。編譯程序發(fā)現(xiàn)else語句缺少與之相匹配的if語句。本錯誤的產(chǎn)生,除

了由于else多余外,還有可能是由于有多余的分號、漏寫了大括號或前面的if語句出現(xià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

提交評論