資源描述:
《馬踏棋盤數(shù)據(jù)結(jié)構(gòu)報(bào)告》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、11225104張程浩馬踏棋盤數(shù)據(jù)結(jié)構(gòu)《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目:馬踏棋盤姓名:張程浩院系:通信工程專業(yè):信息安全年級:2011學(xué)號:11225104指導(dǎo)教師:任雪萍2012年11月26日(任雪萍編寫)811225104張程浩馬踏棋盤數(shù)據(jù)結(jié)構(gòu)目錄一、課程設(shè)計(jì)目的3二、任務(wù)分析3三、分析設(shè)計(jì)3四、調(diào)試分析5五、測試結(jié)果5六、小結(jié)6七、用戶手冊6八、附錄6九、參考文獻(xiàn)8811225104張程浩馬踏棋盤數(shù)據(jù)結(jié)構(gòu)一、課程設(shè)計(jì)目的(1)熟練使用C語言編寫程序,強(qiáng)化模塊設(shè)計(jì)理念;(2)設(shè)計(jì)一個國際象棋馬踏棋盤的演示程序。(3)理解棧的特性“后進(jìn)先出”和隊(duì)列的特性“先進(jìn)先出
2、”。(4)初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能;二、任務(wù)分析(1)要求:在國際象棋8×8棋盤上面,按照國際象棋規(guī)則中馬的行進(jìn)規(guī)則,實(shí)現(xiàn)從任意初始位置,每個方格只進(jìn)入一次,走遍棋盤上全部64個方格。編制程序,求出馬的行走路線,并按求出的行走路線,將數(shù)字1,2,…,64依次填入一個8×8的方陣,并輸出它的行走路線。(2)輸入:任意一個起始位置;輸出:無重復(fù)踏遍棋盤的結(jié)果,以數(shù)字1-64表示行走路線。三、分析設(shè)計(jì)l需要處理的數(shù)據(jù)的邏輯結(jié)構(gòu):線性結(jié)構(gòu)l合適的存儲結(jié)構(gòu):順序儲存l設(shè)計(jì)好的數(shù)據(jù)類型:#defineBS8//棋盤大小typedefi
3、ntStatus;intstep;intboard[8][8]={0};//定義棋盤intmayway[9];//儲存可能的路徑intHtry1[8]={-2,-1,1,2,2,1,-1,-2},Htry2[8]={1,2,2,1,-1,-2,-2,-1};/*存儲馬各個出口位置相對當(dāng)前位置列下標(biāo)的增量數(shù)組*/typedefstruct{//位置存儲表達(dá)方式inti;//行坐標(biāo)intj;//列坐標(biāo)intfrom;//存儲下一步所選方向}SElemType;typedefstruct{SElemType*base;//在棧構(gòu)造之前和銷毀之后,base的值為NULLSEle
4、mType*top;//棧頂指針intstacksize;//當(dāng)前已經(jīng)分配的儲存空間,以元素為單位}Stack;StackPath;l本程序包含模塊:1、主程序模塊:voidmain(){定義變量;接受命令;處理命令;退出;}輸入的初始位置是否正確主程序模塊起始坐標(biāo)函數(shù)模塊探尋路徑函數(shù)模塊結(jié)束輸出路徑函數(shù)模塊塊是否2、起始坐標(biāo)函數(shù)模塊——馬兒在棋盤上的起始位置;3、探尋路徑函數(shù)模塊——馬兒每個方向進(jìn)行嘗試,直到試完整個棋盤;4、輸出路徑函數(shù)模塊——輸出馬兒行走的路徑;各模塊之間的調(diào)用關(guān)系:811225104張程浩馬踏棋盤數(shù)據(jù)結(jié)構(gòu)l與功能對應(yīng)的模塊劃分定義://構(gòu)造一個空
5、棧SStatusInitStack(Stack&s);//若棧不空,則用e返回s的棧頂元素,返回OK;否則返回ERRORStatusGetTop(Stacks,SElemType&e);//插入元素e為新的棧頂元素StatusPush(Stack&s,SElemTypee);//若棧不空,則刪除s的棧頂元素,并用e返回其值,并返回OK;否則返回ERRORStatusPop(Stack&s,SElemType&e);//從棧底到棧頂依次對棧中每個元素輸出。StatusStackTraverse(Stacks);//若當(dāng)前坐標(biāo)在有效棋盤內(nèi)返回OK;否則返回ERRORStat
6、usInBoard(inti,intj);//貪心法判斷下一步的可能選位置,并把可選的最佳位置依次存入mayway,并返回OK;//若找不到位置返回ERRORStatusTryPath(SElemTypes,intmayway[]);StatusNextPath(SElemType&cur,intmayway[]);l函數(shù)調(diào)用關(guān)系:811225104張程浩馬踏棋盤數(shù)據(jù)結(jié)構(gòu)四、調(diào)試分析1、調(diào)試中的問題(1)調(diào)試問題:本程序設(shè)計(jì)過程中采用多文件組件工程的方式進(jìn)行。在頭文件中定義了全局變量,解決方案:將全局變量定義為staic型變量?;蛘咴诼暶髦惺褂胑xtern關(guān)鍵字(2)調(diào)
7、試問題:雖然編譯都能通過,但是運(yùn)行時卻出錯,程序不能終止,只有通過人工方式結(jié)束程序,可能是在某些地方出現(xiàn)了無限死循環(huán)了,馬兒回溯的時候,下一次又有可能走那個方向,這樣就出現(xiàn)了死循環(huán)。解決方案:標(biāo)記馬兒選擇的方向director。在結(jié)點(diǎn)結(jié)構(gòu)設(shè)計(jì)上加入director(3)調(diào)試問題:在調(diào)試過程中,對變量的監(jiān)視發(fā)現(xiàn)棧頂元素中director無法更新,我原本的程序代碼設(shè)計(jì)是cur.director=k解決方案:(Path.top-1)->from=k;//保存下一步所選最佳路徑下標(biāo)(4)調(diào)試問題:當(dāng)走到邊界時,有可走的路,但是程序卻回溯了。解決方