C語言與程序設(shè)計實驗指導(dǎo)、報告書__第1頁
C語言與程序設(shè)計實驗指導(dǎo)、報告書__第2頁
C語言與程序設(shè)計實驗指導(dǎo)、報告書__第3頁
C語言與程序設(shè)計實驗指導(dǎo)、報告書__第4頁
C語言與程序設(shè)計實驗指導(dǎo)、報告書__第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精品c語言與程序設(shè)計實驗指導(dǎo)、報告書班級:姓名:計算機(jī)科學(xué)與技術(shù)學(xué)院c程序設(shè)計語言課程是計算機(jī)專業(yè)和非計算機(jī)專業(yè)的一門技術(shù)基礎(chǔ)選修課程,大學(xué)一年級開設(shè),同時也是作為學(xué) 生學(xué)習(xí)計算機(jī)的一種啟蒙語言。通過木課程的學(xué)習(xí)使學(xué)生更好地了解和應(yīng)用計算機(jī),培養(yǎng)學(xué)生應(yīng)用計 算機(jī)獨立解決問題的能力,讓學(xué)生基木掌握一門使用計算機(jī)的語言工具, 為學(xué)生今后無論是從事計算機(jī)或非計算機(jī)工作都奠定了良好的、扎實的計 算機(jī)語言基礎(chǔ)。c程序設(shè)計語言最早是由dennis richie于1973年設(shè)計并實現(xiàn)的。 從那時開始,c語言已經(jīng)從其位于貝爾實驗室的發(fā)源地傳播到世界各地, 它已成為全球程序員的公共語言,并由此也誕生了兩個新的主

2、流語言c+ 與java它們都建立在c語言的語法和基木結(jié)構(gòu)的基礎(chǔ)上。現(xiàn)在世界上 的許多軟件都是在c語言及其衍生的各種語言的基礎(chǔ)上開發(fā)出來的。c程序設(shè)計語言課程是高強(qiáng)度的腦力勞動,不是聽會的,也不是看會 的,而是口己練習(xí)會的。因此,要求大家在學(xué)習(xí)c程序設(shè)計語言課程時, 不能滿足于能看懂書上的程序,而應(yīng)當(dāng)熟練地掌握程序設(shè)計的全過程,即 能獨立地編寫出源程序,獨立地上機(jī)調(diào)試程序,獨立運行程序和分析結(jié)果。 程序設(shè)計是一門實踐性很強(qiáng)的課程,必須十分重視實踐環(huán)節(jié),同時還必須 保證應(yīng)有足夠的上機(jī)實驗時間。c程序設(shè)計實驗指導(dǎo)、報告書是為配合c程序設(shè)計語言課程而編 寫的一木具有很強(qiáng)的實踐性教材。c程序設(shè)計語言課程

3、為我校精品課程建 設(shè)z-,為了達(dá)到木課程各個教學(xué)環(huán)節(jié)的規(guī)范化,并讓學(xué)生真止達(dá)到學(xué) 以致用的效果,除了要求學(xué)生掌握木課程大綱所要求的知識點外,更重要 的還要通過實踐教學(xué)環(huán)節(jié)來拓展學(xué)生程序設(shè)計的邏輯思維和提高程序設(shè) 計的能力,同時也能讓學(xué)生深刻地了解關(guān)于如何運用軟件工程的理念去開 發(fā)軟件。由于木課程是為面向全校各專業(yè)開設(shè),為此,對學(xué)生學(xué)習(xí)木課程的要 求也有所不同,考慮這一點,在木教程的內(nèi)容安排上也有所不同,授課教 師可根據(jù)授課專業(yè)的需要進(jìn)行必要的題目選擇。木實驗教程中內(nèi)容的編寫,是根據(jù)木課程教學(xué)大綱的指導(dǎo)下基木上是 以學(xué)生的興趣和愛好為出發(fā)點進(jìn)行編排的,其中體現(xiàn)出在掌握了課堂教學(xué) 環(huán)節(jié)上的理論知識

4、,得以在木實踐環(huán)節(jié)中得到應(yīng)用。木實驗教程共安排了5個實驗,每項實驗包括實驗學(xué)時、實驗?zāi)康摹?實驗內(nèi)容及部分思考題等。整個實驗建議用40學(xué)時完成,其中計劃學(xué)時 20,另外20學(xué)時是對編程感興趣的同學(xué)安排的,可作為選項實驗題目, 所以學(xué)生可以根據(jù)口己的情況進(jìn)行選做。吊山帝賂勤務(wù)役c程序設(shè)計課程教學(xué)組2005年秋學(xué)期目 錄實驗簡單c程序設(shè)計1.1項目編程(1) 找出a, b, c中最大值(2) 按a, b, c值由小到大輸出(3) 報選體育科目統(tǒng)計程序1.2課外選做題(1) 輸入100條數(shù)據(jù),找出最大值及位置(2) 統(tǒng)計輸入的字符串中,數(shù)字、字母與其他字符的個數(shù)(3) 打印簡單圖形實驗2:數(shù)組與排序

5、2. 1項目編程(1) 交換數(shù)組元索(2) 排序程序(3) 查詢程序2. 2課外選做題(1) 矩陣運算(2) 級數(shù)求和(3) 電路計算(4) 字符串處理實驗3:模塊化編程3. 1項目編程(1) 矩陣運算(2) 字符串升序排序(3) 排列方陣程序3. 2課外選做題(1) 計算某數(shù)的位數(shù)之積(2) 年齡統(tǒng)計程序(3) 字符插入操作實驗4:指針與鏈表4. 1項目編程(1) 利用行指針實現(xiàn)成績查詢(2) 建立鏈表程序(3) 字符刪除4. 2課外選做題(1) 字符統(tǒng)計(2) 結(jié)構(gòu)體數(shù)組的應(yīng)用(3) 字符串連接實驗5:綜合程序設(shè)計5. 1項目編程(1) 破譯密碼程序(2) 趣味編程(3) 人民幣面值統(tǒng)計(

6、4) 考試成績處理5. 2課外選做題(1) 文木詞匯統(tǒng)計(2) 趣味編程(3) 選票統(tǒng)計附錄i本實驗總結(jié)附錄ii編程必須注意的幾個問題 附錄iii程序調(diào)試與常見錯誤分析 附錄iv tc部分出錯信息注釋 參考文獻(xiàn)l實驗1簡單c程序設(shè)計、實驗學(xué)時:4二、實驗?zāi)康模?、學(xué)習(xí)和了解c程序設(shè)計語言的數(shù)據(jù)類型及在內(nèi)存中的儲存方式, 理解數(shù)據(jù)的層次結(jié)構(gòu);2、學(xué)習(xí)掌握輸入、輸出函數(shù)的基本格式和使用方法;3、了解c語言源代碼轉(zhuǎn)換成可執(zhí)行程序的過程;4、掌握選擇、循壞語句的使用規(guī)則;5、能夠設(shè)計和編寫簡單的c應(yīng)用程序。三、必須學(xué)習(xí)和掌握的知識點:1、曲用的數(shù)據(jù)類型及各類型數(shù)據(jù)的取值范圍(int、long int、

7、float、double、char)2、選擇語句:ifelse switch3、循環(huán)語句:while do-while for4、編譯程序圖1-1所表示的是一個簡化的編譯過程,它簡單地描述了計算機(jī)執(zhí)行 程序的方式。實際編譯過程的細(xì)節(jié)是非常復(fù)朵的,且難以理解,在此不予 討論。圖1-1編譯過程編程人員在編程語言屮耍編寫計算機(jī)將遵循的指令,類似于英語的命 令稱為源代碼。計算機(jī)讀取這些代碼后,將其存入內(nèi)存,以便進(jìn)行后續(xù)處 理。因為計算機(jī)不能執(zhí)行這種形式的源代碼,所以在處理之前,每條語句 必須經(jīng)丿力一系列的轉(zhuǎn)換過程。圖1-1說明了在文本編輯器屮輸入c語句來創(chuàng)建源程序。編譯器隨后 將源程序轉(zhuǎn)換為一屮間形式

8、,稱為目標(biāo)程序object program),目標(biāo)程序 表示源代碼對應(yīng)的機(jī)器碼。編譯器讀取和檢查源程序的各個語句,在檢查 過程屮將源語句轉(zhuǎn)換為機(jī)器碼(即計算機(jī)可以理解的二進(jìn)制代碼),并檢 查其語法錯誤。如發(fā)現(xiàn)錯誤,編譯器將標(biāo)記不正確的語句,并打印一系列錯誤診斷消 息,簡耍說明所冇語法錯誤(即違反c語句冇效編寫規(guī)則的代碼)。此時, 編程人員需要修改錯誤并重新編譯程序。查找和修改錯誤的過程稱為調(diào) 試,在編譯器指示編譯過程沒冇錯誤z后,調(diào)試才告終止。c程序通常包含對預(yù)先編寫函數(shù)的引用,這些函數(shù)存儲于稱為頭文件 的庫屮,鏈接器的首要任務(wù)是引入預(yù)編譯的庫代碼,并將其插入到目標(biāo)程序中,以創(chuàng)建可執(zhí)行程序。5

9、、程序流程圖程序流程圖是一個圖農(nóng),它顯示了計算機(jī)執(zhí)行程序的詳細(xì)處理步驟和 順序,在書中用于描述求解問題的算法。圖1-2為設(shè)計者提供的程序流程 圖所用的標(biāo)準(zhǔn)符號,請參考。1、將下列源代碼輸入計算機(jī)并運行,然后分析其運行結(jié)果。 main() int a; long int b; float c; double d; char e;printfc'sizeof a=%dn, sizeof(a);printfc'sizeof b=%dn”, sizeof(b);printfc'sizeof c=%dn, sizeof(c);printfc'sizeof d=%dn”,

10、sizeof(d);printfc'sizeof e=%dn, sizeof(e);(1) 木程序段要求學(xué)生對c語言的數(shù)據(jù)類型的理解,并通過實際運行 結(jié)果觀察到常用的數(shù)據(jù)類型在內(nèi)存的存儲方式及占用存儲空間的字節(jié)數(shù);(2) 源代碼中的sizeof ()函數(shù):實現(xiàn)計算數(shù)據(jù)類型字節(jié)的長度。2、將下列由程序流程圖描述的算法,轉(zhuǎn)換為c源代碼并填得到圖 l-3b框中,然后輸入計算機(jī)并運行后分析其運行結(jié)果。圖l-3a程序流程圖圖l-3b轉(zhuǎn)換后c語言源代碼3、項目編程(1)請向計算機(jī)輸入a, b,c三個值,經(jīng)過程序處理后,要求輸出其中 最大的一個。項目要求:畫出程序流程圖; 根據(jù)流程圖編寫程序到大輸出

11、。項目耍求: 畫岀程序流程圖; 根據(jù)流程圖編寫程序 項目提示: 可采用if結(jié)構(gòu);a, b, c由scanf函數(shù)輸入(3) 編程實現(xiàn)打卬卜列由字母組成的樹形。abbbcccccdddddcceeeeeeeeefffffftfffffggggggggggg 111 u1說明:本項口編程的知識點是讓學(xué)生 對雙重循環(huán)語句結(jié)構(gòu)的理解,清楚雙重循 環(huán)的特點(即當(dāng)外循環(huán)變量111的值變化一 次時,則內(nèi)循環(huán)變量小的值要變化若干 次)。提示:可用外循環(huán)變量代表行數(shù);內(nèi) 循環(huán)變量代表需打印字符的個數(shù)。難點:字符個數(shù)是按奇數(shù)變化遞增左右邊界字符打印的位置圖1-4字母a-g組成的樹形(4)設(shè)計報選體育科n統(tǒng)計程序設(shè)某

12、學(xué)校在新生入學(xué)時,需報選體育選修科體育科冃包括:籃球、排球、體操、兵乓球和網(wǎng)球。請為某班級(30人)統(tǒng)計報選各體育科冃人數(shù)。項目要求:ifhi岀程序流程圖; 根據(jù)流程圖編寫源程序項目提示:可采用switch與for結(jié)構(gòu)五、知識點檢查:(1) 解釋下列語句的作用,為什么要在變量名么前加&符號?float x;scanf(“f ", &x);解答:(2) 若忘記在上文中的scanfo的語句中加入“&”符號,則輸出結(jié)果將會如何?解答:(3) 請將下列給岀的兩個程序段分別輸入計算機(jī)后,分析其運行結(jié) 果,并解答為什么輸岀如此的結(jié)果(不要求助別人,需自己查找資料)。 ma

13、in() int num;num=32767; printf( "num=%dn” , +num);解答: main() ini a二-2; printf ( "%d, %o, %dn” , a, a, -a);解答:(5) 通過木次實驗,即從編程輸入、運行、調(diào)試以及直到最后輸出正 確的結(jié)果,你從中得到了哪些收獲?對丁程序運行所出現(xiàn)的錯誤是如何解 決的?解答:六、課外選做題:1、從鍵盤輸入100條整型數(shù)據(jù),請找出其中最大的一個數(shù),并指出 這個最大的數(shù)是第幾次輸入的。2、分別統(tǒng)計出在輸入的字符串中字母、數(shù)字和其他字符的個數(shù)。3、請編程實現(xiàn)打印由部分字母組成的圖形,如圖1-5所

14、示。圖1-5字母纟r成圖形l實驗2數(shù)組與排序 實驗學(xué)時:4二、實驗?zāi)康模?、理解數(shù)組的作用、下標(biāo)的用法及數(shù)組元素在內(nèi)存中的存儲;2、學(xué)習(xí)并掌握一維數(shù)組與多維數(shù)組的應(yīng)用;3、學(xué)習(xí)并掌握常用的排序算法;4、了解字符數(shù)組的特殊應(yīng)用。三、必須學(xué)習(xí)和掌握的知識點:1、數(shù)組的定義、特點和使用規(guī)則2、數(shù)組的查找、排序和插入四、項目編程1、將下列一組數(shù)讀入到a數(shù)組中,然后從a數(shù)組中找出其中最人的 元素并與第一個數(shù)互換;然后從a數(shù)組中找出最小的元素并與最后一個數(shù) 互換,而其余元素的位置不變。例如,圖2-1所示。36 88 -20 98 100 56a0 al a2a3a4&3688-209810056t

15、1t-1圖2-1 a數(shù)組中部分元索位置的變化(1) 編程技巧與注意事項: 數(shù)組是用來在內(nèi)存屮存儲一組相關(guān)數(shù)據(jù)項。可對存儲于內(nèi)存的數(shù) 據(jù)進(jìn)行反復(fù)處理,而不必再重新輸入。 在c中雖然允許在同一行中定義多個數(shù)組,但最好述是每行只定 義一個數(shù)組,這樣做可以消除將逗號錯寫為分號的可能性;另外在調(diào)試過 程屮,也便于查找數(shù)組名。(2) 本項目編程指南: 采用循環(huán)結(jié)構(gòu);需定義一個一維數(shù)組“四個int型變量主要 用于儲存最大數(shù)和最大數(shù)的位置及最小數(shù)和最小數(shù)的位置項目要求: 畫出程序流程圖; 根據(jù)流程圖編寫源程序項目提示:可采用switch與for結(jié)構(gòu)2、以下是某班級(32人)高數(shù)的考試成績。要求將此成績輸入到a

16、 數(shù)組屮,然后按英值由高分到低分進(jìn)行排列,并輸岀其排列后的成績清單。68 78 66 90 60 56 82 75 (1) 本項目編程指南:這是一個關(guān)丁排序的問題。所謂的排序是按給定順序排列數(shù)據(jù)的過 程,可根據(jù)數(shù)組內(nèi)容按升序或降序排列元素。通常都按數(shù)據(jù)的輸入順序?qū)?數(shù)據(jù)加載到數(shù)組中;如果改變輸入順序,若元索為字符型則應(yīng)按字母順序 排列,若元素為數(shù)值型可按值的大小(即升序或降序)排列。為計算機(jī)開發(fā)的排序算法種類繁多,如選擇法、比較交換法、冒泡法 和shel i法等。以下簡介兩種典型的排序算法,其他排序方法學(xué)生可查閱 其他參考書籍。冒泡排序:也稱“起泡排序”或“氣泡排序”,是一種比較簡單的排 序方

17、法。思路是將被排序的元素個數(shù)為n,可以對此元素做n-1次處理。 在第k次(k二0,1, 2,n-1)處理吋,需比較前n-k個元素。此排序 方法是,連續(xù)從前到后比較相鄰的兩個元索,如果后面的元素人于前面的 元素,則應(yīng)將二者交換,否則不交換。可見每經(jīng)過一次處理,至少此次被 處理的n-k個元素中最小的元素被移到木次處理的最后位置,所以經(jīng)過了 n-1次處理后就使所有的元素被排好序了。從分析中可以得岀,對長列表而言,冒泡排序的效率并不高。它比較 適合于對短列表元素的排序,其原因就在于它是反復(fù)比較和交換元索,直 至數(shù)據(jù)按指定順序排列為止。關(guān)于冒泡排序方法示例請參考教科書第124 頁。shel i排序:sh

18、ell排序由donald shell開發(fā)。這種排序算法速度比 較快,效率高。如果需排序列表較小,所含項目元素在10個左右吋,shell 排序和冒泡排序的執(zhí)行次數(shù)相當(dāng)。但如果對于一個排序列表在含有100 個項目元素時,則冒泡排序比shell排序所執(zhí)行的吋間高出5倍;如果耍 是一個包含有1000個項目元素的列表而言,冒泡排序就要比shel l排序 所執(zhí)行的時間高岀30倍。與冒泡排序一樣,shell排序也是比較和交換元素。但不同的是,它 是通過計算一系列間距(指兩個項目元素間的距離)反復(fù)比較和交換元素, 直到元素按指定順序排列為止。木項目耍求學(xué)生采用冒泡法排序方法完成上述給出的學(xué)生成績的排 序。(2

19、)項目要求: 畫岀程序流程圖; 根據(jù)流程圖編寫源程序(3) 項目提示:利用一維數(shù)組與for結(jié)構(gòu)程序流程圖3、按照下列耍求編寫一個查詢程序。某汽車維修廠倉庫存有多種型號的汽乍零件,請為該倉庫管理員編 寫一查詢程序用于查詢庫中每種零件的庫存量。零件號150001150002150003150004150005 1庫存量1000500230700998圖2-2設(shè)管的零件型號與對應(yīng)的庫存量(1) 項目要求: 具有交互式輸入(提示操作者從鍵盤輸入要查詢的零件編號); 具冇重復(fù)查詢功能; 具冇數(shù)據(jù)檢測功能。(2) 項目說明: 當(dāng)程序運行時,首先在屏幕上顯示“請輸入要查詢的零件編 號,例如,操作者輸入了 1

20、50003后,則在屏幕上立即顯示岀該零件 編號及該編號所對應(yīng)的庫存量,如:150003 230 o 如果操作者輸入的零件編號超出了該庫屮所規(guī)定的范圍,則應(yīng)在 屏幕上顯示出“您輸入的是錯誤的零件編號,請選擇:重新輸入(y),退 出查詢(n)” o 當(dāng)操作者正確地查詢到t己所要查詢的庫存數(shù)據(jù)后,則在屏幕上應(yīng)顯示出“您述繼續(xù)查詢嗎(y/n) ?” ,如果繼續(xù)查,則可輸入y否則輸入n,即結(jié)束此次查詢。(3) 項目提示:利用二維數(shù)組采用if結(jié)構(gòu)和嵌套式循環(huán)結(jié)構(gòu)(4) 編程技巧與注意事項: 二維數(shù)組表示的是以行列格式排列的數(shù)據(jù)表; 可通過行下標(biāo)和列下標(biāo)來訪問二維數(shù)組屮存儲的元素; 如何使用行下標(biāo)和列下標(biāo)來

21、操縱二維數(shù)組是一個令很多學(xué)生感 到頭痛的問題。要想克服這個困難,最好的辦法是仔細(xì)參閱讀教科書中第 129頁例7. 5題屮的代碼,認(rèn)真領(lǐng)會示例,確保完全理解英工作原理。同 時利用紙和筆,在程序處理期間,跟蹤記錄各個元素。這同投籃一樣,練 習(xí)的越多,成功率也就越高。祝你好運。五、思考題:(1)卜標(biāo)在數(shù)組中起什么作用?取值范圍?解答:(2)在使用數(shù)組時,如果數(shù)組元素個數(shù)超過了數(shù)組定義的個數(shù)吋,將 會產(chǎn)生什么現(xiàn)象,是嚴(yán)重問題嗎?解答:(3) 字符數(shù)組在使用規(guī)則與數(shù)值型數(shù)組有哪些不同z處?解答:六、課外選做題:1、請編程計算下列給出直流電路中a, b兩端的等效電阻r。r1r1r1圖2-3串并聯(lián)直流電路項

22、目提示: 圖2-3中的rl, r2, r0電阻值均由鍵盤輸入。 由for循環(huán)結(jié)構(gòu)實現(xiàn)。2、請編程計算下列給出的二維數(shù)組周邊元素z和。948013572999699913573、請編寫一個程序,其功能是統(tǒng)計一個子字符串在另一個字符串 屮出現(xiàn)的次數(shù)。例如,假設(shè)輸入的字符串是“this is a string",子字 符串為“is”,則輸出結(jié)果是2。實踐3模塊化編程一、實驗學(xué)時:4二、實驗?zāi)康模?、深刻理解模塊結(jié)構(gòu)化編程的概念及其優(yōu)點;2、了解如何將程序分解為一系列的獨立模塊;3、學(xué)習(xí)和掌握模塊結(jié)構(gòu)化編程的規(guī)則與方法;4、學(xué)會運用自頂向下設(shè)計的思想和模塊結(jié)構(gòu)化編程技巧來編寫c程 序。三、必

23、須學(xué)習(xí)和掌握的知識點:1、模塊的劃分規(guī)則2、函數(shù)的調(diào)用規(guī)則3、全局與局部變量4、變量的存儲類別四、知識點講解1、模塊(model):是一個獨立程序邏輯單元,它執(zhí)行一個主要處理 任務(wù),在編寫和測試模塊之后,可將它們裝配起來,形成-個完整的程序。2、模塊結(jié)構(gòu)化編程是一個設(shè)計策略,用來管理、組織和開發(fā)計算機(jī) 程序。它使用的是“分而治之”方法,將程序分解為一系列的被稱為模塊 的邏輯單元。模塊結(jié)構(gòu)化編程旨只提供一種管理編程編程的方法。通過這個方法, 可將一個大應(yīng)用程序分解為有限數(shù)量的模塊。由此看來,大程序細(xì)分為一 系列更小的、邏輯相關(guān)的任務(wù),可獨立開發(fā)和測試。所以每次編寫一個模 塊要比一次性完成整個項目

24、要容易的多。總之,模塊結(jié)構(gòu)化編程是一種編程技巧,它的理念是自頂向下的設(shè)計 和模塊化編程。該發(fā)有助于設(shè)計和構(gòu)建高質(zhì)量的程序,使程序有更好的可 讀性,冃更易于測試和調(diào)試。在c程序中是利用函數(shù)來實現(xiàn)模塊的功能。例如,在求3個學(xué)生四門 課程中,每個學(xué)生的平均成績的程序,就是rtl 3個模塊構(gòu)架起來的。見圖 3-1計算平均成績程序的層次圖所示。平均成績程序輸入成績求平均成績打印成績單圖3-1計算平均成績程序?qū)哟螆D3、層次圖:也稱框圖(block diagram),將程序 劃分為若干個任務(wù)等級(模塊),并顯示任務(wù)之間的關(guān) 系。如圖3-1顯示了計算每個學(xué)生平均成績的處理過 程。第一層模塊顯示的是程序的目的,

25、第二層顯示的 是程序執(zhí)行的處理模塊,由成績輸入、求平均值和輸 出成績單三個子模塊組成。4、程序流程圖:是對每個模塊所要處理的任務(wù) 執(zhí)行過程的一個描述。如圖3-2為圖3-1計算平均成 績程序?qū)哟螆D屮三個子模塊的程序流程圖。txt返回圖3-2描述的代碼如下:ii=sum/4返回返回圖3-2b第二層程序流程圖 程序流程所對應(yīng)的c源圖3-2a第一層程序流程圖/*主模塊代碼*/ int i, j, s3 4; float ave3: main () intput ():average ();output ();/*成績輸入模塊代碼*/int input () for(i=0;i<3;i+) for

26、 (j二0;j4;j+)scanf ( "%d, ” , s3 4);/*輸出平均成績模塊代碼*/*求平均成績模塊代碼*/int average () int sum;for (i=0;i<3;i+) sum二0;for(j=0;j4;j+) sum+二sij;avei=sum/4;int output () for(i=0;i<3;i+) printf ( "%f" , avei);在上述c程序所完成的功能是計算3名學(xué)生四門課程每名學(xué)生的平均 成績。其中主函數(shù)(即主模塊)主要是完成了函數(shù)(也稱了模塊)的調(diào)用, 在呃in函數(shù)z前所定義的變量和數(shù)組均為全

27、局量,因為,下面的三個了 函數(shù)都要用這些變量。從上述的模塊結(jié)構(gòu)化編程的示例過程和結(jié)果來看,的確提高了程序的 可讀性,無論是寫程序的人或是讀程序的人都可以很輕松地分析c程序,符合結(jié)構(gòu)化程序設(shè)計的思想。所以從木實驗開始,要求學(xué)生必須遵循模塊結(jié)構(gòu)化設(shè)計程序的原則來 設(shè)計程序,逐漸養(yǎng)成良好的編程習(xí)慣,不斷地積累模塊結(jié)構(gòu)化編程的經(jīng)驗,來提高口己軟件開發(fā)的能力。五、模塊結(jié)構(gòu)化編程的指導(dǎo)原則為了讓學(xué)生能達(dá)到最佳的項目編程效果,以下提供幾條適于模塊結(jié) 構(gòu)化編程的指導(dǎo)原則,可供學(xué)生參考。1、模塊應(yīng)有一個入口點和一個退出點。如圖3-2中的控制流從各模 塊的頂部流入,從底部返冋處退岀。2、每個模塊只執(zhí)行一個任務(wù)。例

28、如在計算學(xué)生平均成績的示例中成 績輸入、求平均以及輸出計算結(jié)果是三個不同的任務(wù),應(yīng)分別處理,不要 將無關(guān)的任務(wù)放于同一模塊中,只將完成同一任務(wù)的語句組合在一起。3、編程注意事項:程序應(yīng)有自我記錄。即可利用描述變量、模塊和函數(shù)的標(biāo)識符利用注釋記錄代碼,并說明特殊或復(fù)雜的處理利用簡單的代碼編寫結(jié)構(gòu)利用注釋標(biāo)識模塊和函數(shù)每個模塊包含的語句不應(yīng)超過20條以上列出的編程指導(dǎo)原則只要大家理解了,是不難做到的,真誠地 希望參與本實驗的學(xué)生一定會在更短的時間內(nèi)編出高質(zhì)量的程序來,到那 時,你一定能夠享受到模塊結(jié)構(gòu)化編程所帶來的如下所說的好處:(1) 更易于維護(hù)程序。即便于更新或修改。(2) 更易于設(shè)計和編寫程

29、序,開發(fā)期間岀現(xiàn)的錯誤將大量減少。(3) 程序的可靠性更高,生產(chǎn)運行期間出現(xiàn)的錯誤將大量減少。(4) 更易于其他人(甚至是不熟悉程序的人)讀取和理解程序。(5) 更易于測試調(diào)試程序。(6) 更易于編寫和維護(hù)文檔。六、項目編程1、矩陣運算。|請輸入-個3行3列矩陣的所有元素,然后輸出兩條對角線元素之 和。(1) 要求: 該程序應(yīng)rti個主函數(shù)和3個子函數(shù)構(gòu)成,子函數(shù)分別完成矩陣元 素輸入、兩條對角線元素求和、輸出結(jié)果。 畫出層次圖、程序流程圖及源代碼清單。(2) 相關(guān)知識:矩陣運算。在軟件開發(fā)中,矩陣是一種常見的數(shù)據(jù)組織 形式,在語言上矩陣與二維數(shù)組相對應(yīng),故通常總是用二維數(shù)組存儲矩陣 元索。有

30、吋在試題中會給出計算公式。因此,計算過程中的主耍工作是核 對下標(biāo)。與矩陣相關(guān)的主耍問題包括: 計算矩陣的對角線元素之和(此吋矩陣為方陣,m=n,對角線可以 是一條或兩條,通常為一條,即主對角線); 計算矩陣的周邊元素之和,即四周的元素和; 矩陣的上三角或下三角之和; 兩矩陣之和矩陣,即將兩個矩陣的各個元素對應(yīng)求和; 矩陣及其轉(zhuǎn)置矩陣之和; 兩矩陣的乘積矩陣。(3) 本項目設(shè)計步驟: 項目層次圖圖3-3矩陣運算層次圖 請完成其它三個子模塊的程序流程圖begin圖3-4a主程序流程圖圖3-4b輸入矩陣元素程序流程圖圖3-4c矩陣運算程序流程圖 c源代碼清單圖3-4d打卬輸出程序流程圖2、將卜列給出

31、的城市名列表按降序排序。atlanta boston chicago denverhoston losangeles miami newyork(1) 項目要求: 可利用strcmpo > strcopy ()函數(shù)。 該程序應(yīng)由一個主函數(shù)和2個子函數(shù)構(gòu)成,子函數(shù)分別完成城市 名列表的排序和輸出排序后的城市名列表。 畫岀層次圖、程序流程圖及源代碼清單。(2) 相關(guān)知識: strcmpo:字符串比較函數(shù)。 格式:strcmp(字符串1,字符串2) 說明:函數(shù)結(jié)果可由如下函數(shù)值得岀: 字符串1二字符串2,函數(shù)值為0; 字符串1>字符串2,函數(shù)值為一正整數(shù); 字符串1字符串2,函數(shù)值為一負(fù)

32、整數(shù); strcopy():字符串復(fù)制函數(shù)格式:strcpy(字符數(shù)組1,字符串2) 功能:將字符串2復(fù)制到字符數(shù)組1中。(3) 請畫岀main函數(shù)與城市名農(nóng)列排序和打印輸岀函數(shù)的流程圖。(4) 程序流程圖(5) c源代碼清單4 12 33 4 122 3 4 112 3 43、請設(shè)計一個fun函數(shù),其功能是給一維數(shù)組輸入任意4個整數(shù)后, 應(yīng)如下規(guī)律輸出。如輸入整數(shù)1,2, 3, 4,則程序運行后將輸出以下方陣:要求: 該程序甫一個主函數(shù)和一個fun函數(shù)組成 按以下給出程序結(jié)構(gòu)填寫fun函數(shù)中的c代碼#definc m 4main () int am;fun (a);int fun(int a

33、) int i, j, k, m;for (i=0;i<m;i+)scanf( “d” , &ai);七、思考題:(1) 函數(shù)都有哪些調(diào)用方式?解答:(2) 參數(shù)在進(jìn)行信息傳遞時,都具有哪些傳遞方式,各有什么特點(即實參與形參的傳遞)?解答:(3) 根據(jù)你對局部變量和全局變量的理解,在什么情況下用局部變 量合適,在什么情況下用全局變量合適?解答:(4) 從課堂的教學(xué)以及上機(jī)的實踐教學(xué)中,你是如何理解模塊化程 序設(shè)計的?為什么提倡模塊化?(如果你沒有充分理解的話,可去書丿占或上網(wǎng)查閱有關(guān)這方面的資 料,一定弄清楚這個問題! !)解答:九、課外選做題:1、請編寫一個fun函數(shù),用于計

34、算給定整數(shù)num各位數(shù)字之積。例 如,若輸入252,則應(yīng)輸出結(jié)果是,20;輸入202,輸出結(jié)果是0。2、設(shè)某學(xué)校在校生的年齡在17歲到23歲,請編寫一個fun函數(shù), 用于統(tǒng)計該校5000人各年齡的人數(shù)。3、請編寫fm函數(shù),在下列給出的一個有序的數(shù)列中插入一個數(shù), 且當(dāng)該數(shù)插入后,應(yīng)使該數(shù)列仍然有序。60, 6& 7& 8& 90, 93, 95, 96, 9& 100實驗4指針與鏈表、實驗學(xué)時:4二、實驗?zāi)康模?、深刻理解指針的特點和作用2、學(xué)習(xí)并應(yīng)用指針來設(shè)計算法3、學(xué)習(xí)和掌握利用指針對內(nèi)存進(jìn)行動態(tài)分配4、學(xué)習(xí)和掌握指針的編程技巧三、必須學(xué)習(xí)和掌握的知識點:1

35、、指向變量的指針變量2、指向數(shù)組和多維數(shù)組的指針變量3、指向函數(shù)的指針變量4、指向字符串的指針變量5、指針數(shù)組6、用指針處理鏈表四、主要知識點講解1、內(nèi)存的動態(tài)分配:動態(tài)內(nèi)存管理使程序員可以在程序運行過程中隨時申請一塊空閑內(nèi) 存,在使用后即可釋放。比較之下,它比程序中定義的變量或數(shù)組更能靈 活有效地使用并節(jié)約內(nèi)存。因為程序中變量或數(shù)組一經(jīng)定義,即使不再使 用也必須占用內(nèi)存。2、動態(tài)內(nèi)存管理函數(shù):(1) malloc函數(shù)的一般使用格式(類型*) mal loc (字節(jié)數(shù))以字節(jié)數(shù)為單位,動態(tài)分配存儲空間。當(dāng)存儲空間被分配成功吋,將 返回的是該內(nèi)存塊的首地址,否則返回值為0。例如,float *p

36、;p=(float *)malloc(5*sizeof(float);上述語句表示,malloc函數(shù)動態(tài)分配到了 5個內(nèi)存塊,每個內(nèi)存塊為4 個字節(jié)(即實型數(shù)的存儲長度),并且指針變量p將指向的是5個內(nèi)存塊 的首字節(jié)的地址。見圖4t所示。4個字節(jié)p圖4-1指針p指向5個內(nèi)存塊的首地址(2) fmc函數(shù)的一般使用格式free(動態(tài)分配的內(nèi)存塊首地址)其作用是釋放掉rfl malloc函數(shù)分配的內(nèi)存空間,也就是將該內(nèi)存空 間歸還給系統(tǒng),以便另行分配使用。例如,float *p;p=(float *)malloc(5*sizeof(float);3、指向變量的指針變量,示例:4個字節(jié)apfree (

37、p);圖4-2指針p指向變量a的首字節(jié)地址 變量a所占用的存儲空間是由4個字節(jié)組成,如果假設(shè)地址編號是從 2000開始,則變量a所山用內(nèi)存的地址編號應(yīng)該是2000, 2001,2002,2003, 而指針p中所存放的地址編號是2000,也就是變量a的首字節(jié)地址。4、指向一維數(shù)組和多維數(shù)組的指針變量,示例:float a3, b2 3, *p1, (*p2) 3;p1 二 a;p2=b;a0a a2f ffb6ffbaffbep1圖4-3a指針pl指向數(shù)組a的首地址指針pl被定義為是指向一維數(shù)組的指針變量。如果執(zhí)行了 pl=a;該 指針變量p1具有的是一維數(shù)a的首地址(c語言規(guī)定,數(shù)組名代表地址

38、 常量,即該數(shù)組的首地址),見圖4-3a。如果該首地址編號是ffb6,則a 代表的是ffb6。而當(dāng)執(zhí)行pl+吋,也就是訃指針pl向高字節(jié)方向增加1 吋,相當(dāng)于增加4個字節(jié)的長度,此吋,pl將具有al元索的地址,地 址編號是ffba,見圖4-3b所示,依次類推。a0 al a3ffb6 f ffba ffbep1圖4-3b指針pl指向al元素的地址指針p2被定義為是指向二維數(shù)組的指針變量指針,也稱為p2是行 指針。此時,p2具冇二維數(shù)b的首地址,地址編號是ffa6,見圖4-3coffa6ffaaffaeffb2ffb6ffbab10b11b12圖4-3c指針p2指向數(shù)組b的首地址如果此時執(zhí)行了

39、p2+操作時,也就是讓指針p2向高字節(jié)方向增加1時, 相當(dāng)于增加12個字節(jié)的長度(就即相當(dāng)于p2具有了下一行的首列地址), 也就是alo元索的地址,地址編號是ffb2,依次類推。見圖4-3c所 示。ffa6ffaaffaeffb2ffb6ffbab|00b01b02b10b11b12圖4-3d指針p2指向bl 0元素的地址請同學(xué)們思考:若要求利用行指針輸出上述b數(shù)組中的所冇元索的地 址和所有元素值的話,則代碼將如何編寫?5、指向函數(shù)的指針變量,示例:int fun ( ), (*p) ( ), a二5, b二7, c;p=fun;指針p具有函數(shù)fun的入口地址(每個函數(shù)都有一個入口點,稱該入

40、口點即為該函數(shù)的入口地址),本例函數(shù)的入口地址編號是0046,見圖 4-4o在c語言中,函數(shù)的名字是一個指針,其值就是該兩數(shù)的入口地址。 此吋,函數(shù)名fun為一個入口地址常量,且把fun賦給p,則指針p稱為 指向函數(shù)的指針變量,也就是在進(jìn)行函數(shù)fun的調(diào)用時,也口j利用指針p 進(jìn)行函數(shù)的調(diào)用了。圖4-4指針p指向fun函數(shù)的入口地址如有下面的語句行:c=(*p) (a, b); 此語句就相當(dāng)于函數(shù)調(diào)用的語句:c=fun(a, b);。6、字符串指針變量,示例:char *str二 “student” ;student/o圖4-5字符串指針str所指向字母s的地址ffa6ffa8ffaaffac

41、ffaeffboffb2ffb4ffb6ffb8ffbaffbcpop1p2ffa6ffaea0 0ffb67、指針數(shù)組,示例:int a;3 4, *p,i ;for (i二0;i3;i+)pi二&ai0;圖4-6指針數(shù)組p指向數(shù)組a的首列地址指針p被定義的是指針數(shù)組,即在該數(shù)組中的每一個元素值都是地 址值。在該示例中p具有三個指針元索,即p0, pl, p它們分別 具有數(shù)組a0 0, al0和a0的地址,如圖4-6所示。此時,可 利用指針數(shù)組間接對a數(shù)組進(jìn)行操作。指針數(shù)組應(yīng)用最多的還是對字符串的處理,如利用指針數(shù)組對字符 串的排序、查找以及字符的統(tǒng)計操作等。在木實驗中的項目編程中的

42、第3 題就涉及到指針數(shù)組的應(yīng)用。關(guān)丁該知識點的詳細(xì)內(nèi)容請參閱教科書第248 頁。8、鏈表鏈表屬于動態(tài)數(shù)據(jù)結(jié)構(gòu),可以類比成一 “環(huán)”接一 “環(huán)”的鏈條,這 里的每一 “環(huán)”可以視作一個結(jié)點,如果把結(jié)點串在一起就形成了鏈表。 這種數(shù)據(jù)結(jié)構(gòu)非常靈活,結(jié)點數(shù)目無須指定,可以臨吋生成。每個結(jié)點有 自己的存儲空間,結(jié)點間的存儲空間也無須連接,結(jié)點之間的串連是由指 針來完成的,而指針的操作又極為靈活方便,習(xí)慣上稱這種數(shù)據(jù)結(jié)構(gòu)為動 態(tài)數(shù)據(jù)結(jié)構(gòu)。這種結(jié)構(gòu)的最大的優(yōu)點是插入和刪除結(jié)點方便,無須移動大批數(shù)據(jù), 只須修改指針的指向即可。這是編程中十分重耍的一種數(shù)據(jù)結(jié)構(gòu)。在以下項目編程中的第2題就是關(guān)于鏈表的問題。五、

43、項目編程1、請建立一個學(xué)生成績數(shù)組然后調(diào)用一個fun函數(shù)用于查詢該數(shù)組 中一門課程以上不及格的學(xué)生并打印他們?nèi)空n程的成績。(耍求利用行指針作為函數(shù)的傳遞參數(shù))。(1) 提供部分代碼如下,并請完成其他全部代碼:#define m 3#define n 4main() float stum n = 6& 90, 66, 80, 56, 78, 80, 90,50, 68, 56, 98 ; float fun();fun (stu, m);float fun (float (*p)n, int n)2、請為下列給出的某班級c程序編碼員列表,建立一個鏈表。姓名趙達(dá)錢亮孫力為王勝利周學(xué)立岀生

44、年月19831984198019831981351106圖4-7 c程序編碼員列表(1) 說明: 在上表屮,每人為一個節(jié)點,節(jié)點屮有4個成員:姓名、岀生年、 出生月和指針。然后用指針將每個節(jié)點鏈接起來。 節(jié)點鏈接的條件是生日大者在前,小者在后。 最后輸出已按順序排好的并具有5個節(jié)點的鏈表,如圖4-8編碼 員鏈表所示。圖4-8程序編碼員鏈表(2) 本題相關(guān)知識這是一個關(guān)丁建立單向動態(tài)鏈表的問題。所謂建立動態(tài)鏈表是指在 程序執(zhí)行過程中從無到有地建立起一鏈表,即一個一個地開辟節(jié)點和輸入 各節(jié)點的數(shù)據(jù)值,并建立起前后相鏈的關(guān)系。在做木實驗時之前,首先應(yīng)弄清楚節(jié)點數(shù)據(jù)類型的定義、如何利用指 針的動態(tài)地開

45、辟節(jié)點以及輸出已建立的動態(tài)鏈表等項內(nèi)容。 動態(tài)數(shù)據(jù)結(jié)構(gòu):本題主要是鏈表的建立,它的實現(xiàn)依賴于動態(tài)的 內(nèi)存管理,即利用malloc函數(shù); 描述單向鏈表的數(shù)據(jù)類型:單向鏈表的一般結(jié)構(gòu)如圖4-9所示。數(shù)值圖4-9&單向鏈表地址為了實現(xiàn)鏈表必須定義能夠描述鏈表中節(jié)點的數(shù)據(jù)類 型,該類型應(yīng)包含有數(shù)值和地址兩大部分。見圖4-9b。 關(guān)于鏈表動態(tài)建立和鏈表輸出的具體實現(xiàn)過程,請參閱教科書第275頁到279頁。圖4-9b鏈表節(jié)點 除了上述建立、輸出鏈表,則與木題相關(guān)的內(nèi)容還有關(guān)于鏈表的 插入和刪除操作(參照教科書的第281-286頁)。(3) 要求:設(shè)計一個主函數(shù)和兩個子函數(shù)(即建立鏈表模塊和輸出 鏈

46、表模塊)。(4) 請在以下空間內(nèi)完成本題的c源程序。3、編寫一個fun函數(shù),其功能是將字符指針s所指字符串(見圖4-10a)所有下標(biāo)值為奇數(shù)的字符刪除,然后將串中剩余字符存放到由字 符指針t所指的字符數(shù)組中(例如圖4-10b所示)。se9ahd1ed9圖4-.lqa由字符指針s指向的字符串seadev)t圖4-10b由字符指針t所指向的剩余宇符串(1) 要求:利用字符指針變量作fun函數(shù)中的形參(2) 木題相關(guān)知識:在字符串相關(guān)的所有操作中,包括有計算給定字符串的長度、對奇 數(shù)位操作、對偶數(shù)位操作等一系列問題。在這些操作中,需要利用循環(huán)語 句“遍丿力”字符串的每一個下標(biāo)。 字符串的理解字符串是

47、由一串字符組成的整休,包描常量和變量。但字符串不是 一種專門的數(shù)據(jù)類型,而是由字符數(shù)組充當(dāng)。字符串的常量是以雙引號描起來的若干個字符的集合,如“hello” , 這些字符在內(nèi)存中都是以ascii碼值形式進(jìn)行存儲的。并以“0”作為字 符串的結(jié)束標(biāo)記。 指向字符串常量的指針在程序設(shè)計中,可以用字符象指針變量記載字符串常量的首地址, 從而形成了一類“字符串變量”。例如:char *p二” hello” ;或 char *p; p二"hello” ;以上兩種形式含義相同,都使指針p存儲著字符串常量“hel lo”的 首地址。此吋,應(yīng)注意一定不能認(rèn)為字符串存儲在變量p中,而是僅僅是 首地址存儲

48、在p中。這樣變量p即可具有與字符數(shù)組相同的用法和功能。 字符數(shù)組作為字符串變量常用的一種構(gòu)成字符串變量的方法是使用char類型的一維數(shù)組,但 在沒對數(shù)組賦值之前并不能稱其為字符串:char str10;事實上,上述定義僅定義了一個數(shù)組而已。如果需要將其用作字符 串,最好應(yīng)該在定義數(shù)組的時候就賦以初值,女口:char str10= "a string!n ;經(jīng)過上述賦值后,系統(tǒng)就會將字符串常量“astdng!”完整地存儲 到數(shù)組s"中(注意與指向字符串常量的指針變量的區(qū)別)。包括結(jié)束符 <0,o通過上述說明可以發(fā)現(xiàn),字符串的結(jié)束符'0,是至關(guān)垂耍的一環(huán)。 因為c

49、語言中并不存儲字符串的長度,所以只能利用字符串中的元素是否 為結(jié)束符作為判定字符串結(jié)束的依據(jù)。另者,還值得注意的一點是,字符串結(jié)束符號'0,的ascii碼值 是整數(shù)0,也就是說,0,與整數(shù)0相同,當(dāng)它不同于字符'(t ,應(yīng) 為對于字符'0,的asctt碼值是48,故可以說,'(t與整數(shù)48相同。(3) 提供main函數(shù)代碼如下,并請完成fun函數(shù)的全部代碼: main() char ch100, t100, fun();gets (ch);fun (ch, t);char fun(char *s, char *l)六、課外選題1、請設(shè)計一個fun函數(shù),其功能是統(tǒng)

50、計由字符指針ss所指的字符 串中指定字符的個數(shù),并將此統(tǒng)計結(jié)果返回給主函數(shù)。例如,若輸入字符串:123412132 ,再輸入1,則應(yīng)輸出為3, 也就是說,該字符串的數(shù)字中含有數(shù)字1的個數(shù)有3個。請完成fun函數(shù)中的c代碼。main() char ss100,ch; int c;gets(ss);scanf ( "%c” , &ch);c=fun(ss, &ch);printf ( "%dn” , c);char fun(char *s, char *t)2、學(xué)生的記錄是rti學(xué)號和成績組成,現(xiàn)有n名學(xué)生的數(shù)據(jù)已存在主 函數(shù)中的結(jié)構(gòu)體數(shù)組s中,如圖4-11所示

51、。請設(shè)計一個fun函數(shù),其功 能是:把分?jǐn)?shù)最低的學(xué)生數(shù)據(jù)放在rtl指針h所指的數(shù)組中,并耍求由fim 函數(shù)返回分?jǐn)?shù)最低的學(xué)生人數(shù)。注意,分?jǐn)?shù)最低的學(xué)生可能不止一個, 請完成fim函數(shù)中的c代碼。numsq1001010011100126469sl s2s3s10013100149172s510015圖4-11結(jié)構(gòu)體數(shù)組sttdefine n 6typedef struct char num10;int s;strec;mai n () strec sn = “1oo1o” ,85, “10011” ,64), “10012”,69, “10013” ,91, “10014” ,72), “10015” , 64;strec hn;int i,n;n=fun (s, h);printf ( "%dn” , n);for (i=0;i<n;i+)printf ( "s, &4dn” , hi. num, hi. s);int fun(strec 相,strec *b)3、字符串的連接。請設(shè)計一個fun函數(shù),其功能是:將s所指的字符串進(jìn)行正序和反 序的連接,然后形成-個新的串寫入由t所指的字符數(shù)組中。例如,由s所指字符串為:abcd,形成新的串并ftl i所指的串為: abcddcbaomai n () char s 100,t10

溫馨提示

  • 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

提交評論