版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 課程名稱: 計算機技術(shù)基礎 </p><p> 系 部: 電氣與信息工程學院 </p><p> 專業(yè)班級: </p><p> 學 號:
2、 </p><p> 學生姓名: </p><p> 指導教師: </p><p> 完成時間: 2009.10.14 </p><p> 報告成績:
3、 </p><p><b> 迷宮通路問題</b></p><p><b> 一.設計要求</b></p><p> 通過游戲程序設計,提高編程興趣與編程思路,鞏固C語言中所學的知識,合理的運用資料,實現(xiàn)理論與實際相結(jié)合。</p><p> ?。?).收集資料,分析課題,分解問題,形成總體設計
4、思路;</p><p> ?。?).深入分析各個小問題,列出大綱,編寫各部分程序模塊;</p><p> (3).對于設計中用到的關鍵函數(shù),要學會通過查資料,弄懂其用法,要聯(lián)系問題進行具體介紹;</p><p> ?。?).上機調(diào)試,查錯,逐步分析不能正常運行的原因,確保所設計的程序正確,并且能正常運行;</p><p> ?。?).完成課
5、程設計報告,并進行答辯。</p><p><b> 二.設計目的</b></p><p> 通過游戲程序的設計訓練和提高學生的基本技能,掌握字符串的表示方法和字符串函數(shù)的功能、Turbo C圖形操作的基本知識、鍵盤上特殊鍵的獲取以及圖形方式下光標的顯示,提高編程興趣與編程水平,學會如何正確的書寫程序設計說明文檔,提高運用C語言解決實際問題的能力,鞏固C語言語法規(guī)則
6、的理解和掌握,學會通過源程序?qū)懗隽鞒虉D,提高自學以及查閱資料的能力。</p><p><b> 三. 問題描述</b></p><p> 以一個m x n的長方矩陣表示迷宮,1和0分別表示迷宮中的通路和障礙。設計一個程序,對任意設定的迷宮,求出從入口到出口的通路,或者沒有通路的結(jié)論。</p><p> 四、
7、0; 需析求分?</p><p> 1、 以二維數(shù)組migong[M][N]表示迷宮,其中migong[0][j]和migong[i][0](0<=j,i<=N)為添加的一圈障礙。數(shù)組中以元素1表示通路,0表示障礙,迷宮的大小理論上可以不限制。</p><p> 2、
8、 迷宮數(shù)據(jù)由程序提供,用戶只需要進行選擇迷宮就行。迷宮的入口和出口由程序提供。</p><p> 3、 若設定的迷宮存在通路,則以長方形矩陣的形式將迷宮及其通路輸出到標準終端上,其中“0”表示障礙,“2”表示通過的路徑,“3”表示死胡同,沒有顯示的區(qū)域表示沒有到達過的地方。</p><p> 4、
9、60; 本程序只求出一條成功的通路。但是只要對函數(shù)進行小量的修改,就可以求出其他全部的路徑。</p><p> 5、 程序執(zhí)行命令為:(1)、創(chuàng)建迷宮;(2)、求解迷宮;(3)、輸出迷宮。</p><p><b> 五、 概要設計</b&g
10、t;</p><p> 1、 設定棧的抽象數(shù)據(jù)類型定義:</p><p><b> ADT zhan{</b></p><p> 數(shù)據(jù)對象:D={ai|ai屬于yanshu,i=1、2…n,n>0}</p><p> 數(shù)據(jù)關系:R={<ai-1,ai>|ai-1,ai屬于D,i=2,3,…n}&
11、lt;/p><p><b> 基本操作:</b></p><p> gouzhan(*s,*migong)</p><p> 操作結(jié)果:構(gòu)造一個空棧</p><p> push(*s,*e)</p><p> 初始條件:棧已經(jīng)存在</p><p> 操作結(jié)果:將e所
12、指向的數(shù)據(jù)加入到棧s中</p><p> pop(*s,*e)</p><p> 初始條件:棧已經(jīng)存在</p><p> 操作結(jié)果:若棧不為空,用e返回棧頂元素,并刪除棧頂元素</p><p> getpop(*s,*e)</p><p> 初始條件:棧已經(jīng)存在</p><p> 操
13、作結(jié)果:若棧不為空,用e返回棧頂元素</p><p> popover(*s)</p><p> 初始條件:棧已經(jīng)存在</p><p> 操作結(jié)果:輸出棧中的所有元素,同時清空棧</p><p> stackempty(*s)</p><p> 初始條件:棧已經(jīng)存在</p><p>
14、 操作結(jié)果:判斷棧是否為空。若棧為空,返回1,否則返回0</p><p> destroy(*s)</p><p> 初始條件:棧已經(jīng)存在</p><p><b> 操作結(jié)果:銷毀棧s</b></p><p><b> }ADT zhan</b></p><p>
15、2、 設定迷宮的抽象數(shù)據(jù)類型定義</p><p> ADT yanshu{</p><p> 數(shù)據(jù)對象:D={ai,j|ai,j屬于{‘ ’、‘0’、‘2’、‘3’},0<=i<=M,0<=j<=N}</p><p> 數(shù)據(jù)關系:R={ROW,COL}</p><p> ROW={<ai-1,j,ai,j
16、>|ai-1,j,ai,j屬于D,i=1,2,…M,j=0,1,…N}</p><p> COL={<ai,j-1,ai,j>|ai,j-1,ai,j屬于D,i=0,1,…M,j=1,2,…N}</p><p><b> 基本操作:</b></p><p> gouzhaomigong(*migong,m,n)</
17、p><p> 初始條件:二維數(shù)組migong[m][n]已經(jīng)存在,其中第1至第m-1行,每行自第1到第n-1列的元素已經(jīng)值,并以值0表示障礙,值1表示通路。</p><p> 操作結(jié)果:構(gòu)造迷宮的字符數(shù)組,以空白表示通路,字符‘0’表示障礙,并在迷宮四周加上一圈障礙。</p><p> markprint(*seat)</p><p>
18、初始條件:迷宮中的所有坐標seat都已經(jīng)被賦值</p><p> 操作結(jié)果:若迷宮中該坐標能夠通過且已經(jīng)通過,則標記為2,若不能夠通過(死胡同),標記為3。</p><p> shuchu(*migong,n)</p><p> 初始條件:迷宮已經(jīng)存在</p><p> 操作結(jié)果:以字符形式輸出迷宮</p><p&
19、gt; }ADT yanshu</p><p> 3、 本程序包括三個模塊</p><p><b> a、 主程序模塊</b></p><p> void main()</p><p><b> {</b></p><p><b> 初始化;</b
20、></p><p><b> 構(gòu)造迷宮;</b></p><p><b> 迷宮求解;</b></p><p><b> 迷宮輸出;</b></p><p><b> }</b></p><p> b、 棧模塊——實
21、現(xiàn)棧的抽象數(shù)據(jù)類型</p><p> c、 迷宮模塊——實現(xiàn)迷宮的抽象數(shù)據(jù)類型</p><p><b> 六、 詳細設計</b></p><p><b> 1、 坐標位置類型</b></p><p> #define zuobiao int</p>&l
22、t;p> zuobiao migong[M][N];</p><p><b> 2、 迷宮類型</b></p><p> typedef struct yanshu</p><p><b> {</b></p><p> int xuhao; //序號</p><
23、p> zuobiao *seat; //棧元素的坐標</p><p> int fangxiang; //要查找的方向</p><p><b> }yanshu;</b></p><p><b> 3、 棧類型</b></p><p> typedef struct zhan<
24、/p><p><b> {</b></p><p> yanshu *base; //棧構(gòu)造之前和銷毀之后base的值均為NULL</p><p> yanshu *top;//棧頂指針</p><p> int size; //當前分陪的存儲空間的長度,單位:元素</p><p><b
25、> }zhan;</b></p><p><b> 七、 偽代碼 </b></p><p> 1、 主函數(shù)</p><p> void main()</p><p><b> {</b></p&
26、gt;<p><b> 變量的定義;</b></p><p> gouzhaomigong(migong,M,N); //構(gòu)造一個迷宮</p><p> shuchu(migong,M,N); //將該構(gòu)造好的迷宮輸出</p><p> tansuo(weizhi,&migong[1][1],&migong
27、[M-2][N-2]); //探索迷宮</p><p> shuchu(migong,M,N); //輸出探索出來的迷宮</p><p><b> }</b></p><p> 2、 迷宮構(gòu)造</p><p> void gouzhaomigong(zuobiao
28、migong[M][N],int M,int N)</p><p> { //該函數(shù)是用來構(gòu)造一個迷宮,通過更改還能夠構(gòu)造其他類型迷宮</p><p> 定義變量 a,b,c,i,k;</p><p> i=n/3-1;k=/2;a=k-2;</p><p> if(k*2==n) b=k;</p><p>
29、 else b=k+1;</p><p> for(a=0;a<b;a++)</p><p><b> {</b></p><p> for(c=0;c<k;c++)</p><p><b> {</b></p><p> migong[a][c]=0;
30、 migong[n-a][c]=0;</p><p> migong[a][n-c-1]=0; migong[n-a][n-c-1]=0;</p><p> migong[c][a]=0; migong[c][n-c-1]=0;</p><p> migong[n-c-1][n-a-1]=0; migong[n-c-1][a]=0;</p>&l
31、t;p><b> }</b></p><p> if(a==b-1&&c!=1)</p><p><b> {</b></p><p> migong[a][c]=0; migong[a][n-c-1]=0;</p><p> migong[n-c-1][n-a-1]
32、=0; migong[c][n-a-a]=0;</p><p><b> }</b></p><p><b> }</b></p><p> migong[1][i]=1; migong[k-2][i]=1;</p><p> migong[1][n-i-1]=1; migong[i][k+
33、1]=1;</p><p> migong[n-2][i]=1; migong[n-i][k+1]=1; migong[n-i][n-2]=1;</p><p><b> }</b></p><p> 3、 棧的操作</p><p> zhan *gouzhan(z
34、han *s,zuobiao *migong) //構(gòu)造一個棧</p><p><b> {</b></p><p> s->base=分配一定空間;</p><p> s->top=s->base;</p><p> s->top->seat=s->base->seat
35、=migong;</p><p> s->top->fangxiang=0; s->top->xuhao=0;</p><p><b> return s;</b></p><p><b> }</b></p><p> void push(zhan *s,yansh
36、u *e) //將e所指向的元素加入到棧中</p><p><b> {</b></p><p><b> if(空間不足)</b></p><p> 分配連續(xù)空間,給各值賦值;</p><p> s->top++; s->top->seat=e->seat;<
37、/p><p> s->top->fangxiang=e->fangxiang+1;</p><p> s->top->xuhao=e->xuhao;</p><p><b> }</b></p><p> yanshu *pop(zhan *s,yanshu *e)//棧不為空,刪
38、除棧頂元素,用e返回</p><p><b> {</b></p><p> if(??? retrun NULL;</p><p> e->seat=s->top-seat; e->seat--;</p><p> e->fangxiang=s->top->fangxiang
39、;</p><p> e->xuhao=s->top-xuhao; s->top--; return e;</p><p><b> }</b></p><p> yanshu *gettop(zhan *s,yanshu *e)// 用e返回棧頂元素,不刪除</p><p><b>
40、 {</b></p><p> if(棧為空) return NULL;</p><p> e->seat=s->top->seat; e->seat=s-top->seat;</p><p> e->xuhao=s->top->xuhao; return e;</p><p>
41、;<b> }</b></p><p> int stackempty(zhan *s) //判斷棧是否為空</p><p><b> {</b></p><p> if(s->top==s->base) return 1;</p><p> else return 0;<
42、;/p><p><b> }</b></p><p> void popover(zhan *s) //輸出棧中的所有元素,同時清空棧</p><p><b> {for(;;)</b></p><p><b> {</b></p><p> e=
43、pop(s,e);</p><p> if(s->top-s->base==0) return;</p><p><b> }</b></p><p><b> }</b></p><p> 八.系統(tǒng)程序結(jié)構(gòu)及流程圖 不規(guī)范!還要繼續(xù)修改。</p><p>
44、; 4、 求解迷宮中的一條路徑</p><p> void tansuo(yanshu weizhi,zuobiao *rukou,zuobiao *chukou)</p><p> { //若迷宮weizhi中存在從rukou到chukou的通道,則求出其中一條</p><p> 定義和初始化所需要的變量;&
45、lt;/p><p> gouzhan(s,curpos);//</p><p><b> do{</b></p><p> if(pass(curpos))//當前位置可以通過,即未曾走過的模塊</p><p><b> {</b></p><p> e=zuhe(cu
46、rstep,curpos,0);//組合成一個元素</p><p> push(s,e);//加入到路徑棧中</p><p> if(e->seat==chukou) braek; //到達終端</p><p> curpos=nestpos1(curpos,0);//下一位置是當前位置的東臨位</p><p> curstep
47、++; //探索下一步</p><p><b> }</b></p><p><b> else{</b></p><p> if(!=stackempty(s))//如果棧不空</p><p> { e=pop(s,e);</p><p> while(e-<
48、;fangxiang==4&&!=stackempty(s))</p><p> { markprint(e->seat);//留下不能通過標記,退一步</p><p> e=pop(s,e);</p><p><b> }</b></p><p> if(e->fangxiang&l
49、t;4)</p><p> { push(s,e); //探索下一方向</p><p> curpos=nextpos1(e->seat,e->fangxiang);</p><p> //設定當前位置是新方向上的相鄰模塊</p><p><b> }</b></p><p>
50、<b> }</b></p><p> }while(!stackempty(s));</p><p><b> return;</b></p><p><b> }</b></p><p> 5、 迷宮的輸出顯示<
51、;/p><p> void shuchu(zuobiao migong[M][N],intm,int n)</p><p> { //給出迷宮的行列數(shù)和首地址,輸出迷宮矩陣</p><p> for(i=0;i<M;i++)</p><p> {for(j=0;j<N;j++)</p><p> i
52、f(migong[i][j]==1) printf(“ “);</p><p> else printf(“%d”,migong[i][j]);</p><p> printf(“\n”);</p><p><b> }</b></p><p><b> }</b></p>&
53、lt;p> 九、 源代碼(省略)</p><p> 十、 調(diào)試結(jié)果和分析</p><p> 十一.設計心得體會 整篇文檔的字間距應整齊一致!</p><p> 課程設計使我學到了很多書本以外的東西,同時也提高了查閱資料的能力以及解決問題的能力,培養(yǎng)培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題
54、,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程。熟練掌握TC集成環(huán)境的使用方法。認真編寫實習報告和實習總結(jié),描述實習操作和心得體會,總結(jié)在這次實習中的業(yè)務收獲,作出自我評價。熟練掌握并應用TC程序設計的各個知識點。掌握結(jié)構(gòu)體和指針的聯(lián)合使用,學會鏈表的構(gòu)造和常用操作方法,認真編寫實習日志和實習體會。并通過各種途徑查找所需資料,拓寬視野,培養(yǎng)自學能力。也懂得了理論與實際相結(jié)合的重要性,只有理論知識是遠遠不夠的,只有把所
55、學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。</p><p> 在做這次課程設計的時候,遇到這樣那樣的麻煩,因此,我也得到了許多寶貴的經(jīng)驗:</p>&
56、lt;p> 1、在設計程序之前,務必要對你所設計的題目和內(nèi)容有一個系統(tǒng)的了解,知道所設計的題目和內(nèi)容包含那些資源。</p><p> 2、設計程序采用什么編程語言并不是非常重要,關鍵要有一個清晰的思路和一個完整的軟件流程圖,因而,要先把設計原理與思路搞清楚,再把流程圖畫出來,這樣設計起來就簡單多了。</p><p> 3、在設計程序時,不能妄想一次就將整個程序設計好,“反復修改
57、,不斷改進”是程序設計的必經(jīng)之路,發(fā)現(xiàn)錯誤也是取得成績的一種。</p><p> 4、要養(yǎng)成注釋程序的好習慣,一個程序的完美與否不僅僅是實現(xiàn)功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便。</p><p> 5、在設計程序過程中遇到問題是很正常的,但我們應該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題。</p><p>
58、; 在14天編程的過程當中彌補了我許多知識上的缺陷,弄清楚了我不懂的地方和似是而非的地方,使我及時補上了欠缺。其次,通過14天綜合實訓編程使我的知識形成了一個完整的框架結(jié)構(gòu),而不再是零散的知識個體,使我在使用時更加的方便。在14天的實習結(jié)束后,我對做完的習題檢查比再是一切的走馬觀花,而是仔細核對、認真檢查。這也改變了我做題時心煩氣燥的習慣,現(xiàn)在做題可以平和靜氣的完成。我的自制能力更強了,基本完全可以控制自己,避免外界的干擾,安心地完成
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 迷宮問題課程設計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設計迷宮問題課程設計報告
- 迷宮課程設計報告
- 迷宮課程設計報告
- 迷宮問題——數(shù)據(jù)結(jié)構(gòu)課程設計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告---迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計報告----迷宮問題
- c語言課程設計--迷宮問題
- 課程設計(迷宮)
- 數(shù)據(jù)結(jié)構(gòu)課程設計(迷宮問題)
- 數(shù)據(jù)結(jié)構(gòu)課程設計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計--迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計—迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計---迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計---迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設計-迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)迷宮問題課程設計
評論
0/150
提交評論