數據結構課設任務書_第1頁
數據結構課設任務書_第2頁
數據結構課設任務書_第3頁
數據結構課設任務書_第4頁
數據結構課設任務書_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

評論

0/150

提交評論