C語(yǔ)言與程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)報(bào)告書(shū)_第1頁(yè)
C語(yǔ)言與程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)報(bào)告書(shū)_第2頁(yè)
C語(yǔ)言與程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)報(bào)告書(shū)_第3頁(yè)
C語(yǔ)言與程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)報(bào)告書(shū)_第4頁(yè)
C語(yǔ)言與程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)報(bào)告書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

4、程共安排了5個(gè)實(shí)驗(yàn),每項(xiàng)實(shí)驗(yàn)包括實(shí)驗(yàn)學(xué)時(shí)、實(shí)驗(yàn)?zāi)康摹?shí)驗(yàn)內(nèi)容及部分思考題等。整個(gè)實(shí)驗(yàn)建議用40學(xué)時(shí)完成,其中計(jì)劃學(xué)時(shí)20,另外20學(xué)時(shí)是對(duì)編程感興趣的同學(xué)安排的,可作為選項(xiàng)實(shí)驗(yàn)題目,所以學(xué)生可以根據(jù)自己的情況進(jìn)行選做。 書(shū)山有路勤為徑 祝你成功! C程序設(shè)計(jì)課程教學(xué)組 2005年秋學(xué)期目 錄實(shí)驗(yàn)1:簡(jiǎn)單C程序設(shè)計(jì) 1.1 項(xiàng)目編程(1) 找出a,b,c中最大值(2) 按a,b,c值由小到大輸出(3) 報(bào)選體育科目統(tǒng)計(jì)程序1.2 課外選做題(1) 輸入100條數(shù)據(jù),找出最大值及位置(2) 統(tǒng)計(jì)輸入的字符串中,數(shù)字、字母與其他字符的個(gè)數(shù)(3) 打印簡(jiǎn)單圖形實(shí)驗(yàn)2:數(shù)組與排序2.1 項(xiàng)目編程(1)

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

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

7、2、選擇語(yǔ)句:if-else switch 3、循環(huán)語(yǔ)句:while do-while for4、編譯程序圖1-1所表示的是一個(gè)簡(jiǎn)化的編譯過(guò)程,它簡(jiǎn)單地描述了計(jì)算機(jī)執(zhí)行程序的方式。實(shí)際編譯過(guò)程的細(xì)節(jié)是非常復(fù)雜的,且難以理解,在此不予討論。圖1-1 編譯過(guò)程 編程人員在編程語(yǔ)言中要編寫(xiě)計(jì)算機(jī)將遵循的指令,類(lèi)似于英語(yǔ)的命令稱(chēng)為源代碼。計(jì)算機(jī)讀取這些代碼后,將其存入內(nèi)存,以便進(jìn)行后續(xù)處理。因?yàn)橛?jì)算機(jī)不能執(zhí)行這種形式的源代碼,所以在處理之前,每條語(yǔ)句必須經(jīng)歷一系列的轉(zhuǎn)換過(guò)程。 圖1-1說(shuō)明了在文本編輯器中輸入C語(yǔ)句來(lái)創(chuàng)建源程序。編譯器隨后將源程序轉(zhuǎn)換為一中間形式,稱(chēng)為目標(biāo)程序Object Progra

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

9、序的詳細(xì)處理步驟和順序,在書(shū)中用于描述求解問(wèn)題的算法。圖1-2為設(shè)計(jì)者提供的程序流程圖所用的標(biāo)準(zhǔn)符號(hào),請(qǐng)參考。圖1-2 程序流程圖標(biāo)準(zhǔn)符號(hào) 四、實(shí)驗(yàn)項(xiàng)目: 1、將下列源代碼輸入計(jì)算機(jī)并運(yùn)行,然后分析其運(yùn)行結(jié)果。 main() int a; long int b; float c; double d; char e; printf(“sizeof a=%dn”, sizeof(a); printf(“sizeof b=%dn”, sizeof(b); printf(“sizeof c=%dn”, sizeof(c); printf(“sizeof d=%dn”, sizeof(d); print

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

11、求: 畫(huà)出程序流程圖; 根據(jù)流程圖編寫(xiě)程序(2)請(qǐng)向計(jì)算機(jī)輸入a,b,c三個(gè)值,經(jīng)過(guò)程序處理后,要求按值從小到大輸出。程序流程圖 /* 將a,b,c三個(gè)值由小到大輸出 */main() 項(xiàng)目要求: 畫(huà)出程序流程圖; 根據(jù)流程圖編寫(xiě)程序項(xiàng)目提示: 可采用if結(jié)構(gòu); a,b,c由scanf函數(shù)輸入(3)編程實(shí)現(xiàn)打印下列由字母組成的樹(shù)形。說(shuō)明:本項(xiàng)目編程的知識(shí)點(diǎn)是讓學(xué)生對(duì)雙重循環(huán)語(yǔ)句結(jié)構(gòu)的理解,清楚雙重循環(huán)的特點(diǎn)(即當(dāng)外循環(huán)變量中的值變化一次時(shí),則內(nèi)循環(huán)變量中的值要變化若干次)。提示:可用外循環(huán)變量代表行數(shù);內(nèi)循環(huán)變量代表需打印字符的個(gè)數(shù)。難點(diǎn):字符個(gè)數(shù)是按奇數(shù)變化遞增 左右邊界字符打印的位置 /

12、* 打印圖形 */main() 圖1-4字母A-G組成的樹(shù)形 (4)設(shè)計(jì)報(bào)選體育科目統(tǒng)計(jì)程序設(shè)某學(xué)校在新生入學(xué)時(shí),需報(bào)選體育選修科目。體育科目包括:籃球、排球、體操、兵乓球和網(wǎng)球。請(qǐng)為某班級(jí)(30人)統(tǒng)計(jì)報(bào)選各體育科目人數(shù)。項(xiàng)目要求: 畫(huà)出程序流程圖; 根據(jù)流程圖編寫(xiě)源程序C語(yǔ)言源代碼main() 程序流程圖 項(xiàng)目提示:可采用switch與for結(jié)構(gòu) 五、知識(shí)點(diǎn)檢查: (1) 解釋下列語(yǔ)句的作用,為什么要在變量名之前加&符號(hào)? float x; scanf(“%f ”, &x); 解答:(2) 若忘記在上文中的scanf()的語(yǔ)句中加入“&”符號(hào),則輸出結(jié)果將會(huì)如何?

13、解答: (3) 請(qǐng)將下列給出的兩個(gè)程序段分別輸入計(jì)算機(jī)后,分析其運(yùn)行結(jié)果,并解答為什么輸出如此的結(jié)果(不要求助別人,需自己查找資料)。 main() int num; num=32767; printf(“num=%dn”,+num); 解答: main() int a=-2; printf(“%d,%o,%dn”,a,a,-a); 解答:(5) 通過(guò)本次實(shí)驗(yàn),即從編程輸入、運(yùn)行、調(diào)試以及直到最后輸出正確的結(jié)果,你從中得到了哪些收獲?對(duì)于程序運(yùn)行所出現(xiàn)的錯(cuò)誤是如何解決的?解答:六、課外選做題: 1、從鍵盤(pán)輸入100條整型數(shù)據(jù),請(qǐng)找出其中最大的一個(gè)數(shù),并指出這個(gè)最大的數(shù)是第幾次輸入的。2、分別統(tǒng)

14、計(jì)出在輸入的字符串中字母、數(shù)字和其他字符的個(gè)數(shù)。3、請(qǐng)編程實(shí)現(xiàn)打印由部分字母組成的圖形,如圖1-5所示。 圖1-5 字母組成圖形實(shí)驗(yàn)2 數(shù)組與排序一、實(shí)驗(yàn)學(xué)時(shí):4二、實(shí)驗(yàn)?zāi)康模?、理解數(shù)組的作用、下標(biāo)的用法及數(shù)組元素在內(nèi)存中的存儲(chǔ);2、學(xué)習(xí)并掌握一維數(shù)組與多維數(shù)組的應(yīng)用;3、學(xué)習(xí)并掌握常用的排序算法;4、了解字符數(shù)組的特殊應(yīng)用。三、必須學(xué)習(xí)和掌握的知識(shí)點(diǎn):1、數(shù)組的定義、特點(diǎn)和使用規(guī)則2、數(shù)組的查找、排序和插入四、項(xiàng)目編程1、 將下列一組數(shù)讀入到a數(shù)組中,然后從a數(shù)組中找出其中最大的元素并與第一個(gè)數(shù)互換;然后從a數(shù)組中找出最小的元素并與最后一個(gè)數(shù)互換,而其余元素的位置不變。例如,圖2-1所示。

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

16、考試成績(jī)。要求將此成績(jī)輸入到a數(shù)組中,然后按其值由高分到低分進(jìn)行排列,并輸出其排列后的成績(jī)清單。(1) 本項(xiàng)目編程指南: 這是一個(gè)關(guān)于排序的問(wèn)題。所謂的排序是按給定順序排列數(shù)據(jù)的過(guò)程,可根據(jù)數(shù)組內(nèi)容按升序或降序排列元素。通常都按數(shù)據(jù)的輸入順序?qū)?shù)據(jù)加載到數(shù)組中;如果改變輸入順序,若元素為字符型則應(yīng)按字母順序排列,若元素為數(shù)值型可按值的大小(即升序或降序)排列。為計(jì)算機(jī)開(kāi)發(fā)的排序算法種類(lèi)繁多,如選擇法、比較交換法、冒泡法和shell法等。以下簡(jiǎn)介兩種典型的排序算法,其他排序方法學(xué)生可查閱其他參考書(shū)籍。冒泡排序:也稱(chēng)“起泡排序”或“氣泡排序”,是一種比較簡(jiǎn)單的排序方法。思路是將被排序的元素個(gè)數(shù)為N

17、,可以對(duì)此元素做N-1次處理。在第k次(k=0,1,2,,N-1)處理時(shí),需比較前N-k個(gè)元素。此排序方法是,連續(xù)從前到后比較相鄰的兩個(gè)元素,如果后面的元素大于前面的元素,則應(yīng)將二者交換,否則不交換??梢?jiàn)每經(jīng)過(guò)一次處理,至少此次被處理的N-k個(gè)元素中最小的元素被移到本次處理的最后位置,所以經(jīng)過(guò)了N-1次處理后就使所有的元素被排好序了。從分析中可以得出,對(duì)長(zhǎng)列表而言,冒泡排序的效率并不高。它比較適合于對(duì)短列表元素的排序,其原因就在于它是反復(fù)比較和交換元素,直至數(shù)據(jù)按指定順序排列為止。關(guān)于冒泡排序方法示例請(qǐng)參考教科書(shū)第124頁(yè)。Shell排序:Shell排序由Donald Shell開(kāi)發(fā)。這種排序

18、算法速度比較快,效率高。如果需排序列表較小,所含項(xiàng)目元素在10個(gè)左右時(shí),Shell排序和冒泡排序的執(zhí)行次數(shù)相當(dāng)。但如果對(duì)于一個(gè)排序列表在含有100個(gè)項(xiàng)目元素時(shí),則冒泡排序比Shell排序所執(zhí)行的時(shí)間高出5倍;如果要是一個(gè)包含有1000個(gè)項(xiàng)目元素的列表而言,冒泡排序就要比Shell排序所執(zhí)行的時(shí)間高出30倍。與冒泡排序一樣,Shell排序也是比較和交換元素。但不同的是,它是通過(guò)計(jì)算一系列間距(指兩個(gè)項(xiàng)目元素間的距離)反復(fù)比較和交換元素,直到元素按指定順序排列為止。本項(xiàng)目要求學(xué)生采用冒泡法排序方法完成上述給出的學(xué)生成績(jī)的排序。(2) 項(xiàng)目要求: 畫(huà)出程序流程圖; 根據(jù)流程圖編寫(xiě)源程序C語(yǔ)言源代碼m

19、ain() 程序流程圖 (3) 項(xiàng)目提示: 利用一維數(shù)組與for結(jié)構(gòu) 3、 按照下列要求編寫(xiě)一個(gè)查詢(xún)程序。某汽車(chē)維修廠(chǎng)倉(cāng)庫(kù)存有多種型號(hào)的汽車(chē)零件,請(qǐng)為該倉(cāng)庫(kù)管理員編寫(xiě)一查詢(xún)程序用于查詢(xún)庫(kù)中每種零件的庫(kù)存量。圖2-2 設(shè)置的零件型號(hào)與對(duì)應(yīng)的庫(kù)存量(1) 項(xiàng)目要求: 具有交互式輸入(提示操作者從鍵盤(pán)輸入要查詢(xún)的零件編號(hào)); 具有重復(fù)查詢(xún)功能; 具有數(shù)據(jù)檢測(cè)功能。(2) 項(xiàng)目說(shuō)明: 當(dāng)程序運(yùn)行時(shí),首先在屏幕上顯示“請(qǐng)輸入要查詢(xún)的零件編號(hào):” ,例如,操作者輸入了 150003 后,則在屏幕上立即顯示出該零件編號(hào)及該編號(hào)所對(duì)應(yīng)的庫(kù)存量,如:150003 230 。 如果操作者輸入的零件編號(hào)超出了該庫(kù)中

20、所規(guī)定的范圍,則應(yīng)在屏幕上顯示出“您輸入的是錯(cuò)誤的零件編號(hào),請(qǐng)選擇:重新輸入(Y),退出查詢(xún)(N)” 。 當(dāng)操作者正確地查詢(xún)到自己所要查詢(xún)的庫(kù)存數(shù)據(jù)后,則在屏幕上應(yīng)顯示出“您還繼續(xù)查詢(xún)嗎(Y/N)? ” ,如果繼續(xù)查,則可輸入Y否則輸入N,即結(jié)束此次查詢(xún)。(3) 項(xiàng)目提示: 利用二維數(shù)組 采用if結(jié)構(gòu)和嵌套式循環(huán)結(jié)構(gòu) (4) 編程技巧與注意事項(xiàng): 二維數(shù)組表示的是以行列格式排列的數(shù)據(jù)表; 可通過(guò)行下標(biāo)和列下標(biāo)來(lái)訪(fǎng)問(wèn)二維數(shù)組中存儲(chǔ)的元素; 如何使用行下標(biāo)和列下標(biāo)來(lái)操縱二維數(shù)組是一個(gè)令很多學(xué)生感到頭痛的問(wèn)題。要想克服這個(gè)困難,最好的辦法是仔細(xì)參閱讀教科書(shū)中第129頁(yè)例7.5題中的代碼,認(rèn)真領(lǐng)會(huì)示例

21、,確保完全理解其工作原理。同時(shí)利用紙和筆,在程序處理期間,跟蹤記錄各個(gè)元素。這同投籃一樣,練習(xí)的越多,成功率也就越高。/* 汽車(chē)零件查詢(xún) 源代碼 */main() 祝你好運(yùn)。五、思考題:(1)下標(biāo)在數(shù)組中起什么作用?取值范圍?解答:(2)在使用數(shù)組時(shí),如果數(shù)組元素個(gè)數(shù)超過(guò)了數(shù)組定義的個(gè)數(shù)時(shí),將會(huì)產(chǎn)生什么現(xiàn)象,是嚴(yán)重問(wèn)題嗎?解答:(3) 字符數(shù)組在使用規(guī)則與數(shù)值型數(shù)組有哪些不同之處?解答:六、課外選做題: 1、 請(qǐng)編程計(jì)算下列給出直流電路中a,b兩端的等效電阻R。圖2-3 串并聯(lián)直流電路項(xiàng)目提示: 圖2-3中的R1,R2,R0電阻值均由鍵盤(pán)輸入。 由for循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。2、 請(qǐng)編程計(jì)算下列給出的

22、二維數(shù)組周邊元素之和。3、 請(qǐng)編寫(xiě)一個(gè)程序,其功能是統(tǒng)計(jì)一個(gè)子字符串在另一個(gè)字符串中出現(xiàn)的次數(shù)。例如,假設(shè)輸入的字符串是“This is a string”,子字符串為“is”,則輸出結(jié)果是 2 。 實(shí)踐3 模塊化編程一、實(shí)驗(yàn)學(xué)時(shí):4二、實(shí)驗(yàn)?zāi)康模?、深刻理解模塊結(jié)構(gòu)化編程的概念及其優(yōu)點(diǎn);2、了解如何將程序分解為一系列的獨(dú)立模塊;3、學(xué)習(xí)和掌握模塊結(jié)構(gòu)化編程的規(guī)則與方法;4、學(xué)會(huì)運(yùn)用自頂向下設(shè)計(jì)的思想和模塊結(jié)構(gòu)化編程技巧來(lái)編寫(xiě)C程序。三、必須學(xué)習(xí)和掌握的知識(shí)點(diǎn):1、模塊的劃分規(guī)則2、函數(shù)的調(diào)用規(guī)則3、全局與局部變量4、變量的存儲(chǔ)類(lèi)別四、知識(shí)點(diǎn)講解1、模塊(Model):是一個(gè)獨(dú)立程序邏輯單元,

23、它執(zhí)行一個(gè)主要處理任務(wù),在編寫(xiě)和測(cè)試模塊之后,可將它們裝配起來(lái),形成一個(gè)完整的程序。2、模塊結(jié)構(gòu)化編程是一個(gè)設(shè)計(jì)策略,用來(lái)管理、組織和開(kāi)發(fā)計(jì)算機(jī)程序。它使用的是“分而治之”方法,將程序分解為一系列的被稱(chēng)為模塊的邏輯單元。模塊結(jié)構(gòu)化編程旨只提供一種管理編程編程的方法。通過(guò)這個(gè)方法,可將一個(gè)大應(yīng)用程序分解為有限數(shù)量的模塊。由此看來(lái),大程序細(xì)分為一系列更小的、邏輯相關(guān)的任務(wù),可獨(dú)立開(kāi)發(fā)和測(cè)試。所以每次編寫(xiě)一個(gè)模塊要比一次性完成整個(gè)項(xiàng)目要容易的多??傊?,模塊結(jié)構(gòu)化編程是一種編程技巧,它的理念是自頂向下的設(shè)計(jì)和模塊化編程。該發(fā)有助于設(shè)計(jì)和構(gòu)建高質(zhì)量的程序,使程序有更好的可讀性,且更易于測(cè)試和調(diào)試。在C程

24、序中是利用函數(shù)來(lái)實(shí)現(xiàn)模塊的功能。例如,在求3個(gè)學(xué)生四門(mén)課程中,每個(gè)學(xué)生的平均成績(jī)的程序,就是由3個(gè)模塊構(gòu)架起來(lái)的。見(jiàn)圖3-1計(jì)算平均成績(jī)程序的層次圖所示。 圖3-1 計(jì)算平均成績(jī)程序?qū)哟螆D3、層次圖:也稱(chēng)框圖(block diagram),將程序劃分為若干個(gè)任務(wù)等級(jí)(模塊),并顯示任務(wù)之間的關(guān)系。如圖3-1顯示了計(jì)算每個(gè)學(xué)生平均成績(jī)的處理過(guò)程。第一層模塊顯示的是程序的目的,第二層顯示的是程序執(zhí)行的處理模塊,由成績(jī)輸入、求平均值和輸出成績(jī)單三個(gè)子模塊組成。 4、程序流程圖:是對(duì)每個(gè)模塊所要處理的任務(wù)執(zhí)行過(guò)程的一個(gè)描述。如圖3-2為圖3-1計(jì)算平均成績(jī)程序?qū)哟螆D中三個(gè)子模塊的程序流程圖。 圖3-2

25、a 第一層程序流程圖 圖3-2b 第二層程序流程圖 圖3-2描述的程序流程所對(duì)應(yīng)的C源代碼如下:/* 求平均成績(jī)模塊代碼 */int average() int sum;for(i=0;i<3;i+) sum=0; for(j=0;j<4;j+) sum+=sij; avei=sum/4; /* 輸出平均成績(jī)模塊代碼 */int output() for(i=0;i<3;i+) printf(“%f”,avei); /* 主模塊代碼 */int i,j,s34;float ave3;main() intput();average();output(); /* 成績(jī)輸入模塊代碼

26、 */int input() for(i=0;i<3;i+)for(j=0;j<4;j+) scanf(“%d,”,s34); 在上述C程序所完成的功能是計(jì)算3名學(xué)生四門(mén)課程每名學(xué)生的平均成績(jī)。其中主函數(shù)(即主模塊)主要是完成子函數(shù)(也稱(chēng)子模塊)的調(diào)用,在main函數(shù)之前所定義的變量和數(shù)組均為全局量,因?yàn)?,下面的三個(gè)子函數(shù)都要用這些變量。從上述的模塊結(jié)構(gòu)化編程的示例過(guò)程和結(jié)果來(lái)看,的確提高了程序的可讀性,無(wú)論是寫(xiě)程序的人或是讀程序的人都可以很輕松地分析C程序,符合結(jié)構(gòu)化程序設(shè)計(jì)的思想。所以從本實(shí)驗(yàn)開(kāi)始,要求學(xué)生必須遵循模塊結(jié)構(gòu)化設(shè)計(jì)程序的原則來(lái)設(shè)計(jì)程序,逐漸養(yǎng)成良好的編程習(xí)慣,不斷

27、地積累模塊結(jié)構(gòu)化編程的經(jīng)驗(yàn),來(lái)提高自己軟件開(kāi)發(fā)的能力。 五、模塊結(jié)構(gòu)化編程的指導(dǎo)原則為了讓學(xué)生能達(dá)到最佳的項(xiàng)目編程效果,以下提供幾條適于模塊結(jié)構(gòu)化編程的指導(dǎo)原則,可供學(xué)生參考。1、模塊應(yīng)有一個(gè)入口點(diǎn)和一個(gè)退出點(diǎn)。如圖3-2中的控制流從各模塊的頂部流入,從底部返回處退出。2、每個(gè)模塊只執(zhí)行一個(gè)任務(wù)。例如在計(jì)算學(xué)生平均成績(jī)的示例中成績(jī)輸入、求平均以及輸出計(jì)算結(jié)果是三個(gè)不同的任務(wù),應(yīng)分別處理,不要將無(wú)關(guān)的任務(wù)放于同一模塊中,只將完成同一任務(wù)的語(yǔ)句組合在一起。3、編程注意事項(xiàng):·程序應(yīng)有自我記錄。即可利用描述變量、模塊和函數(shù)的標(biāo)識(shí)符·利用注釋記錄代碼,并說(shuō)明特殊或復(fù)雜的處理

28、3;利用簡(jiǎn)單的代碼編寫(xiě)結(jié)構(gòu)·利用注釋標(biāo)識(shí)模塊和函數(shù)·每個(gè)模塊包含的語(yǔ)句不應(yīng)超過(guò)20條以上列出的編程指導(dǎo)原則只要大家理解了,是不難做到的,真誠(chéng)地希望參與本實(shí)驗(yàn)的學(xué)生一定會(huì)在更短的時(shí)間內(nèi)編出高質(zhì)量的程序來(lái),到那時(shí),你一定能夠享受到模塊結(jié)構(gòu)化編程所帶來(lái)的如下所說(shuō)的好處: (1) 更易于維護(hù)程序。即便于更新或修改。(2) 更易于設(shè)計(jì)和編寫(xiě)程序,開(kāi)發(fā)期間出現(xiàn)的錯(cuò)誤將大量減少。(3) 程序的可靠性更高,生產(chǎn)運(yùn)行期間出現(xiàn)的錯(cuò)誤將大量減少。(4) 更易于其他人(甚至是不熟悉程序的人)讀取和理解程序。(5) 更易于測(cè)試調(diào)試程序。(6) 更易于編寫(xiě)和維護(hù)文檔。 六、項(xiàng)目編程1、矩陣運(yùn)算。請(qǐng)輸入

29、一個(gè)3行3列矩陣的所有元素,然后輸出兩條對(duì)角線(xiàn)元素之和。(1) 要求:該程序應(yīng)由一個(gè)主函數(shù)和3個(gè)子函數(shù)構(gòu)成,子函數(shù)分別完成矩陣元素輸入、兩條對(duì)角線(xiàn)元素求和、輸出結(jié)果。畫(huà)出層次圖、程序流程圖及源代碼清單。(2)相關(guān)知識(shí):矩陣運(yùn)算。在軟件開(kāi)發(fā)中,矩陣是一種常見(jiàn)的數(shù)據(jù)組織形式,在語(yǔ)言上矩陣與二維數(shù)組相對(duì)應(yīng),故通??偸怯枚S數(shù)組存儲(chǔ)矩陣元素。有時(shí)在試題中會(huì)給出計(jì)算公式。因此,計(jì)算過(guò)程中的主要工作是核對(duì)下標(biāo)。與矩陣相關(guān)的主要問(wèn)題包括:計(jì)算矩陣的對(duì)角線(xiàn)元素之和(此時(shí)矩陣為方陣,M=N,對(duì)角線(xiàn)可以是一條或兩條,通常為一條,即主對(duì)角線(xiàn));計(jì)算矩陣的周邊元素之和,即四周的元素和;矩陣的上三角或下三角之和;兩矩陣

30、之和矩陣,即將兩個(gè)矩陣的各個(gè)元素對(duì)應(yīng)求和;矩陣及其轉(zhuǎn)置矩陣之和;兩矩陣的乘積矩陣。(3)本項(xiàng)目設(shè)計(jì)步驟:項(xiàng)目層次圖 圖3-3 矩陣運(yùn)算層次圖請(qǐng)完成其它三個(gè)子模塊的程序流程圖圖3-4a 主程序流程圖 圖3-4b 輸入矩陣元素程序流程圖圖3-4c 矩陣運(yùn)算程序流程圖 圖3-4d 打印輸出程序流程圖 C源代碼清單2、將下列給出的城市名列表按降序排序。Atlanta Boston Chicago Denver Hoston LosAngeles Miami NewYork (1) 項(xiàng)目要求: 可利用StrCmp()、StrCopy()函數(shù)。 該程序應(yīng)由一個(gè)主函數(shù)和2個(gè)子函數(shù)構(gòu)成,子函數(shù)分別完成城市名列

31、表的排序和輸出排序后的城市名列表。 畫(huà)出層次圖、程序流程圖及源代碼清單。(2) 相關(guān)知識(shí):StrCmp():字符串比較函數(shù)。格式: strcmp(字符串1,字符串2)說(shuō)明: 函數(shù)結(jié)果可由如下函數(shù)值得出:字符串1=字符串2,函數(shù)值為 0;字符串1>字符串2,函數(shù)值為一正整數(shù);字符串1<字符串2,函數(shù)值為一負(fù)整數(shù);StrCopy():字符串復(fù)制函數(shù)格式: strcpy(字符數(shù)組1,字符串2)功能: 將字符串2復(fù)制到字符數(shù)組1中。 (3)請(qǐng)畫(huà)出main函數(shù)與城市名表列排序和打印輸出函數(shù)的流程圖。(4)程序流程圖(5) C源代碼清單3、請(qǐng)?jiān)O(shè)計(jì)一個(gè)fun函數(shù),其功能是給一維數(shù)組輸入任意4個(gè)整

32、數(shù)后,應(yīng)如下規(guī)律輸出。如輸入整數(shù) 1,2,3,4,則程序運(yùn)行后將輸出以下方陣:要求:該程序由一個(gè)主函數(shù)和一個(gè)fun函數(shù)組成按以下給出程序結(jié)構(gòu)填寫(xiě)fun函數(shù)中的C代碼#define M 4main() int aM; fun(a); int fun(int a) int i,j,k,m; for(i=0;i<M;i+) scanf(“%d”, &ai); 七、思考題:(1) 函數(shù)都有哪些調(diào)用方式?解答:(2) 參數(shù)在進(jìn)行信息傳遞時(shí),都具有哪些傳遞方式,各有什么特點(diǎn)(即實(shí)參與形參的傳遞)?解答:(3) 根據(jù)你對(duì)局部變量和全局變量的理解,在什么情況下用局部變量合適,在什么情況下用全局變

33、量合適?解答:(4) 從課堂的教學(xué)以及上機(jī)的實(shí)踐教學(xué)中,你是如何理解模塊化程序設(shè)計(jì)的?為什么提倡模塊化?(如果你沒(méi)有充分理解的話(huà),可去書(shū)店或上網(wǎng)查閱有關(guān)這方面的資料,一定弄清楚這個(gè)問(wèn)題?。┙獯穑?九、課外選做題: 1、 請(qǐng)編寫(xiě)一個(gè)fun函數(shù),用于計(jì)算給定整數(shù)num各位數(shù)字之積。例如,若輸入252,則應(yīng)輸出結(jié)果是,20;輸入202,輸出結(jié)果是0。2、設(shè)某學(xué)校在校生的年齡在17歲到23歲,請(qǐng)編寫(xiě)一個(gè)fun函數(shù),用于統(tǒng)計(jì)該校5000人各年齡的人數(shù)。3、請(qǐng)編寫(xiě)fun函數(shù),在下列給出的一個(gè)有序的數(shù)列中插入一個(gè)數(shù),且當(dāng)該數(shù)插入后,應(yīng)使該數(shù)列仍然有序。60, 68, 78, 88, 90, 93, 95,

34、96, 98, 100實(shí)驗(yàn)4 指針與鏈表一、實(shí)驗(yàn)學(xué)時(shí):4二、實(shí)驗(yàn)?zāi)康模?、深刻理解指針的特點(diǎn)和作用 2、學(xué)習(xí)并應(yīng)用指針來(lái)設(shè)計(jì)算法 3、學(xué)習(xí)和掌握利用指針對(duì)內(nèi)存進(jìn)行動(dòng)態(tài)分配 4、學(xué)習(xí)和掌握指針的編程技巧 三、必須學(xué)習(xí)和掌握的知識(shí)點(diǎn):1、指向變量的指針變量2、指向數(shù)組和多維數(shù)組的指針變量3、指向函數(shù)的指針變量4、指向字符串的指針變量5、指針數(shù)組6、用指針處理鏈表四、主要知識(shí)點(diǎn)講解1、內(nèi)存的動(dòng)態(tài)分配:動(dòng)態(tài)內(nèi)存管理使程序員可以在程序運(yùn)行過(guò)程中隨時(shí)申請(qǐng)一塊空閑內(nèi)存,在使用后即可釋放。比較之下,它比程序中定義的變量或數(shù)組更能靈活有效地使用并節(jié)約內(nèi)存。因?yàn)槌绦蛑凶兞炕驍?shù)組一經(jīng)定義,即使不再使用也必須占用內(nèi)存

35、。2、動(dòng)態(tài)內(nèi)存管理函數(shù):(1) malloc函數(shù)的一般使用格式(類(lèi)型*)malloc(字節(jié)數(shù))以字節(jié)數(shù)為單位,動(dòng)態(tài)分配存儲(chǔ)空間。當(dāng)存儲(chǔ)空間被分配成功時(shí),將返回的是該內(nèi)存塊的首地址,否則返回值為0。 例如,float *p; p=(float *)malloc(5*sizeof(float);上述語(yǔ)句表示,malloc函數(shù)動(dòng)態(tài)分配到了5個(gè)內(nèi)存塊,每個(gè)內(nèi)存塊為4個(gè)字節(jié)(即實(shí)型數(shù)的存儲(chǔ)長(zhǎng)度),并且指針變量p將指向的是5個(gè)內(nèi)存塊的首字節(jié)的地址。見(jiàn)圖4-1所示。圖4-1 指針p指向5個(gè)內(nèi)存塊的首地址(2) free函數(shù)的一般使用格式free(動(dòng)態(tài)分配的內(nèi)存塊首地址)其作用是釋放掉由malloc函數(shù)分配的

36、內(nèi)存空間,也就是將該內(nèi)存空間歸還給系統(tǒng),以便另行分配使用。 例如,float *p; p=(float *)malloc(5*sizeof(float); free(p); 3、指向變量的指針變量,示例:float a,*p1;p1=&a; 圖4-2 指針p指向變量a的首字節(jié)地址變量a所占用的存儲(chǔ)空間是由4個(gè)字節(jié)組成,如果假設(shè)地址編號(hào)是從2000開(kāi)始,則變量a所占用內(nèi)存的地址編號(hào)應(yīng)該是2000,2001,2002,2003,而指針p中所存放的地址編號(hào)是 2000,也就是變量a的首字節(jié)地址。 4、指向一維數(shù)組和多維數(shù)組的指針變量,示例:float a3,b23,*p1,(*p2)3;p1

37、=a;p2=b;圖4-3a 指針p1指向數(shù)組a的首地址指針p1被定義為是指向一維數(shù)組的指針變量。如果執(zhí)行了p1=a;該指針變量p1具有的是一維數(shù)a的首地址(C語(yǔ)言規(guī)定,數(shù)組名代表地址常量,即該數(shù)組的首地址),見(jiàn)圖4-3a。如果該首地址編號(hào)是FFB6,則a代表的是FFB6。而當(dāng)執(zhí)行p1+時(shí),也就是讓指針p1向高字節(jié)方向增加1時(shí),相當(dāng)于增加4個(gè)字節(jié)的長(zhǎng)度,此時(shí),p1將具有a1元素的地址,地址編號(hào)是FFBA,見(jiàn)圖4-3b所示,依次類(lèi)推。圖4-3b指針p1指向a1元素的地址指針p2被定義為是指向二維數(shù)組的指針變量指針,也稱(chēng)為p2是行指針。此時(shí),p2具有二維數(shù)b的首地址,地址編號(hào)是FFA6,見(jiàn)圖4-3c

38、。圖4-3c 指針p2指向數(shù)組b的首地址如果此時(shí)執(zhí)行了p2+操作時(shí),也就是讓指針p2向高字節(jié)方向增加1時(shí),相當(dāng)于增加12個(gè)字節(jié)的長(zhǎng)度(就即相當(dāng)于p2具有了下一行的首列地址),也就是a10元素的地址,地址編號(hào)是FFB2,依次類(lèi)推。見(jiàn)圖4-3c所示。圖4-3d 指針p2指向b10元素的地址 請(qǐng)同學(xué)們思考:若要求利用行指針輸出上述b數(shù)組中的所有元素的地址和所有元素值的話(huà),則代碼將如何編寫(xiě)?5、指向函數(shù)的指針變量,示例:int fun( ),(*p)( ),a=5,b=7,c;p=fun; 指針p具有函數(shù)fun的入口地址(每個(gè)函數(shù)都有一個(gè)入口點(diǎn),稱(chēng)該入口點(diǎn)即為該函數(shù)的入口地址),本例函數(shù)的入口地址編號(hào)

39、是0046,見(jiàn)圖4-4。在C語(yǔ)言中,函數(shù)的名字是一個(gè)指針,其值就是該函數(shù)的入口地址。此時(shí),函數(shù)名fun為一個(gè)入口地址常量,且把fun賦給p,則指針p稱(chēng)為指向函數(shù)的指針變量,也就是在進(jìn)行函數(shù)fun的調(diào)用時(shí),也可利用指針p進(jìn)行函數(shù)的調(diào)用了。圖4-4 指針p指向fun函數(shù)的入口地址如有下面的語(yǔ)句行:c=(*p)(a,b); 此語(yǔ)句就相當(dāng)于函數(shù)調(diào)用的語(yǔ)句:c=fun(a,b); 。6、字符串指針變量,示例:Char *str=“student”;圖4-5 字符串指針str所指向字母s的地址7、指針數(shù)組,示例:int a34,*p3,i;for(i=0;i<3;i+)pi=&ai0;圖4-

40、6指針數(shù)組p指向數(shù)組a的首列地址指針p被定義的是指針數(shù)組,即在該數(shù)組中的每一個(gè)元素值都是地址值。在該示例中p具有三個(gè)指針元素,即p0,p1,p2它們分別具有數(shù)組a00,a10和a20的地址,如圖4-6所示。此時(shí),可利用指針數(shù)組間接對(duì)a數(shù)組進(jìn)行操作。指針數(shù)組應(yīng)用最多的還是對(duì)字符串的處理,如利用指針數(shù)組對(duì)字符串的排序、查找以及字符的統(tǒng)計(jì)操作等。在本實(shí)驗(yàn)中的項(xiàng)目編程中的第3題就涉及到指針數(shù)組的應(yīng)用。關(guān)于該知識(shí)點(diǎn)的詳細(xì)內(nèi)容請(qǐng)參閱教科書(shū)第248頁(yè)。8、鏈表鏈表屬于動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),可以類(lèi)比成一“環(huán)”接一“環(huán)”的鏈條,這里的每一“環(huán)”可以視作一個(gè)結(jié)點(diǎn),如果把結(jié)點(diǎn)串在一起就形成了鏈表。這種數(shù)據(jù)結(jié)構(gòu)非常靈活,結(jié)點(diǎn)

41、數(shù)目無(wú)須指定,可以臨時(shí)生成。每個(gè)結(jié)點(diǎn)有自己的存儲(chǔ)空間,結(jié)點(diǎn)間的存儲(chǔ)空間也無(wú)須連接,結(jié)點(diǎn)之間的串連是由指針來(lái)完成的,而指針的操作又極為靈活方便,習(xí)慣上稱(chēng)這種數(shù)據(jù)結(jié)構(gòu)為動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)。這種結(jié)構(gòu)的最大的優(yōu)點(diǎn)是插入和刪除結(jié)點(diǎn)方便,無(wú)須移動(dòng)大批數(shù)據(jù),只須修改指針的指向即可。這是編程中十分重要的一種數(shù)據(jù)結(jié)構(gòu)。 在以下項(xiàng)目編程中的第2題就是關(guān)于鏈表的問(wèn)題。五、項(xiàng)目編程1、請(qǐng)建立一個(gè)學(xué)生成績(jī)數(shù)組然后調(diào)用一個(gè)fun函數(shù)用于查詢(xún)?cè)摂?shù)組中一門(mén)課程以上不及格的學(xué)生并打印他們?nèi)空n程的成績(jī)。(要求利用行指針作為函數(shù)的傳遞參數(shù))。(1) 提供部分代碼如下,并請(qǐng)完成其他全部代碼:#define M 3#define N 4m

42、ain() float stuMN=68,90,66,80,56,78,80,90,50,68,56,98; float fun(); fun(stu,M); float fun(float (*p)N,int n) 2、請(qǐng)為下列給出的某班級(jí)C程序編碼員列表,建立一個(gè)鏈表。圖4-7 C程序編碼員列表(1)說(shuō)明: 在上表中,每人為一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)中有4個(gè)成員:姓名、出生年、出生月和指針。然后用指針將每個(gè)節(jié)點(diǎn)鏈接起來(lái)。 節(jié)點(diǎn)鏈接的條件是生日大者在前,小者在后。 最后輸出已按順序排好的并具有5個(gè)節(jié)點(diǎn)的鏈表,如圖4-8編碼員鏈表所示。 圖4-8 程序編碼員鏈表 (2)本題相關(guān)知識(shí)這是一個(gè)關(guān)于建立單向動(dòng)態(tài)

43、鏈表的問(wèn)題。所謂建立動(dòng)態(tài)鏈表是指在程序執(zhí)行過(guò)程中從無(wú)到有地建立起一鏈表,即一個(gè)一個(gè)地開(kāi)辟節(jié)點(diǎn)和輸入各節(jié)點(diǎn)的數(shù)據(jù)值,并建立起前后相鏈的關(guān)系。在做本實(shí)驗(yàn)時(shí)之前,首先應(yīng)弄清楚節(jié)點(diǎn)數(shù)據(jù)類(lèi)型的定義、如何利用指針的動(dòng)態(tài)地開(kāi)辟節(jié)點(diǎn)以及輸出已建立的動(dòng)態(tài)鏈表等項(xiàng)內(nèi)容。 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu):本題主要是鏈表的建立,它的實(shí)現(xiàn)依賴(lài)于動(dòng)態(tài)的內(nèi)存管理,即利用malloc函數(shù); 描述單向鏈表的數(shù)據(jù)類(lèi)型:?jiǎn)蜗蜴湵淼囊话憬Y(jié)構(gòu)如圖4-9所示。 圖4-9a 單向鏈表為了實(shí)現(xiàn)鏈表必須定義能夠描述鏈表中節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型,該類(lèi)型應(yīng)包含有數(shù)值和地址兩大部分。見(jiàn)圖4-9b。 關(guān)于鏈表動(dòng)態(tài)建立和鏈表輸出的具體實(shí)現(xiàn)過(guò)程,請(qǐng)參閱教科書(shū)第275頁(yè)到279頁(yè)。

44、 圖4-9b鏈表節(jié)點(diǎn) 除了上述建立、輸出鏈表,則與本題相關(guān)的內(nèi)容還有關(guān)于鏈表的插入和刪除操作(參照教科書(shū)的第281-286頁(yè))。(3) 要求:設(shè)計(jì)一個(gè)主函數(shù)和兩個(gè)子函數(shù)(即建立鏈表模塊和輸出鏈表模塊)。(4) 請(qǐng)?jiān)谝韵驴臻g內(nèi)完成本題的C源程序。3、編寫(xiě)一個(gè)fun函數(shù),其功能是將字符指針s所指字符串(見(jiàn)圖4-10a)所有下標(biāo)值為奇數(shù)的字符刪除,然后將串中剩余字符存放到由字符指針t所指的字符數(shù)組中(例如圖4-10b所示)。 (1)要求:利用字符指針變量作fun函數(shù)中的形參 (2)本題相關(guān)知識(shí):在字符串相關(guān)的所有操作中,包括有計(jì)算給定字符串的長(zhǎng)度、對(duì)奇數(shù)位操作、對(duì)偶數(shù)位操作等一系列問(wèn)題。在這些操作中

45、,需要利用循環(huán)語(yǔ)句“遍歷”字符串的每一個(gè)下標(biāo)。 字符串的理解字符串是由一串字符組成的整體,包括常量和變量。但字符串不是一種專(zhuān)門(mén)的數(shù)據(jù)類(lèi)型,而是由字符數(shù)組充當(dāng)。字符串的常量是以雙引號(hào)括起來(lái)的若干個(gè)字符的集合,如“hello”,這些字符在內(nèi)存中都是以ASCII碼值形式進(jìn)行存儲(chǔ)的。并以“0”作為字符串的結(jié)束標(biāo)記。 指向字符串常量的指針在程序設(shè)計(jì)中,可以用字符象指針變量記載字符串常量的首地址,從而形成了一類(lèi)“字符串變量”。例如:char *p=”hello”; 或 char *p; p=”hello”;以上兩種形式含義相同,都使指針p存儲(chǔ)著字符串常量“hello”的首地址。此時(shí),應(yīng)注意一定不能認(rèn)為字符

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

47、存儲(chǔ)字符串的長(zhǎng)度,所以只能利用字符串中的元素是否為結(jié)束符作為判定字符串結(jié)束的依據(jù)。另者,還值得注意的一點(diǎn)是,字符串結(jié)束符號(hào)0的ASCII碼值是整數(shù)0,也就是說(shuō),0與整數(shù)0相同,當(dāng)它不同于字符0,應(yīng)為對(duì)于字符0的ASCII碼值是48,故可以說(shuō),0與整數(shù)48相同。(3) 提供main函數(shù)代碼如下,并請(qǐng)完成fun函數(shù)的全部代碼:main() char ch100,t100,fun(); gets(ch); fun(ch,t); char fun(char *s, char *t) 六、課外選題1、 請(qǐng)?jiān)O(shè)計(jì)一個(gè)fun函數(shù),其功能是統(tǒng)計(jì)由字符指針ss所指的字符串中指定字符的個(gè)數(shù),并將此統(tǒng)計(jì)結(jié)果返回給主函數(shù)。例如,若輸入字符串:123412132 ,再輸入 1,則應(yīng)輸出為 3,也就是說(shuō),該字符串的數(shù)字中含有數(shù)字1的個(gè)數(shù)有3個(gè)。請(qǐng)完成fun函數(shù)中的C代碼。main() char ss100,ch; int c; gets(ss); scanf(“%c”, &a

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論