




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)報(bào)告課程名稱數(shù)據(jù)結(jié)構(gòu)課題名稱1.通訊錄管理2.迷宮求解專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)學(xué)號(hào)2013130301201381姓名楊承志指導(dǎo)教師劉鐵武劉杰君2015年7月5日湖南工程學(xué)院課程設(shè)計(jì)任務(wù)書一.設(shè)計(jì)目標(biāo)強(qiáng)化學(xué)生編碼、調(diào)試錯(cuò)誤的能力;了解和掌握數(shù)據(jù)結(jié)構(gòu)相關(guān)技術(shù)、并合理利用其解決實(shí)際應(yīng)用問(wèn)題;了解軟件開(kāi)發(fā)的流程和項(xiàng)目管理控制;掌握企業(yè)級(jí)IDE的使用;了解當(dāng)前IT行業(yè)及職業(yè)人應(yīng)具備的素質(zhì);完全模擬真實(shí)軟件開(kāi)發(fā)流程和管理;增強(qiáng)團(tuán)隊(duì)意識(shí)和團(tuán)隊(duì)合作精神。二.設(shè)計(jì)內(nèi)容:?jiǎn)栴}1:拓?fù)渑判虼髮W(xué)期間各專業(yè)都要制訂相應(yīng)的教學(xué)計(jì)劃。每個(gè)專業(yè)開(kāi)設(shè)的課程預(yù)先已確定。而各門課程間有的是相互獨(dú)立的,而有的則有先修后修的限定。試設(shè)計(jì)相應(yīng)的課程設(shè)置程序,實(shí)現(xiàn)對(duì)某專業(yè)各學(xué)期的課程的排布,其中每門課需設(shè)定課時(shí),而各學(xué)期的總課時(shí)不能超過(guò)上限。測(cè)試數(shù)據(jù):學(xué)期課時(shí)上限數(shù):350;各課程所需學(xué)時(shí):48;課程先、后修關(guān)系如圖:194212101136578問(wèn)題2:huffman編碼對(duì)于確定的字符集的電文字符串編碼,實(shí)現(xiàn)最高的通信效率。編程實(shí)現(xiàn)對(duì)于給定的輸入串及各字符的已知頻度,輸出其編碼方式(各字符的二進(jìn)制編碼)及對(duì)應(yīng)的輸出流。測(cè)試數(shù)據(jù):字符A頻度1866413223210321154757BCDEFGHIJK1LM232字符頻度NOPQRSTUVWXYZ20576315148518023181168問(wèn)題3:成績(jī)管理編制一應(yīng)用軟件實(shí)現(xiàn)對(duì)班級(jí)成績(jī)管理。基本功能有學(xué)生信息的增刪(轉(zhuǎn)入或退學(xué))、查找(從當(dāng)前點(diǎn)向前或向后雙向的)、錄入、統(tǒng)計(jì)(如總分,及格率等)。建議用雙鏈表實(shí)現(xiàn)。問(wèn)題4:成績(jī)排序?qū)δ炒慰荚嚦煽?jī)排序,輸入為多門課程成績(jī),可以任一課程成績(jī)?yōu)殛P(guān)鍵字進(jìn)行檢索。建議采用快速排序等算法效率高的算法。問(wèn)題5:迷宮求解一個(gè)M*N的長(zhǎng)方陣迷宮,0和1分別表示迷宮中的通路和墻壁。對(duì)任意設(shè)定的迷宮,東、南、西、北四個(gè)方向是可能的行走方向。求出一條從入口到出口的路徑。(或沒(méi)有通路)。測(cè)試數(shù)據(jù):迷宮的測(cè)試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(8,9)為出口。000000011000101111110100100000110100001000100001001010110100000001001110問(wèn)題6:一元多項(xiàng)式計(jì)算。對(duì)于任意輸入的多項(xiàng)式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用鏈表存儲(chǔ)后實(shí)現(xiàn)A+B;A-B。測(cè)試數(shù)據(jù):a.;b.;c.;d.;e.;問(wèn)題7:通訊錄管理設(shè)計(jì)一個(gè)通訊錄管理,包括通訊錄鏈表的建立、通訊者的插入、通訊者的刪除、通訊者的查詢以及信息修改等。要求有運(yùn)行界面,從菜單中進(jìn)入選項(xiàng)。三.設(shè)計(jì)要求:1.選題:每位學(xué)生需完成兩個(gè)課題,其中一個(gè)必選,另一個(gè)自選,必選題次為,學(xué)號(hào)/7+1。2.課程設(shè)計(jì)報(bào)告內(nèi)容說(shuō)明1)需求分析程序的功能;輸入輸出的要求。2)概要設(shè)計(jì)程序的模塊構(gòu)成以及模塊之間的層次結(jié)構(gòu)、各模塊的調(diào)用關(guān)系;每個(gè)模塊的功能;課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)結(jié)構(gòu);即要存儲(chǔ)什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。3)詳細(xì)設(shè)計(jì)采用C語(yǔ)言定義相關(guān)的數(shù)據(jù)類型;寫出各模塊的類C碼算法;畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。4)調(diào)試分析以及設(shè)計(jì)體會(huì)測(cè)試數(shù)據(jù):準(zhǔn)備典型的測(cè)試數(shù)據(jù)和測(cè)試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果;程序調(diào)試中遇到的問(wèn)題以及解決問(wèn)題的方法;課程設(shè)計(jì)過(guò)程經(jīng)驗(yàn)教訓(xùn)、心得體會(huì)。5)使用說(shuō)明用戶使用手冊(cè):說(shuō)明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。6)書寫格式見(jiàn)附帶說(shuō)明。7)附錄參考書目;源程序清單(帶注釋)3.成績(jī)?cè)u(píng)定:指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動(dòng)手能力、創(chuàng)新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評(píng),并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級(jí)給出每位同學(xué)的課程設(shè)計(jì)成績(jī)。具體考核標(biāo)準(zhǔn)包含以下幾個(gè)部分:①平時(shí)出勤(占10%)②系統(tǒng)需求分析、功能設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及程序總體結(jié)構(gòu)合理與否(占10%)③程序能否完整、準(zhǔn)確地運(yùn)行,個(gè)人能否獨(dú)立、熟練地調(diào)試程序(占40%)④設(shè)計(jì)報(bào)告(占30%)注意:不得抄襲他人的報(bào)告(或給他人抄襲),一旦發(fā)現(xiàn),成績(jī)?yōu)榱惴帧"莳?dú)立完成情況(占10%)。四.進(jìn)度安排第17周星期一星期二星期三星期四星期五上午9:00~12:00下午E512E411E414E414第18周星期一星期二星期三星期四星期五上午9:00~12:00下午13:30~16:30E412E413附:課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、評(píng)分、附件(A4大小的圖紙及程序清單)。正文的格式:一級(jí)標(biāo)題用3號(hào)黑體,二級(jí)標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體;行距為22。正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實(shí)現(xiàn)(至少要有一個(gè)主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對(duì)程序?qū)懗霰匾淖⑨專U目傋謹(jǐn)?shù)要求在5000字以上(不含程序原代碼)。一,通訊錄管理系統(tǒng)1.需求分析2.概要設(shè)計(jì)3.詳細(xì)設(shè)計(jì)4.調(diào)試分析二,迷宮求解1.問(wèn)題描述2.需求分析3.概要設(shè)計(jì)4.流程圖5.詳細(xì)設(shè)計(jì)6.調(diào)試分析三,課程設(shè)計(jì)總結(jié)四,附錄通訊錄管理系統(tǒng)1,需求分析設(shè)計(jì)一個(gè)實(shí)用的小型通訊錄,用雙向鏈表做數(shù)據(jù)結(jié)構(gòu),編寫一個(gè)通訊錄管理系統(tǒng)實(shí)現(xiàn)通訊錄信息的輸入、添加、顯示、以姓名做關(guān)鍵字進(jìn)行查找、刪除信息等功能。每條信息至少包含:姓名、街道、城市、郵編、國(guó)家等信息。2,概要設(shè)計(jì)載入文件load():將磁盤中可能存在的文件載入到內(nèi)存中。信息輸入enter():系統(tǒng)將提示輸入新紀(jì)錄所需信息,信息包含:姓名、街道、城市、郵編、國(guó)家。信息刪除del():首先提示用戶輸入要?jiǎng)h除的紀(jì)錄姓名,然后調(diào)用刪除函數(shù),刪除該紀(jì)錄的相關(guān)資料,支持重名選擇刪除和循環(huán)刪除。查找search():提示用戶輸入要查找的姓名,然后系統(tǒng)調(diào)用查找函數(shù)查找,接著系統(tǒng)使用相關(guān)命令輸出查到的全部信息。顯示全部display():將內(nèi)存中的紀(jì)錄內(nèi)容全部輸出,包括未保存到磁盤的記錄項(xiàng)。保存save():將操作結(jié)果實(shí)時(shí)保存到磁盤文件txl.txt中,完成后返回到主菜單界面。退出系統(tǒng)exit(0):直接退出系統(tǒng),不保存修改。流程圖:3,詳細(xì)設(shè)計(jì)1.各個(gè)操作的算法實(shí)現(xiàn):(1)鏈表初始化voidinitlist()//鏈表初始化函數(shù){l=(linklist)malloc(sizeof(pnode));//動(dòng)態(tài)申請(qǐng)內(nèi)存l->next=l;l->prior=l;}(2)載入可能存在的通訊錄文件voidload()//裝載已有文件信息{//無(wú)文件,新建立文件……;……;//已有文件,導(dǎo)入文件……;……;}(3)增加新結(jié)點(diǎn)voidlistinsert()//增加新結(jié)點(diǎn){//插入新結(jié)點(diǎn),讀入內(nèi)存信息……;……;}(4)添加新紀(jì)錄(可循環(huán))voidenter()//添加新紀(jì)錄{//信息輸入……;……;//是否繼續(xù)添加?……;……;}(5)按姓名查找(同時(shí)顯示全部符合要求的結(jié)果,包括沒(méi)有保存到磁盤的)voidsearch(){//輸入姓名……;……;//輸出查詢結(jié)果……;……;//檢索可能的重名紀(jì)錄……;……;}(6)顯示所有記錄(包括沒(méi)有保存到磁盤的)voiddisplay()//顯示所有紀(jì)錄{//顯示內(nèi)存中的所有記錄……;……;}(7)刪除指定記錄(可循環(huán))voiddel()//刪除紀(jì)錄{//輸入要?jiǎng)h除的姓名……;……;//查找符合條件的記錄,對(duì)于每條記錄詢問(wèn)是否刪除;//滿足條件的輸出結(jié)束,詢問(wèn)是否刪除其他記錄,循環(huán)……;……;}(8)保存到磁盤文件(實(shí)時(shí)寫入文件)voidsave()//{//寫入文件操作……;……;}3,調(diào)試分析程序主界面新增聯(lián)系人現(xiàn)實(shí)所有聯(lián)系人查找聯(lián)系人經(jīng)過(guò)反復(fù)測(cè)試,最終提供了一個(gè)較為友好的界面和操作模式,而且容錯(cuò)能力較好,穩(wěn)定性很強(qiáng)。下面做一些簡(jiǎn)單的說(shuō)明:(1)2級(jí)菜單只是作為一種嘗試,并非必須!(2)在界面排版上,我學(xué)習(xí)了互聯(lián)網(wǎng)上部分程序的界面編排,其中以格式控制方式顯示提高了界面顯示的穩(wěn)定性,較為理想。(3)在文件讀取和保存方面,該程序做到了實(shí)時(shí)保存保存和讀取,操作非常簡(jiǎn)便。(4)在查找方面,我將其設(shè)計(jì)為一次多記錄的顯示方式,也更合乎操作習(xí)慣,界面較為友好,對(duì)于無(wú)符合條件的結(jié)果,只是結(jié)果集為空,界面保持不變。同時(shí),它是實(shí)時(shí)讀取的,可以將剛剛輸入而未保存的記錄也讀取到!另外,一次查詢結(jié)束后返回的是查詢菜單,可以直接進(jìn)行下一次的查詢,也較為合理。(5)刪除功能我做了較多的工作,整體界面和設(shè)計(jì)都較為合理。對(duì)于輸入的姓名,查找出結(jié)果后提示是否刪除。若有重名,則會(huì)二次顯示,提示是否刪除,一直到所有記錄查詢結(jié)束(可以在重名中選中需要的進(jìn)行刪除,并不需要?jiǎng)h除每一個(gè)紀(jì)錄)。結(jié)束之后可以直接再次刪除其他紀(jì)錄,因?yàn)樗峁┭h(huán)刪除操作功能。迷宮求解問(wèn)題描述:a.問(wèn)題描述:以一個(gè)m*n的長(zhǎng)方陣表示迷宮,0和1分別表示迷宮的通路和障礙。設(shè)計(jì)一個(gè)程序,對(duì)任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒(méi)有通路的結(jié)論。b.基本要求:(1)實(shí)現(xiàn)一個(gè)以鏈表做存儲(chǔ)的棧類型,然后編寫一個(gè)求解迷宮的非遞歸程序。求的通路以三元組(i,j,d)的形式輸出,其中:(i,j)指示迷宮中的一個(gè)坐標(biāo),d表示走到下一坐標(biāo)的方向。如:對(duì)于下列數(shù)據(jù)的迷宮,輸出一條通路:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2)……。(2)編寫遞歸形式的算法,求得迷宮中所有可能的道路;(3)以方陣形式輸出迷宮及其到道路(選做)c.測(cè)試數(shù)據(jù):迷宮的測(cè)試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(8,9)為出口。000000011000101111110100100000110100001000100001001010110100000001001110d.實(shí)現(xiàn)提示:計(jì)算機(jī)解迷宮通常用的是“窮舉求解”方法,即從入口出發(fā),順著米一個(gè)方向進(jìn)行探索,若能走通,則繼續(xù)往前進(jìn);否則沿著原路退回,換一個(gè)方向繼續(xù)探索,直至出口位置,求的一條通路。假如所有的可能的通路都探索到而未能到出口,則所設(shè)定的迷宮沒(méi)有通路。可以二維數(shù)組存儲(chǔ)迷宮數(shù)據(jù),通常設(shè)定入口點(diǎn)的下標(biāo)為(1,1),出口點(diǎn)的下標(biāo)為(n,n)。為處理器方便起見(jiàn),可在迷宮的四周加上一圈障礙。對(duì)于迷宮中任一位置,均可約定有東、西、南、北四個(gè)方向可通。需求分析:本課程設(shè)計(jì)是解決迷宮求解的問(wèn)題,從入口出發(fā),順某一方向向前探索,若能走通,則繼續(xù)往前走;否則沿原路退回,換一個(gè)方向再繼續(xù)探索,直至所有可能的通路都探索到為止。為了保證在任何位置上都能沿原路退回,顯然需要用一個(gè)后進(jìn)先出的結(jié)構(gòu)來(lái)保存從入口到當(dāng)前位置的路徑。因此,在求迷宮通路的算法中要應(yīng)用“棧”的思想假設(shè)“當(dāng)前位置”指的是“在搜索過(guò)程中的某一時(shí)刻所在圖中某個(gè)方塊位置”,則求迷宮中一條路徑的算法的基本思想是:若當(dāng)前位置“可通”,則納入“當(dāng)前路徑”,并繼續(xù)朝“下一位置”探索,即切換“下一位置”為“當(dāng)前位置”,如此重復(fù)直至到達(dá)出口;若當(dāng)前位置“不可通”,則應(yīng)順著“來(lái)向”退回到“前一通道塊”,然后朝著除“來(lái)向”之外的其他方向繼續(xù)探索;若該通道塊的四周4個(gè)方塊均“不可通”,則應(yīng)從“當(dāng)前路徑”上刪除該通道塊。所謂“下一位置”指的是當(dāng)前位置四周4個(gè)方向(上、下、左、右)上相鄰的方塊。假設(shè)以棧記錄“當(dāng)前路徑”,則棧頂中存放的是“當(dāng)前路徑上最后一個(gè)通道塊”。由此,“納入路徑”的操作即為“當(dāng)前位置入棧”;“從當(dāng)前路徑上刪除前一通道塊”的操作即為“出棧”。概要設(shè)計(jì)1.①構(gòu)建一個(gè)二維數(shù)組maze[M+2][N+2]用于存儲(chǔ)迷宮矩陣②自動(dòng)或手動(dòng)生成迷宮,即為二維數(shù)組maze[M+2][N+2]賦值③構(gòu)建一個(gè)隊(duì)列用于存儲(chǔ)迷宮路徑④建立迷宮節(jié)點(diǎn)structpoint,用于存儲(chǔ)迷宮中每個(gè)節(jié)點(diǎn)的訪問(wèn)情況⑤實(shí)現(xiàn)搜索算法⑥屏幕上顯示操作菜單2.本程序包含10個(gè)函數(shù):(1)主函數(shù)main()(2)手動(dòng)生成迷宮函數(shù)shoudong_maze()(3)自動(dòng)生成迷宮函數(shù)zidong_maze()(4)將迷宮打印成圖形print_maze()(5)打印迷宮路徑(若存在路徑)result_maze()(6)入隊(duì)enqueue()(7)出隊(duì)dequeue()(8)判斷隊(duì)列是否為空is_empty()(9)訪問(wèn)節(jié)點(diǎn)visit()(10)搜索迷宮路徑mgpath()流程圖:詳細(xì)設(shè)計(jì)實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有數(shù)據(jù)類型及操作的偽代碼算法1.節(jié)點(diǎn)類型和指針類型迷宮矩陣類型:intmaze[M+2][N+2];為方便操作使其為全局變量迷宮中節(jié)點(diǎn)類型及隊(duì)列類型:structpoint{introw,col,predecessor}que[512]2.迷宮的操作(1)手動(dòng)生成迷宮voidshoudong_maze(intm,intn){定義i,j為循環(huán)變量for(i<=m)for(j<=n)輸入maze[i][j]的值}(2)自動(dòng)生成迷宮voidzidong_maze(intm,intn){定義i,j為循環(huán)變量for(i<=m)for(j<=n)maze[i][j]=rand()%2//由于rand()產(chǎn)生的隨機(jī)數(shù)是從0到RAND_MAX,RAND_MAX是定義在stdlib.h中的,其值至少為32767),要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫:k=rand()%(Y-X+1)+X;}(3)打印迷宮圖形voidprint_maze(intm,intn){用i,j循環(huán)變量,將maze[i][j]輸出□、■}(4)打印迷宮路徑voidresult_maze(intm,intn){用i,j循環(huán)變量,將maze[i][j]輸出□、■、☆}(5)搜索迷宮路徑①迷宮中隊(duì)列入隊(duì)操作voidenqueue(structpointp){將p放入隊(duì)尾,tail++}②迷宮中隊(duì)列出隊(duì)操作structpointdequeue(structpointp){head++,返回que[head-1]}③判斷隊(duì)列是否為空intis_empty(){返回head==tail的值,當(dāng)隊(duì)列為空時(shí),返回0}④訪問(wèn)迷宮矩陣中節(jié)點(diǎn)voidvisit(introw,intcol,intmaze[41][41]){建立新的隊(duì)列節(jié)點(diǎn)visit_point,將其值分別賦為row,col,head-1,maze[row][col]=2,表示該節(jié)點(diǎn)以被訪問(wèn)過(guò);調(diào)用enqueue(visit_point),將該節(jié)點(diǎn)入隊(duì)}⑤路徑求解voidmgpath(intmaze[41][41],intm,intn){先定義入口節(jié)點(diǎn)為structpointp={0,0,-1},從maze[0][0]開(kāi)始訪問(wèn)。如果入口處即為障礙,則此迷宮無(wú)解,返回0,程序結(jié)束。否則訪問(wèn)入口節(jié)點(diǎn),將入口節(jié)點(diǎn)標(biāo)記為訪問(wèn)過(guò)maze[p.row][p.col]=2,調(diào)用函數(shù)enqueue(p)將該節(jié)點(diǎn)入隊(duì)。判斷隊(duì)列是否為空,當(dāng)隊(duì)列不為空時(shí),則運(yùn)行以下操作:{調(diào)用dequeue()函數(shù),將隊(duì)頭元素返回給p,如果p.row==m-1且p.col==n-1,即到達(dá)出口節(jié)點(diǎn),即找到了路徑,結(jié)束如果p.col+1<n且maze[p.row][p.col+1]==0,說(shuō)明未到迷宮右邊界,且其右方有通路,則visit(p.row,p.col+1,maze),將右邊節(jié)點(diǎn)入隊(duì)標(biāo)記已訪問(wèn)如果p.row+1<m且maze[p.row+1][p.col]==0,說(shuō)明未到迷宮下邊界,且其下方有通路,則visit(p.row+1,p.col,maze),將下方節(jié)點(diǎn)入隊(duì)標(biāo)記已訪問(wèn)如果p.col-1>0且maze[p.row][p.col-1]==0,說(shuō)明未到迷宮左邊界,且其左方有通路,則visit(p.row,p.col-1,maze),將左方節(jié)點(diǎn)入隊(duì)標(biāo)記已訪問(wèn)如果p.row-1>0且maze[p.row-1][p.col]==0,說(shuō)明未到迷宮上邊界,且其上方有通路,則visit(p.row,p.col+1,maze),將上方節(jié)點(diǎn)入隊(duì)標(biāo)記已訪問(wèn)}訪問(wèn)到出口(找到路徑)即p.row==m-1且p.col==n-1,則逆序?qū)⒙窂綐?biāo)記為3即maze[p.row][p.col]==3;while(p.predecessor!=-1){p=queue[p.predecessor];maze[p.row][p.col]==3;}最后將路徑圖形打印出來(lái)。3.菜單選擇while(cycle!=(-1))手動(dòng)生成迷宮請(qǐng)按:1自動(dòng)生成迷宮請(qǐng)按:2退出請(qǐng)按:3scanf("%d",&i);switch(i){case1:請(qǐng)輸入行列數(shù)(如果超出預(yù)設(shè)范圍則提示重新輸入)shoudong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);case2:請(qǐng)輸入行列數(shù)(如果超出預(yù)設(shè)范圍則提示重新輸入)zidong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);case3:cycle=(-1);break;}調(diào)試分析程序主界面手動(dòng)輸入迷宮在調(diào)試過(guò)程中,首先使用的是棧進(jìn)行存儲(chǔ),但是產(chǎn)生的路徑是多條或不是最短路徑,所以通過(guò)算法比較,改用此算法調(diào)試過(guò)程出現(xiàn)了最多60個(gè)錯(cuò)誤。后經(jīng)多次調(diào)試檢查,發(fā)現(xiàn)有些格式問(wèn)題沒(méi)有注意比如函數(shù)括號(hào)的放置等。課程設(shè)計(jì)總結(jié)通過(guò)這段時(shí)間的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),本人對(duì)計(jì)算機(jī)的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)的作用以及C語(yǔ)言的使用都有了更深的了解。尤其是C語(yǔ)言的進(jìn)步讓我深刻的感受到任何所學(xué)的知識(shí)都需要實(shí)踐,沒(méi)有實(shí)踐就無(wú)法真正理解這些知識(shí)以及掌握它們,使其成為自己的財(cái)富。在理論學(xué)習(xí)和上機(jī)實(shí)踐的各個(gè)環(huán)節(jié)中,通過(guò)自主學(xué)習(xí)和認(rèn)真聽(tīng)老師講課分析,我收獲了不少。當(dāng)然也遇到不少的問(wèn)題,也正是因?yàn)檫@些問(wèn)題引發(fā)的思考給我?guī)Я耸斋@。從當(dāng)初不喜歡上機(jī)寫程序到現(xiàn)在能主動(dòng)寫程序,從當(dāng)初拿著程序不只如何下手到現(xiàn)在知道如何分析問(wèn)題,如何用專業(yè)知識(shí)解決實(shí)際問(wèn)題的轉(zhuǎn)變,我發(fā)現(xiàn)無(wú)論是專業(yè)知識(shí)還是動(dòng)手能力,自己都有很大程度的提高。在這段時(shí)間里,我對(duì)for、while等的循環(huán)函數(shù)用法更加熟悉,逐漸形成了較好的編程習(xí)慣。在老師的指導(dǎo)幫助下,同學(xué)們課余時(shí)間的討論中,這些問(wèn)題都一一得到了解決。在程序的調(diào)試能力上,無(wú)形中得到了許多的提高。例如:頭文件的使用,變量和數(shù)組的范圍問(wèn)題,定義變量時(shí)出現(xiàn)的問(wèn)題等等。在實(shí)際的上機(jī)操作過(guò)程中,不僅是讓我們了解數(shù)據(jù)結(jié)構(gòu)的理論知識(shí),更重要的是培養(yǎng)解決實(shí)際問(wèn)題的能力,所以相信通過(guò)此次實(shí)習(xí)可以提高我們分析設(shè)計(jì)能力和編程能力,為后續(xù)課程的學(xué)習(xí)及實(shí)踐打下良好的基礎(chǔ)。時(shí)間過(guò)得真快,大學(xué)生活不知不覺(jué)就走過(guò)了一學(xué)期,這一學(xué)期的大學(xué)學(xué)習(xí)和課程實(shí)踐階段的提高,使我們本身知識(shí)得到提高的同時(shí),也增強(qiáng)了我們對(duì)未來(lái)工作的信心,我們相信自己未來(lái)兩年半的學(xué)習(xí)更使我們有能力勝任將來(lái)的工作。附錄通訊錄源程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>structrecord{charname[20];charstreet[20];charcity[20];chareip[20];//郵編charstate[20];}people[500];//500個(gè)記錄,可修改structpnode{recorddata;structpnode*next,*prior;//雙循環(huán)鏈表};typedefpnode*linklist;linklistl;intlen=0;//鏈表長(zhǎng)度FILE*fp;//文件指針voidmainmenu();//主菜單voidsearchmenu();//查詢菜單voidenter();//添加新紀(jì)錄voidsearch();//按條件搜索記錄voiddisplay();//顯示全部記錄voidload();//載入文件內(nèi)容voidsave();//寫入文件voiddel();//刪除記錄voidlistinsert();//插入結(jié)點(diǎn)函數(shù)voidinitlist();//初始化鏈表函數(shù)voidmain()//主函數(shù){initlist();load();listinsert();while(1)mainmenu();//進(jìn)入主菜單,有非法輸入仍停留在主菜單}voidinitlist()//鏈表初始化函數(shù){l=(linklist)malloc(sizeof(pnode));//動(dòng)態(tài)申請(qǐng)內(nèi)存l->next=l;l->prior=l;}voidload()//裝載已有文件信息{if((fp=fopen("txl.txt","rb"))==NULL){printf("\n\t\t通訊錄文件不存在");if((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t建立失敗");exit(0);}else{printf("\n\t\t通訊錄文件已建立");printf("\n\t\t按任意鍵進(jìn)入主菜單");getch();return;}exit(0);}//導(dǎo)入文件功能部分fseek(fp,0,2);if(ftell(fp)>0){rewind(fp);for(len=0;!feof(fp)&&fread(&people[len],sizeof(structrecord),1,fp);len++);printf("\n\t\t文件導(dǎo)入成功");printf("\n\t\t按任意鍵返回主菜單");getch();return;}printf("\n\t\t文件導(dǎo)入成功");printf("\n\t\t通訊錄文件中無(wú)任何紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return;}voidlistinsert()//增加新結(jié)點(diǎn){linklists,p=l;for(inti=0;i<len;i++){s=(linklist)malloc(sizeof(pnode));strcpy(s->,people[i].name);strcpy(s->data.city,people[i].city);strcpy(s->data.street,people[i].street);strcpy(s->data.eip,people[i].eip);strcpy(s->data.state,people[i].state);s->prior=p->prior;s->next=p;p->prior->next=s;p->prior=s;p=p->next;}}voidmainmenu()//主菜單{charch;system("cls");printf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\t");歡迎進(jìn)入通訊錄系統(tǒng)");1-新添紀(jì)錄");2-查找聯(lián)系人");3-刪除聯(lián)系人");4-保存5-退出");");printf("\n\t\t請(qǐng)選擇:");printf("%c",ch=getch());switch(ch){case'1':enter();break;case'2':searchmenu();break;case'3':del();break;case'4':save();break;case'5':exit(0);default:mainmenu();}}voidenter()//添加新紀(jì)錄{printf("\n\t\t****************請(qǐng)輸入學(xué)生信息****************\n");printf("\n\t\t姓名:");scanf("%s",&people[len].name);printf("\n\t\t街道:");scanf("%s",&people[len].street);printf("\n\t\t城市:");scanf("%s",&people[len].city);printf("\n\t\t郵編:");scanf("%s",&people[len].eip);printf("\n\t\t國(guó)家:");scanf("%s",&people[len].state);len++;printf("\n\t\t是否繼續(xù)添加?(Y/N):");if(getch()=='y')enter();return;}voidsearchmenu()//查詢菜單{charch;system("cls");printf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\tprintf("\n\t\t");查詢菜單");1-顯示所有記錄");2-按姓名查詢");3-返回主菜單");printf("\n\t\t請(qǐng)選擇:");printf("%c",ch=getch());switch(ch){case'1':display();break;case'2':search();break;case'3':mainmenu();break;}}voidsearch(){printf("\n\t\t*****************按姓名查找*******************");charname[20];printf("\n\t\t請(qǐng)輸入姓名:");scanf("%s",name);printf("查詢到的信息:\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","郵編","國(guó)家");//格式控制輸出printf("-----------------------------------------------------------------------------\n");for(inti=0;i<len;i++){if(strcmp(name,people[i].name)==0)printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);if(i+1<len)continue;//重名紀(jì)錄再檢索}printf("-----------------------------------------------------------------------------\n");printf("\n\t\t按任意鍵返回查詢菜單");getch();searchmenu();}voiddisplay()//顯示所有紀(jì)錄{inti;system("cls");if(len!=0){printf("\n\t\t***************以下為通訊錄所有信息************\n\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","郵編","國(guó)家");printf("-----------------------------------------------------------------------------\n");for(i=0;i<len;i++){printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);if(i+1<len)continue;}printf("-----------------------------------------------------------------------------\n");}elseprintf("\n\t\t通訊錄中無(wú)任何紀(jì)錄");printf("\n\t\t按任意鍵返回查詢菜單:");getch();searchmenu();}voiddel()//刪除紀(jì)錄{inta=0,i,j,findmark;//findmark為查找結(jié)果標(biāo)志//intfindmark=0,delmark=0;charname[20];printf("\n\t\t請(qǐng)輸入要?jiǎng)h除學(xué)生姓名:");scanf("%s",name);for(i=a;i<len;i++){if(findmark=strcmp(people[i].name,name)==NULL)//找到一條符合條件的記錄{//findmark++;printf("\n\t\t以下是您要?jiǎng)h除的學(xué)生紀(jì)錄:\n");printf("%-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","郵編","國(guó)家");printf("-----------------------------------------------------------------------------\n");printf("%-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state);printf("-----------------------------------------------------------------------------\n");printf("\n\t\t是否刪除?(y/n)");if(getch()=='y'){for(j=i;j<len-1;j++)people[j]=people[j+1];len--;i--;//delmark++;printf("\n\t\t刪除成功");if((i+1)<len){printf("\n\t\t是否繼續(xù)刪除相同姓名的同學(xué)信息?(y/n)");//是否刪除同名紀(jì)錄if(getch()=='y'){a=i;continue;//刪除上一條記錄之后搜索是否有同名紀(jì)錄}}}//endifif((i+1)<len){printf("\n\t\t是否繼續(xù)刪除相同姓名的同學(xué)信息?(y/n)");//不刪前一條紀(jì)錄,刪當(dāng)前紀(jì)錄if(getch()=='y'){a=i;continue;}}}//endifelsecontinue;}//endforif(!findmark)//沒(méi)有找到任何符合條件的記錄printf("\n\t\t沒(méi)有符合條件的記錄!");printf("\n\t\t是否繼續(xù)刪除?(y/n)");//無(wú)同名紀(jì)錄,是否繼續(xù)刪除其他紀(jì)錄if(getch()=='y')del();//繼續(xù)刪除其他紀(jì)錄}voidsave()//寫入文件{inti;if((fp=fopen("txl.txt","wb"))==NULL){printf("\n\t\t文件打開(kāi)失敗");}for(i=0;i<len;i++){if(fwrite(&people[i],sizeof(structrecord),1,fp)!=1)printf("\n\t\t寫入文件錯(cuò)誤!\n");}fclose(fp);//關(guān)閉文件指針printf("\n\t\t通訊錄文件已保存,按任意鍵繼續(xù)...");getch();return;}迷宮求解源程序#include<stdlib.h>#include<stdio.h>#defineN39#defineM39intX;intmaze[N+2][M+2];structpoint{introw,col,predecessor;}queue[512];inthead=0,tail=0;voidshoudong_maze(intm,intn){inti,j;printf("\n\n");printf("請(qǐng)按行輸入迷宮,0表示通路,1表示障礙:\n\n");for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&maze[i][j]);}voidzidong_maze(intm,intn){inti,j;printf("\n迷宮生成中……\n\n");system("pause");for(i=0;i<m;i++)for(j=0;j<n;j++)maze[i][j]=rand()%2;//由于rand()產(chǎn)生的隨機(jī)數(shù)是從0到RAND_MAX(最大)//RAND_MAX是定義在stdlib.h中的,其值至少為32767)//要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫:k=rand()%(Y-X+1)+X;}voidprint_maze(intm,intn){inti,j;printf("\n迷宮生成結(jié)果如下:\n\n");printf("迷宮入口\n");printf("↓");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0)printf("□");if(maze[i][j]==1)printf("■");}}printf("→迷宮出口\n");}voidresult_maze(intm,intn){inti,j;printf("迷宮通路(用☆表示)如下所示:\n\t");for(i=0;i<m;i++){printf("\n");for(j=0;j<n;j++){if(maze[i][j]==0||maze[i][j]==2)printf("□");if(maze[i][j]==1)printf("■");if(maze[i][j]==3)printf("☆");}}}voidenqueue(structpointp){queue[tail]=p;tail++;}structpointdequeue(){head++;returnqueue[head-1];}intis_empty(){returnhead==tail;}voidvisit(introw,intcol,intmaze[41][41]){structpointvisit_point={row,col,head-1};maze[row][col]=2;enqueue(visit_point);}intmgpath(intmaze[41][41],intm,intn){X=1;structpointp={0,0,-1};if(maze[p.row][p.col]==1){printf("\n===============================================\n");printf("此迷宮無(wú)解\n\n");X=0;return0;}maze[p.row][p.col]=2;enqueue(p);while(!is_empty()){p=dequeue();if((p.row==m-1)&&(p.col==n-1))break;if((p.col+1<n)&&(maze[p.row][p.col+1]==0))visit(p.row,p.col+1,maze);if((p.row+1<m)&&(maze[p.row+1][p.col]==0))visit(p.row+1,p.col,maze);if((p.col-1>=0)&&(maze[p.row][p.col-1]==0))visit(p.row,p.col-1,maze);if((p.row-1>=0)&&(maze[p.row-1][p.col]==0))visit(p.row-1,p.col,maze);}i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 怎樣與乙方簽合同協(xié)議書
- 玻璃杯倉(cāng)儲(chǔ)合同協(xié)議書
- 工作合同協(xié)議書營(yíng)業(yè)員
- 擔(dān)保借款合同協(xié)議書范本
- 租地開(kāi)店合同協(xié)議書模板
- 師生醫(yī)護(hù)員工合同協(xié)議書
- 財(cái)稅服務(wù)合同補(bǔ)充協(xié)議書
- 辦公門安裝合同協(xié)議書
- 石材清洗工程合同協(xié)議書
- 公司叉車銷售合同協(xié)議書
- 國(guó)際經(jīng)濟(jì)與金融合作中的文化差異與應(yīng)對(duì)策略
- 精準(zhǔn)結(jié)直腸癌外科診療專家共識(shí)(2025版)解讀
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度
- 西方文論經(jīng)典導(dǎo)讀智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 中國(guó)居民膳食指南(全)
- 四川省職工住房補(bǔ)貼實(shí)施辦法
- 遼寧醫(yī)院明細(xì).xls
- JYC全自動(dòng)變頻抗干擾介質(zhì)損耗測(cè)試儀
- 報(bào)考廣東警官學(xué)院考生政審表
- 綜合辦公室安全工作職責(zé)
- 質(zhì)量環(huán)境及職業(yè)健康安全管理手冊(cè)
評(píng)論
0/150
提交評(píng)論