版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 1 前言1</b></p><p><b> 2 需求分析2</b></p><p> 2.1 課程設(shè)計目的2</p><p> 2.2 課程設(shè)計任務(wù)2</p><p&g
2、t; 2.3 設(shè)計環(huán)境2</p><p> 2.4 開發(fā)語言2</p><p><b> 3 分析和設(shè)計2</b></p><p> 3.1 模塊設(shè)計2</p><p> 3.2 系統(tǒng)流程圖3</p><p> 3.3 主要模塊的流程圖7</p><p&
3、gt; 4 具體代碼實現(xiàn)11</p><p> 5 課程設(shè)計總結(jié)22</p><p> 5.1 程序運行結(jié)果22</p><p> 5.2 課程設(shè)計體會23</p><p><b> 參考文獻23</b></p><p><b> 致 謝23</b>
4、</p><p><b> 1 前言</b></p><p> 本課程設(shè)計是關(guān)于數(shù)據(jù)結(jié)構(gòu)和棧道的基本操作,使用c語言編程,定義合適的數(shù)據(jù)結(jié)構(gòu),對已經(jīng)學(xué)習(xí)的c語言的指針,數(shù)據(jù)結(jié)構(gòu)和棧道加以了解。對于程序設(shè)計課程的運用和學(xué)習(xí)。</p><p><b> 2 需求分析</b></p><p> 2
5、.1 課程設(shè)計目的</p><p> 學(xué)生在教師指導(dǎo)下運用所學(xué)課程的知識來研究、解決一些具有一定綜合性問題的專業(yè)課題。通過課程設(shè)計(論文),提高學(xué)生綜合運用所學(xué)知識來解決實際問題、使用文獻資料、及進行科學(xué)實驗或技術(shù)設(shè)計的初步能力,為畢業(yè)設(shè)計(論文)打基礎(chǔ)。</p><p> 2.2 課程設(shè)計任務(wù)</p><p> 給出迷宮的入口和出口及相關(guān)的通路,求出從入口到
6、出口的路徑。要求使用C語言編程,定義合適的數(shù)據(jù)結(jié)構(gòu)。最后,需要說明設(shè)計思想,同時給出能夠運行的源程序,并給出對應(yīng)的程序流程圖</p><p><b> 2.3 設(shè)計環(huán)境</b></p><p> ?。?)WINDOWS 2000/2003/XP/7/Vista系統(tǒng)</p><p> ?。?)Visual C++或TC集成開發(fā)環(huán)境</p&
7、gt;<p><b> 2.4 開發(fā)語言</b></p><p><b> C語言</b></p><p><b> 3 分析和設(shè)計</b></p><p><b> 3.1 模塊設(shè)計</b></p><p> 定義SHU、MG結(jié)構(gòu)
8、體類型, 產(chǎn)生記憶效果,以及用線性鏈表來進行地圖更改。</p><p> typedef struct shuju{</p><p><b> int data;</b></p><p> int flag; /*判斷這個位置是否被走過,使其產(chǎn)生記憶效果*/</p><p><b
9、> }SHU;</b></p><p> typedef struct maze{</p><p><b> int c;</b></p><p><b> int flag;</b></p><p> int direct;</p><p>&l
10、t;b> int x;</b></p><p><b> int y;</b></p><p> struct maze *next;</p><p><b> }MG;</b></p><p> 定義pop()函數(shù),用來進行入棧操作。</p><p&
11、gt; 定義 way() 函數(shù),用來尋找迷宮地圖正確的路徑。 /*尋找路徑函數(shù)*/</p><p><b> 3.2 系統(tǒng)流程圖</b></p><p> 3.3 主要模塊的流程圖</p><p><b> N</b></p><p><b> Y</b></
12、p><p><b> N</b></p><p><b> Y</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p>
13、<p><b> Y</b></p><p> 1 2 3 4 </p><p><b> 4 具體代碼實現(xiàn)</b></p><p> #include<malloc.h></p><p> #
14、include<stdio.h></p><p> #include<conio.h></p><p> #include<process.h></p><p> #include<stdlib.h></p><p> #include<dos.h></p>&
15、lt;p> #include<windows.h></p><p> #include<time.h></p><p> #define M 5 /*規(guī)定迷宮的行數(shù)*/</p><p> #define N 5 /*規(guī)定迷宮的列數(shù)*/&
16、lt;/p><p><b> int i=0;</b></p><p> typedef struct shuju{</p><p><b> int data;</b></p><p> int flag; /*判斷這個位置是否被走過,使其產(chǎn)生
17、記憶效果*/</p><p><b> }SHU;</b></p><p> typedef struct maze{</p><p><b> int c;</b></p><p><b> int flag;</b></p><p> in
18、t direct;</p><p><b> int x;</b></p><p><b> int y;</b></p><p> struct maze *next;</p><p><b> }MG;</b></p><p> MG *t
19、op,*p;</p><p> MG * pop(int bb,int xx,int yy,SHU t[M][N]) /*入棧操作*/</p><p> {int i2,j2;</p><p><b> i++;</b></p><p> p=(MG *)malloc(sizeof(MG));</p
20、><p><b> p->c=bb;</b></p><p> p->flag=1;</p><p> p->direct=4;</p><p><b> p->x=xx;</b></p><p><b> p->y=yy;<
21、;/b></p><p><b> if(i==1)</b></p><p><b> {top=p;</b></p><p> top->next=NULL;</p><p><b> }</b></p><p><b>
22、 else</b></p><p> {p->next=top;</p><p><b> top=p;</b></p><p><b> }</b></p><p> system("cls");</p><p> for(
23、i2=0;i2<M;i2++)</p><p> {printf("\n");</p><p> for(j2=0;j2<N;j2++)</p><p> if(t[i2][j2].data==8)</p><p><b> {</b></p><p>
24、cprintf("%3d",t[i2][j2].data);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cprintf("%3d",t
25、[i2][j2].data);</p><p><b> }</b></p><p><b> }</b></p><p><b> return p;</b></p><p><b> }</b></p><p> in
26、t way(int x1,int y1,SHU s[M][N]) /*尋找路徑函數(shù)*/</p><p> { int x,y,f=0;</p><p> int i1,j1;</p><p> while(top!=NULL) /*以下是在四個方向上進行判斷</p><p> 通就入棧,不通就進行下
27、個方向的</p><p> 判斷,如果四個方向都不通,就出棧*/</p><p> if(top->flag==1)</p><p> {x=top->x;</p><p><b> y=top->y;</b></p><p> if(x==x1&&y=
28、=y1)</p><p><b> { f=1;</b></p><p><b> break;</b></p><p> } /*判斷右方向*/</p><p> if(top->direct==4)</p><p&
29、gt; {top->direct--;</p><p> if(0<=y+1&&y+1<N) /*判斷數(shù)組的下標(biāo)是否超過了規(guī)定的界限*/</p><p> if(s[x][y+1].data==0&&s[x][y+1].flag==0)</p><p> pop(s[x][y+1]
30、.data=8,x,y+1,s);</p><p><b> }</b></p><p> else if(top->direct==3) /*判斷下方向*/</p><p> {top->direct--;</p><p> if(0<=x+1&&x+1<M
31、)</p><p> if(s[x+1][y].data==0&&s[x+1][y].flag==0)</p><p> pop(s[x+1][y].data=8,x+1,y,s);</p><p><b> }</b></p><p> else if(top->direct==2)
32、 /*判斷左方向*/</p><p> {top->direct--;</p><p> if(0<=y-1&&y-1<N)</p><p> if(s[x][y-1].data==0&&s[x][y-1].flag==0)</p><p> pop(s[x][y-1].d
33、ata=8,x,y-1,s);</p><p><b> }</b></p><p> else if(top->direct==1) /*判斷上方向*/</p><p> {top->direct--;</p><p> top->flag=0;</p><p&g
34、t; if(0<=x-1&&x-1<M)</p><p> if(s[x-1][y].data==0&&s[x-1][y].flag==0)</p><p> pop(s[x-1][y].data=8,x-1,y,s);</p><p><b> }</b></p><p&
35、gt;<b> }</b></p><p><b> else</b></p><p> {s[top->x][top->y].data=0;</p><p> s[top->x][top->y].flag=1;</p><p> top=top->next;
36、</p><p> system("cls");</p><p> for(i1=0;i1<M;i1++)</p><p> {printf("\n");</p><p> for(j1=0;j1<N;j1++)</p><p> if(s[i1][j1].
37、data==8)</p><p><b> {</b></p><p> cprintf("%3d",s[i1][j1].data);</p><p><b> }</b></p><p><b> else</b></p><p
38、><b> {</b></p><p> cprintf("%3d",s[i1][j1].data);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>&l
39、t;/p><p><b> return f;</b></p><p><b> }</b></p><p> void main()</p><p> {SHU s[M][N];</p><p> int x,y,x1,y1;</p><p>
40、; int i1,j1,i,j,F;</p><p> for(i1=0;i1<M;i1++)</p><p> for(j1=0;j1<N;j1++) /*迷宮圖面,用一個數(shù)字表示*/</p><p> s[i1][j1].data=8;
41、 </p><p> for(i1=0;i1<M;i1++)</p><p> {printf("\n");</p><p> for(j1=0;j1<N;j1++)</p><p> printf("%
42、3d",s[i1][j1].data); /*打印迷宮最原始的界面,用數(shù)字8表示每個 } 位置*/</p><p><b> }</b><
43、;/p><p> printf("\n請輸入0或1來表示迷宮地圖 --0為通 --1為不通\n");</p><p> for(i1=0;i1<M;i1++)</p><p> for(j1=0;j1<N;j1++)</p><p> {printf("\nb[%d][%d]=",i1,
44、j1);</p><p> scanf("%d",&s[i1][j1].data); /*繪制迷宮,0代表通,1代表不通*/</p><p> s[i1][j1].flag=0;</p><p> system("cls");</p><p
45、> for(i=0;i<M;i++)</p><p> {printf("\n");</p><p> for(j=0;j<N;j++)</p><p> if(s[i][j].data==0)</p><p><b> {</b></p><p>
46、 cprintf("%3d",s[i][j].data);</p><p><b> }</b></p><p> else if(s[i][j].data==1)</p><p><b> {</b></p><p> cprintf("%3d",
47、s[i][j].data);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cprintf("%3d",s[i][j].data);</p>&
48、lt;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\nmi gong tu is :");</p><p> for(i1=0;i1<M;i1+
49、+)</p><p> {printf("\n");</p><p> for(j1=0;j1<N;j1++)</p><p> printf("%3d",s[i1][j1].data);</p><p><b> }</b></p><p>
50、 printf("\n輸入迷宮的入口坐標(biāo)(X,Y)\n for example input:0 0\ninput:"); /*輸入迷宮的入口坐標(biāo)(X,Y)*/</p><p> scanf("%d %d",&x,&y);</p><p> printf("輸入迷宮的出口坐標(biāo)(X1,Y1)\n for examp
51、le input:3 3\ninput:"); /*輸入迷宮的出口坐標(biāo)(X1,Y1)*/</p><p> scanf("%d %d",&x1,&y1);</p><p> printf("press any key to continue:");</p><p><b> ge
52、tch();</b></p><p> while(s[x][y].data!=0) /*判斷是否有入口位置*/</p><p> {printf("Not find ru kou\n");</p><p> printf("please input again: "
53、;);</p><p> scanf("%d %d",x,y);</p><p><b> }</b></p><p> pop(s[x][y].data=8,x,y,s);</p><p> F=way(x1,y1,s);
54、 /*路徑進行判斷函數(shù)*/</p><p><b> if(F==0)</b></p><p> cprintf("\r\n本迷宮沒有解!\n");</p><p><b> else</b></p><p> cprintf("\r\n本迷宮有解:\n&
55、quot;);</p><p> cprintf("\r\npress any key to quit.\n");</p><p><b> getch();</b></p><p><b> }</b></p><p><b> 5 課程設(shè)計總結(jié)</b&
56、gt;</p><p> 5.1 程序運行結(jié)果 </p><p> 首先通過輸入給數(shù)組賦值,創(chuàng)建迷宮地圖,再輸入迷宮的入口,以及迷宮的出口,判斷迷宮是否有沒有正確的線路,如果有解,則輸出正確迷宮地圖線路。如果沒有解,則輸出無解迷宮地圖線路。</p><p><b> 。</b></p><p> 5.2 課程設(shè)計
57、體會</p><p> 通過這次數(shù)據(jù)的建立的實驗,掌握了數(shù)據(jù)結(jié)構(gòu)的基本操作,也使我對數(shù)據(jù)結(jié)構(gòu)實質(zhì)了解更加明確,對它的一些基本操作也更加熟悉了,在實驗輸入編碼的時候要仔細(xì),小心,耐心,我才能減少輸入編碼的錯誤。如一個小小的符號錯誤,就會導(dǎo)致你的編譯將不能成功。在寫代碼的時,我們要查一些資料,問同學(xué),問老師,也增加同學(xué)與老師和同學(xué)與同學(xué)之間的友誼,使我增加了做一些事還要合作精神,更重要增加了我們的知識。在實驗中我們
58、意識到不能想當(dāng)然的直接編譯執(zhí)行,應(yīng)當(dāng)在閱讀并理解源代碼的基礎(chǔ)上執(zhí)行,這才是我們做這個實驗的意義吧。理論與實踐結(jié)合。</p><p><b> 參考文獻 </b></p><p> [1] 張福祥. C語言程序設(shè)計[M]. 沈陽:遼寧大學(xué)出版社,2010.1</p><p> [2] 張福祥,王萌.C語言程序設(shè)計習(xí)題解答與實驗實訓(xùn)[M].沈
59、陽:遼寧大學(xué)出版社,2010.1</p><p> [3] 牛莉,劉遠(yuǎn)軍等.計算機等級考試輔導(dǎo)教程[M].北京:中國鐵道出版社,2008</p><p><b> 致 謝</b></p><p> 在這次的課程設(shè)計的過程中,我得到了許多幫助。首先,我要感謝我們的指導(dǎo)老師*老師在課程設(shè)計給我們的無私的指導(dǎo),提供給我們幫助和支持。這是我順利
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論