




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言程序設計上機實驗指導手冊電子與信息工程學院計算機科學系第一部分 上機實驗的指導思想和要求一、上機實驗的目的學習C語言程序設計課程不能滿足于“懂得了”,滿足于了解了語法和能看懂書上的程序,而應當掌握程序設計的全過程,即能獨立編寫出源程序,獨立上機調試程序,獨立運行程序和分析結果。“程序設計”是一門實踐性很強的課程,必須十分重視實踐環(huán)節(jié)。許多實際的知識不是靠聽課和看書學到手的,而是通過長時間的實踐積累的。要提倡通過實踐去掌握知識的方法。必須保證有足夠的上機實驗時間,學習本課程應該至少有30 小時的上機時間,最好能做到與授課時間之比為1:1 。除了學校規(guī)定的上機實驗以外,應當提倡學生自己課余抽
2、時間多上機實踐。上機實驗的目的,絕不僅是為了驗證教材和講課的內容,或者驗證自己所編的程序正確與否。學習程序設計,上機實驗的目的是:(1)加深對講授內容的理解,尤其是一些語法規(guī)定,光靠課堂講授,既枯燥無味又難以記住,但它們是很重要的,初學者的程序出錯往往錯在語法上。通過多次上機,就能自然地、熟練地掌握。通過上機來掌握語法規(guī)則是行之有效的方法。(2)熟悉所用的計算機系統的操作方法,也就是了解和熟悉C語言程序開發(fā)的環(huán)境。一個程序必須在一定的外部環(huán)境下才能運行,所謂“環(huán)境”,就是指所用的計算機系統的硬件和軟件條件,或者說是工作平臺。使用者應該了解為了運行一個C程序需要哪些必要的外部條件(例如硬件配置、
3、軟件配置),可以利用哪些系統的功能來幫助自己開發(fā)程序。每一種計算機系統的功能和操作方法不完全相同,但只要熟練掌握一兩種計算機系統的使用,再遇到其他系統時便會觸類旁通,很快就能學會。(3)學會上機調試程序。也就是善于發(fā)現程序中的錯誤,并且能很快地排除這些錯誤,使程序能正確運行。經驗豐富的人,在編譯連接過程中出現“出錯信息”時,一般能很快地判斷出錯誤所在,并改正之。而缺乏經驗的人即使在明確的“出錯提示”下也往往找不出錯誤而求助于別人。要真正掌握計算機應用技術,就不僅應當了解和熟悉有關理論和方法,還要求自己動手實現。對程序設計來說,則要求會編程序并上機調試通過。因此調試程序不僅是得到正確程序的一種手
4、段,而且它本身就是程序設計課程的一個重要的內容和基本要求,應給予充分的重視。調試程序固然可以借鑒他人的現成經驗,但更重要的是通過自己的直接實踐來累積經驗,而且有些經驗是只能“會意”難以“言傳”。別人的經驗不能代替自己的經驗。調試程序的能力是每個程序設計人員應當掌握的一項基本功。因此,在做實驗時千萬不要在程序通過后就認為萬事大吉、完成任務了,而應當在己通過的程序基礎上作一些改動(例如修改一些參數、增加程序的一些功能、改變某些語句、改變輸入數據的方法等),再進行編譯、連接和運行。甚至于“自設障礙”,即把正確的程序改為有錯的(例如語句漏寫分號;用scanf函數輸入變量時,漏寫“&”符號;比較符“=
5、=”錯寫為賦值號“=”;使數組下標出界;使整數溢出等),觀察和分析所出現的情況。這樣的學習才會有真正的收獲,是靈活主動的學習而不是呆板被動的學習。二、上機實驗前的準備工作在上機實驗前應事先做好準備工作,以提高上機實驗的效率,準備工作至少應包括:(1)了解所用的計算機系統(包括C編譯系統和工作平臺)的性能和使用方法;(2)復習和掌握與本實驗有關的教學內容;(3)準備好上機所需的程序。由于計算機實驗室給每個學生安排的時間是有限的,要珍惜時間,充分利用。應當在上機前按指定的題目編寫好程序。手編程序應書寫整齊,并經人工檢查無誤后才能上機,以提高上機效率。初學者切忌不編程序或抄別人程序去上機,應從一開始
6、就養(yǎng)成嚴謹的科學作風;(4)對運行中可能出現的問題事先作出估計,對程序中自己有疑問的地方,應作出記號,以便在上機時給予注意;(5)準備好調試和運行時所需的數據。三、上機實驗的步驟上機實驗時一人一組,獨立上機,復雜分組進行,相互討論完成任務。上機過程中出現的問題,除了是系統的問題以外,一般應自己獨立處理,不要輕易舉手問教師。尤其對“出錯信息”,應善于自己分析判斷。這是學習調試程序的良好機會。上機實驗一般應包括以下幾個步驟:(1)進入C工作環(huán)境(Dev-C+ 5.8.3)。(2)輸入自己所編好的程序。(3)檢查一遍已輸入的程序是否有錯(包括輸入時打錯的和編程中的錯誤),如發(fā)現有錯,及時改正。(4)
7、進行編譯和連接。如果在編譯和連接過程中發(fā)現錯誤,屏幕上會出現“出錯信息”,根據提示找到出錯位置和原因,加以改正。再進行編譯,如此反復直到順利通過編譯和連接為止。(5)運行程序并分析運行結果是否合理和正確。在運行時要注意當輸入不同數據時所得到的結果是否正確。(6)輸出程序清單和運行結果。四、實驗驗收(1)現場驗收,學生講解、提問、答辯的方式,通過三方面的表現給出實驗成績;(2)提交程序清單(電子版)。第二部分 關于程序的調試和測試一、程序錯誤的類型為了幫助各位同學調試程序和分析程序,下面簡單介紹程序出錯的種類。(1)語法錯誤即不符合C語言的語法規(guī)定,例如將main 錯寫為naim ,括號不匹配,
8、語句最后漏了分號等,這些都會在編譯時被發(fā)現并指出。這些都屬于“致命錯誤”, 不改正是不能通過編譯的。對一些在語法上有輕微毛病但不影響程序運行的錯誤(如定義了變量但始終未使用),編譯時會發(fā)出“警告”,雖然程序能通過編譯,但不應當使程序“帶病工作”,應該將程序中所有導致“錯誤(error)”和“警告(warning)”的因素都消除,再使程序投入運行。(2)邏輯錯誤這是指程序無語法錯誤,也能正常運行,但是結果不對。例如求s=l+2+3+100,有人寫出以下語句:for(s=0, i=1; i100; i+) s=s + i;語法沒有錯,但求出的結果是l+2+3+99之和,而不是l+2+3+100之和
9、,原因是少執(zhí)行了一次循環(huán)。這類錯誤可能是設計算法時的錯誤,也可能是算法正確而在編寫程序時出現疏忽所致。這種錯誤計算機是無法檢查出來的。如果是算法有錯,則應先修改算法,再改程序。如果是算法正確而程序寫得不對,則直接修改程序。(3)運行錯誤有時程序既無語法錯誤,又無邏輯錯誤,但程序不能正常運行或結果不對。多數情況是數據不對,包括數據木身不合適以及數據類型不匹配。如有以下程序:void main ( ) int a, b, c ; scanf(“%d, %d”, &a, &b);c=a/b;printf(“%dn”,c);當輸入的b為非零值時,運行無問題。當輸入的b為零時,運行時出現“溢出(over
10、flow)”的錯誤。如果在執(zhí)行上面的scanf語句時輸入456.78 34.56,則輸出c的值為2,顯然是不對的。這是由一于輸入的數據類型與輸入格式符%d不匹配而引起的。二、程序的測試程序調試的任務是排除程序中的錯誤,使程序能順利地運行并得到預期的效果。程序的調試階段不僅要發(fā)現和消除語法上的錯誤,還要發(fā)現和消除邏輯錯誤和運行錯誤。除了可以利用編譯時提示的“出錯信息”來發(fā)現和改正語法錯誤外,還可以通過程序的測試來發(fā)現邏輯錯誤和運行錯誤。程序的測試的任務是盡力尋找程序中可能存在的錯誤。在測試時要設想到程序運行時的各種情況,測試在各種情況下的運行結果是否正確。程序測試是程序調試的一個組成部分。有時程
11、序在某些情況下能正常運行,而在另外一些情況下不能正常運行或得不到正確的結果,因此,一個程序即使通過編譯并正常運行而且結果正確,還不能認為程序沒有問題了。要考慮是否在任何情況下都能正常運行并且得到正確的結果。測試的任務就是要找出那些不能正常運行的情況和原因。下而通過一個典型的和容易理解的例子來說明測試的概念。求一元二次方程ax2+bx+c=0的根。有人根據求根公式x1, 2=(-bsqrt(b2-4ac)/2a編寫出以下程序:# include # includevoid main( ) float a, b, c, disc, x1, x2; scanf(“%f, %f, %f”, &a, &
12、b, &c); disc=b*b-4*a*c; x1=(-b + sqrt(disc)/(2*a); x2=(-b - sqrt(disc)/(2*a); printf(”x1=%6.2f, x2=%6.2fn”, x1, x2);當輸入a,b,c的值為1,-2,-15 時,輸出xl 的值為5,x2的值為-3。結果是正確無誤的。但是若輸入a,b,c的值為3,2,4 時,屏幕上出現了出錯信息,程序停止運行,原因是此時b2-4ac小于0,出現了對負數求平方根的運算,故出錯。因此,此程序只適用b2-4ac0的情況。我們不能說上面的程序是錯的,而只能說程序對可能出現的情況“考慮不周” ,所以不能保證在
13、任何情況下都是正確的。使用這個程序必須滿足一定的前提(b2-4ac0),這樣,就給使用程序的人帶來不便。人們在輸入數據前,必須先算一下,看b2-4ac是否大于或等于0。一個程序應能適應各種不同的情況,并且都能正常運行并得到相應的結果。下面分析一下求方程ax2+bx+c=0的根,有幾種情況:(1)a0時 b2-4ac0有兩個不等的實根:x1, 2=(-bsqrt(b2-4ac)/2a b2-4ac=0有兩個相等的實根:x1= x 2=-b/2a b2-4ac0 a0,b2-4ac=0 a0,b2-4ac0 a=0,b0 a=0,b= 0,c = 0 a=0,b= 0,c0應當分別測試程序在以上6
14、 種情況下的運行情況,觀察它們是否符合要求。為此,應準備6 組數據。用這6 組數據去測試程序的“健壯性”。在使用上面這個程序時,顯然只有滿足情況的數據才能使程序正確運行,而輸入滿足情況的數據時,程序出錯。這說明程序不“健壯”。為此,應當修改程序,使之能適應以上6 種情況??蓪⒊绦蚋臑椋?include#includevoid main( ) float a, b, c, disc, x1, x2, p, q; printf(input a, b, c: ); scanf(“%f, %f, %f”, &a, &b, &c); if(a= =0) if(b= =0) if(c= =0) print
15、f(It is trivial.n); else printf(It is impossible.n); else printf(It has one solution:n); pirntf(x=%6.2fn,-c/b); else disc= b*b-4*a*c; if(disc=0) if(disc0) printf(It has two real solutions:n); x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(”x1=%6.2f, x2=%6.2fn”, x1, x2); else printf(It has
16、two same real solutions:n); printf(x1=x2=%6.2fn,-b/(2*a); else pritnf(It has two complex solutions:n); p=-b/(2*a); q=sqrt(-disc)/(2*a); printf(x1=%6.2f+%6.2fi, x2=%6.2f - %6.2fin, p, q, p, q); 為了測試程序的“健壯性”,我們準備了6組數據: 3,4,1 1,2,1 4,2,1 0,3,4 0,0,0 0,0,5分別用這6組數據作為輸入的a,b,c的值,得到以下的運行結果: input a, b, c: 3
17、 4 1 It has two real solutions: x1=-0.33, x2= -1.00 input a, b, c: 1 2 1 It has two same real solutions: x1=x2= -1.00 input a, b, c: 4 2 1 It has two complex solutions: x1 input a, b, c: 0 3 4 It has one solutions: x1=-1.33 input a, b, c: 0 0 0 It is trivial. input a, b, c: 0 0 5 It is impossible.經過
18、測試,可以看到程序對任何輸入的數據都能正常運行并得到正確的結果。以上是根據數學知識知道輸入數據有6種方案。但在有些情況下,并沒有現成的數學公式作為依據,例如一個商品管理程序,要求對各種不同的檢索作出相應的反應。如果程序包含多條路徑(如由if語句形成的分支),則應當設計多組測試數據,使程序中每一條路徑都有機會執(zhí)行,觀察其運行是否正常。以上就是程序測試的初步知識。測試的關鍵是正確地準備測試數據。如果只準備4 組測試數據,程序都能正常運行,仍然不能認為此程序己無問題。只有將程序運行時所有的可能情況都作過測試,才能作出判斷。測試的目的是檢查程序有無“漏洞”。對于一個簡單的程序,要找出其運行時全部可能執(zhí)
19、行到的路徑,并正確地準備數據并不困難。但是如果需要測試一個復雜的大程序,要找到全部可能的路徑并準備出所需的測試數據并非易事。例如:有兩個非嵌套的if語句,每個if語句有兩個分支,它們所形成的路徑數目為224。如果一個程序包含100 個if語句,則可能的路徑數目為21001.2676511030,要測試每一條路徑兒乎是不可能的。實際上進行測試的只是其中一部分(執(zhí)行幾率最高的部分)。因此,經過測試的程序一般還不能輕易宣布為“沒有問題”,只能說“經過測試的部分無問題”。正如檢查身體一樣,經過內科、外科、眼科、五官科各科例行檢查后,不能宣布被檢查者“沒有任何病癥”,他有可能有隱蔽的、不易查出的病癥。所
20、以醫(yī)院的診斷書一般寫為“未發(fā)現異?!保荒軐憽按巳松眢w無任何問題”。我們應當了解測試的目的,學會組織測試數據,并根據測試的結果修改完善程序。第三部分 實驗內容與安排實驗一 簡單的C程序實驗1實驗目的(1)了解Dev-C+集成環(huán)境的窗口界面,熟練掌握如何編輯、編譯、連接、運行一個C程序以及如何保存和修改C語言的源程序。(2)通過運行簡單的C程序,初步了解C源程序的結構和特點。(3)學會簡單的讀程序和調試程序。2實驗內容(1)輸出圖形。(2)求下圖所示田徑場的周長和面積。(3)已知圓的周長與面積公式為: Cir=2*3.14*rad Area=3.14*rad*rad 從鍵盤輸入一個半徑值,求該
21、圓的周長和面積。要求:用主函數實現半徑的輸入,圓周長和面積的輸出,周長和面積用不同的函數來實現。3預習內容C程序設計(第四版)第1章、第3章實驗二 順序程序設計1實驗目的(1)掌握C語言中使用最多的一種語句賦值語句的使用方法。(2)掌握C語言數據類型,熟悉如何定義一個整型、字符型和實型的變量,以及對它們賦值的方法,了解字符型數據和整型數據的內在關系。(3)掌握不同的類型數據之間賦值的規(guī)律。(4)掌握對各種類型數據的正確輸入方法。(5)學會使用C的有關算術運算符,以及包含這此運算符的表達式。(6)掌握各種類型數據的輸入輸出的方法,能正確使用各種格式轉換符。(7)進一步掌握編寫程序和調試程序的方法
22、。2實驗內容和步驟(1)用下面的scanf函數輸入數據,使a=3, b=7, x=8.5, y=71.82, c1=A, C2=a。 問在鍵盤上如何輸入? #include int main( ) int a, b; float x, y; char c1, c2; scanf( “a=%db=%d”, &a, &b); scanf(“%f%f”, &x, &y); scanf(“%c%c”,&c1, &c2); return 0;(2)設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數據,輸出計算結果,輸出時要求有文字說明,取小數點后2為數
23、字。請編程序。(3)求ax2+bx+c=0方程的根。a, b, c由鍵盤輸入,假設b2- 4ac0。3預習內容C程序設計(第四版)第3章。實驗三 選擇結構程序設計1實驗目的(1)了解C語言表示邏輯量的方法(以0代表“假”,以非0代表“真”)。(2)學會正確使用邏輯運算符和邏輯表達式。(3)熟練掌握if 語句和switch 語句。(4)結合程序掌握一些簡單的算法。(5)進一步學習調試程序的方法。2實驗內容本實驗要求事先編好解決下面問題的程序,然后上機輸入程序并調試運行程序。(1)有3個整數a, b, c,由鍵盤輸入,輸出其中最大的數。(2)有一函數: x (x1)y= 2x1 (1x10)3x1
24、1 (x10) 寫程序,用scanf函數輸入x的值,輸出y相應的值。運行程序輸入x 的值(分別為x1、110、x10這3種情況),檢查輸出的y 值是否正確。(3)給出一個百分制成績,要求輸出成績等級A、B、C、D、E。90分以上為A,8189 分為B,7079分為C,6069分為D,60分以下為E。 事先編好程序,要求分別用if語句和switch語句來實現。運行程序,并檢查結果是否正確。 再運行一次程序,輸入分數為負值(如-70),這顯然是輸入時出錯,不應給出等級,修改程序,使之能正確處理任何數據,當輸入數據大于100和小于0時,通知用戶“輸入數據錯”,程序結束。(4)給一個不多于5 位的正整
25、數,要求: 求出它是幾位數; 分別輸出每一位數字; 按逆序輸出各位數字,例如原數為321,應輸出123。應準備以下測試數據: 要處理的數為1位正整數; 要處理的數為2 位正整數; 要處理的數為3 位正整數; 要處理的數為4 位正整數; 要處理的數為5 位正整數。除此之外,程序還應當對不合法的輸入做必要的處理,例如: 輸入負數; 輸入的數超過5位(如123456 )。3預習內容C程序設計(第四版)第4章。實驗四 循環(huán)結構程序設計(一)1實驗目的(1)熟悉掌握用while語句、do-while語句實現循環(huán)的方法。(2)掌握在程序設計中用循環(huán)的方法實現一些常用算法。(3)進一步學習調試程序。2實驗內
26、容編程序并上機調試運行。(1)輸入兩個正整數m和n,求它們的最大公約數和最小公倍數。在運行時,輸入的值mn,觀察結果是否正確。再輸入時,使ms2,輸出一個正數;若s1=s2,輸出0;若s1=1)3預習內容C程序設計(第四版)第7章。實驗九 函 數(二)1實驗目的(1)掌握函數的嵌套調用和數組作為函數參數的方法。(2)掌握全局變量和局部變量、動態(tài)變量、靜態(tài)變量的概念和使用方法。2實驗內容編程序并上機調試運行。(1)輸入10個學生5門課的成績,分別用函數實現下列功能: 計算每個學生平均分。 計算每門課的平均分。 找出所有50個分數中最高的分數所對應的學生和課程。 計算平均分方差。(2)給出年、月、
27、日,計算該日是該年的第幾天。3預習內容C程序設計(第四版)第7章。實驗十 指 針1實驗目的(1)通過實驗進一步掌握指針的概念,會定義和使用指針變量。(2)能正確使用數組的指針和指向數組的指針變量。(3)能正確使用字符串的指針和指向字符串的指針變量。(4)了解指向指針的指針的概念及其使用方法。2實驗內容編程序并上機調試運行程序(都要求用指針處理)。(1)輸入3個整數,按由小到大的順序輸出。(2)輸入10個整數,將其中最小的數與第一個數對換,把最大的數與最后一個對換。寫3個函數: 輸入10個數; 數據處理; 輸出10個數。(3)寫一個函數,求一個字符串的長度。在main函數中輸入字符串,并輸出其長度。(4)編一個程序,輸入月份號,輸出該月的英文月名。例如,輸入“3”,則輸出“Match”,要求用指針數組處理。3預習內容C程序設計(第四版)第8章。實驗十一 結構體與共用體1實驗目的(1)掌握結
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國電容式傳感器場行業(yè)運行現狀及發(fā)展前景分析報告
- 衡陽幼兒師范高等專科學?!兜乩矶嗝襟w課件制作》2023-2024學年第二學期期末試卷
- 浙江樹人學院《ERP軟件原理與應用》2023-2024學年第二學期期末試卷
- 2025年四川省建筑安全員《C證》考試題庫
- 陜西理工大學《數字化會計》2023-2024學年第二學期期末試卷
- 長江大學文理學院《報關實務》2023-2024學年第二學期期末試卷
- 福建船政交通職業(yè)學院《網絡規(guī)劃與優(yōu)化實驗》2023-2024學年第二學期期末試卷
- 2025屆吉林省長春市高三上學期質量監(jiān)測(一)歷史試卷
- 湘潭大學《生命科學基礎》2023-2024學年第二學期期末試卷
- 重慶師范大學《醫(yī)學影像診斷學上》2023-2024學年第二學期期末試卷
- 2024年企業(yè)規(guī)章制度修訂方案
- 聚焦任務的學習設計作業(yè)改革新視角
- 血管活性藥物靜脈輸注護理方法(中華護理學會團體標準T CNAS 22-2021)
- 史上最完善IPD培訓資料華為IPD培訓資料
- 2024高二語文期末試卷(選必上、中)及詳細答案
- 《選材專項訓練》課件
- 附著式升降腳手架安裝平臺和架體檢查驗收表
- 小兒麻疹的護理查房
- DL-T 2574-2022 混流式水輪機維護檢修規(guī)程
- 《鋼鐵是怎樣煉成的》讀書分享課件
- GB/T 19830-2023石油天然氣工業(yè)油氣井套管或油管用鋼管
評論
0/150
提交評論