2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課題名稱 1.迷宮求解 2.一元多項(xiàng)式計(jì)算 </p><p>  專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  班 級 計(jì)算機(jī) 1001

2、 </p><p>  學(xué) 號 20100301012 </p><p>  姓 名 </p><p>  指導(dǎo)教師 </p><p>  2012年 7 月 5 日<

3、;/p><p>  課 程 設(shè) 計(jì) 任 務(wù) 書</p><p>  課程名稱 數(shù)據(jù)結(jié)構(gòu) </p><p>  課 題 1.迷宮求解 2.一元多項(xiàng)式計(jì)算 </p><p>  課 程 設(shè) 計(jì) 任 務(wù) 書</p><p><b>  一.設(shè)計(jì)內(nèi)容</b>

4、</p><p><b>  問題1:拓?fù)渑判?lt;/b></p><p>  大學(xué)期間各專業(yè)都要制訂相應(yīng)的教學(xué)計(jì)劃。每個(gè)專業(yè)開設(shè)的課程預(yù)先已確定。而各門課程間有的是相互獨(dú)立的,而有的則有先修后修的限定。試設(shè)計(jì)相應(yīng)的課程設(shè)置程序,實(shí)現(xiàn)對某專業(yè)各學(xué)期的課程的排布,其中每門課需設(shè)定課時(shí),而各學(xué)期的總課時(shí)不能超過上限。</p><p>  測試數(shù)據(jù):學(xué)期

5、課時(shí)上限數(shù):350 ;各課程所需學(xué)時(shí):48;課程先、后修關(guān)系如圖:</p><p>  問題2:huffman編碼</p><p>  對于確定的字符集的電文字符串編碼,實(shí)現(xiàn)最高的通信效率。編程實(shí)現(xiàn)對于給定的輸入串及各字符的已知頻度,輸出其編碼方式(各字符的二進(jìn)制編碼)及對應(yīng)的輸出流。</p><p><b>  測試數(shù)據(jù): </b></

6、p><p><b>  問題3:成績管理</b></p><p>  編制一應(yīng)用軟件實(shí)現(xiàn)對班級成績管理?;竟δ苡袑W(xué)生信息的增刪(轉(zhuǎn)入或退學(xué))、查找(從當(dāng)前點(diǎn)向前或向后雙向的)、錄入、統(tǒng)計(jì)(如總分,及格率等)。建議用雙鏈表實(shí)現(xiàn)。</p><p><b>  問題4:成績排序</b></p><p>  

7、對某次考試成績排序,輸入為多門課程成績,可以任一課程成績?yōu)殛P(guān)鍵字進(jìn)行檢索。建議采用快速排序等算法效率高的算法。</p><p><b>  問題5:迷宮求解</b></p><p>  一個(gè)M*N的長方陣迷宮,0和1分別表示迷宮中的通路和墻壁,對任意設(shè)定的迷宮,東、南、西、北四個(gè)方向是可能的行走方向,求出一條從入口到出口的路徑(或沒有通路)。</p>&

8、lt;p>  迷宮的測試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(8,9)為出口。</p><p>  問題6:一元多項(xiàng)式計(jì)算</p><p>  對于任意輸入的多項(xiàng)式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用鏈表存儲后實(shí)現(xiàn)A+B;A-B。</p><p><b>  測試數(shù)據(jù):</b&g

9、t;</p><p><b>  a.;</b></p><p><b>  b.;</b></p><p><b>  c.;</b></p><p><b>  d.;</b></p><p><b>  e. ;&l

10、t;/b></p><p>  問題7: 通訊錄管理</p><p>  設(shè)計(jì)一個(gè)通訊錄管理,包括通訊錄鏈表的建立、通訊者的插入、通訊者的刪除、通訊者的查詢以及信息修改等。</p><p>  要求有運(yùn)行界面,從菜單中進(jìn)入選項(xiàng)。</p><p><b>  二.設(shè)計(jì)要求</b></p><p&g

11、t;<b>  1.選題</b></p><p>  每位學(xué)生需完成兩個(gè)課題,其中一個(gè)必選,另一個(gè)自選,必選題次為,學(xué)號/7+1。</p><p>  2.課程設(shè)計(jì)報(bào)告內(nèi)容說明</p><p>  1)需求分析 程序的功能;輸入輸出的要求。</p><p>  2)概要設(shè)計(jì) 程序的模塊構(gòu)成以及模塊之間的層次結(jié)構(gòu)、各模塊的

12、調(diào)用關(guān)系;每個(gè)模塊的功能;課題涉及的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu);即要存儲什么數(shù)據(jù),這些數(shù)據(jù)是什么樣的結(jié)構(gòu),它們之間有什么關(guān)系等。</p><p>  3)詳細(xì)設(shè)計(jì) 采用C語言定義相關(guān)的數(shù)據(jù)類型;寫出各模塊的類C碼算法;畫出各函數(shù)的調(diào)用關(guān)系圖、主要函數(shù)的流程圖。</p><p>  4)調(diào)試分析以及設(shè)計(jì)體會 測試數(shù)據(jù):準(zhǔn)備典型的測試數(shù)據(jù)和測試方案,包括正確的輸入及輸出結(jié)果和含有錯(cuò)誤的輸入及輸出結(jié)果

13、;程序調(diào)試中遇到的問題以及解決問題的方法;課程設(shè)計(jì)過程經(jīng)驗(yàn)教訓(xùn)、心得體會。</p><p>  5)使用說明 用戶使用手冊:說明如何使用你編寫的程序,詳細(xì)列出每一步的操作步驟。</p><p>  6)書寫格式 見附帶說明。</p><p>  7)附錄 參考書目;源程序清單(帶注釋)。</p><p><b>  3.成績評定

14、</b></p><p>  指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動手能力、創(chuàng)新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評,并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級給出每位同學(xué)的課程設(shè)計(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%)④

15、 設(shè)計(jì)報(bào)告(占30%)注意:不得抄襲他人的報(bào)告(或給他人抄襲),一旦發(fā)現(xiàn),成績?yōu)榱惴?。?獨(dú)立完成情況(占10%)。</p><p><b>  三.進(jìn)度安排</b></p><p>  第 19 周 星期一 13時(shí):00分——17時(shí):00分</p><p>  星期二 13時(shí):00分——17時(shí):00分</p><p&g

16、t;  星期三 13時(shí):00分——17時(shí):00分</p><p>  星期四 13時(shí):00分——17時(shí):00分</p><p>  第 20 周 星期一 8 時(shí):00分——12時(shí):00分</p><p>  星期二 8 時(shí):00分——12時(shí):00分</p><p><b>  附:</b></p>

17、<p>  課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、評分、附件(A4大小的圖紙及程序清單)。 </p><p>  正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。</p><p>  正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實(shí)現(xiàn)(至少要有一個(gè)主要模塊的流程圖);四、程序調(diào)試;五、總

18、結(jié);六、附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專?lt;/p><p>  正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。</p><p><b>  目 錄</b></p><p>  一、迷宮求解系統(tǒng) ................................................................

19、.........................................................................1</p><p>  1. 系統(tǒng)需求分析1</p><p>  1. 1系統(tǒng)設(shè)計(jì)的意義與目的...........................................................................

20、.....................................1</p><p>  1. 2系統(tǒng)功能需求................................................................................................................................1</p><p>

21、;<b>  2. 總體設(shè)計(jì)2</b></p><p>  2. 1系統(tǒng)功能分析................................................................................................................................2</p><p>  2. 2

22、系統(tǒng)功能模塊劃分與設(shè)計(jì)............................................................................................................2</p><p>  2. 3系統(tǒng)功能模塊圖..................................................................

23、..........................................................2</p><p><b>  3. 詳細(xì)設(shè)計(jì)3</b></p><p>  3. 1定義棧的結(jié)構(gòu)體............................................................................

24、...............................................3</p><p>  3. 2棧構(gòu)造函數(shù)算法...........................................................................................................................3</p>&l

25、t;p>  3. 3入棧函數(shù)算法...............................................................................................................................3</p><p>  3. 4取棧頂元素函數(shù)算法.....................................

26、..............................................................................4</p><p>  3. 5出棧函數(shù)算法............................................................................................................

27、...................4</p><p>  3. 6輸入迷宮矩陣函數(shù)算法...............................................................................................................4</p><p>  3. 7迷宮矩陣求解函數(shù)算法..............

28、.................................................................................................5</p><p><b>  4. 系統(tǒng)調(diào)試7</b></p><p>  4. 1調(diào)試過程中的錯(cuò)誤....................................

29、..................................................................................7</p><p>  4. 2具體調(diào)試過程........................................................................................................

30、......................7</p><p><b>  5. 結(jié)果分析9</b></p><p><b>  6. 總結(jié)10</b></p><p>  二、一元多項(xiàng)式計(jì).................................................................

31、.........................................................................11</p><p>  1. 系統(tǒng)需求分析11</p><p>  1. 1系統(tǒng)設(shè)計(jì)的意義與目的.........................................................................

32、.....................................11</p><p>  1. 2系統(tǒng)功能需求..............................................................................................................................11</p><p>

33、;  2. 總體設(shè)計(jì)12</p><p>  2. 1系統(tǒng)功能分析..............................................................................................................................12</p><p>  2. 2系統(tǒng)功能模塊劃分與設(shè)計(jì)........

34、..................................................................................................12</p><p>  2. 3系統(tǒng)功能模塊圖......................................................................................

35、....................................12</p><p>  3. 詳細(xì)設(shè)計(jì)13</p><p>  3. 1定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體.................................................................................................................

36、13</p><p>  3. 2多項(xiàng)式計(jì)算結(jié)果輸出函數(shù)算法.................................................................................................13</p><p>  3. 3需要處理的多項(xiàng)式輸出函數(shù)算法......................................

37、.......................................................13</p><p>  3. 4插入結(jié)點(diǎn)函數(shù)算法.....................................................................................................................14</p>

38、;<p>  3. 5多項(xiàng)式系數(shù)和指數(shù)輸入函數(shù)算法.............................................................................................14</p><p>  3. 6結(jié)點(diǎn)刪除函數(shù)算法..........................................................

39、...........................................................15</p><p>  3. 7多項(xiàng)式相加函數(shù)算法.................................................................................................................15</p&g

40、t;<p>  3. 8多項(xiàng)式相減函數(shù)算法.................................................................................................................16</p><p>  4. 系統(tǒng)調(diào)試18</p><p>  4. 1調(diào)試過程中的錯(cuò)誤.........

41、...........................................................................................................18</p><p>  4. 2具體調(diào)試過程..............................................................................

42、..............................................18</p><p>  5. 結(jié)果分析20</p><p><b>  6. 總結(jié)21</b></p><p><b>  三、附件22</b></p><p>  1. 迷宮求解系統(tǒng)源程序代碼22

43、</p><p>  2. 一元多項(xiàng)式運(yùn)算系統(tǒng)源程序代碼30</p><p>  3. 參考文獻(xiàn)40</p><p><b>  一、迷宮求解系統(tǒng) </b></p><p><b>  系統(tǒng)需求分析</b></p><p>  1.1 系統(tǒng)設(shè)計(jì)的目的與意義</p&g

44、t;<p>  在對迷宮矩陣進(jìn)行求解時(shí),當(dāng)矩陣規(guī)模比較龐大的時(shí)候,進(jìn)行人工求解比較麻煩同時(shí)也容易出錯(cuò),因此需要一個(gè)迷宮求解系統(tǒng)來對迷宮矩陣進(jìn)行求解。</p><p>  1.2 系統(tǒng)功能需求</p><p>  本系統(tǒng)定義了棧的結(jié)構(gòu)體,棧的構(gòu)造函數(shù),入棧函數(shù),出棧函數(shù),取棧頂元素函數(shù),迷宮矩陣的輸入函數(shù),迷宮矩陣求解函數(shù)以及一個(gè)主函數(shù),通過主函數(shù)調(diào)用其他幾個(gè)函數(shù)最終實(shí)現(xiàn)求得迷

45、宮矩陣的通路徑。</p><p><b>  總體設(shè)計(jì)</b></p><p>  2.1 系統(tǒng)功能分析</p><p>  系統(tǒng)通過調(diào)用函數(shù)來實(shí)現(xiàn)棧的構(gòu)造,數(shù)據(jù)入棧,數(shù)據(jù)出棧,取得棧頂元素,輸入迷宮矩陣,求解迷宮矩陣等功能。InitStack( )函數(shù)用來構(gòu)造棧;Push( )函數(shù)用來將數(shù)據(jù)入棧;Gettop( )函數(shù)用來取棧頂元素; Pop

46、( )用來將棧頂元素出棧;Inpute( )用來輸入迷宮矩陣;MazePath( )用來對迷宮矩陣進(jìn)行求解;主函數(shù)main()用于調(diào)用這些函數(shù)。 </p><p>  2.2 系統(tǒng)功能模塊劃分與設(shè)計(jì)</p><p>  本系統(tǒng)定義了一個(gè)棧的結(jié)構(gòu)體,定義了InitStack( )、Push( )、Gettop( )、Pop( )、Inpute( )、MazePath( )等函數(shù)來實(shí)現(xiàn)系統(tǒng)所需

47、功能。</p><p>  2.3 系統(tǒng)功能模塊圖</p><p>  圖2.1系統(tǒng)功能模塊</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  3.1 定義棧的結(jié)構(gòu)體</p><p>  該結(jié)構(gòu)體定義了一個(gè)整型變量用來存放當(dāng)前已分配的存儲空間,數(shù)并定義了一個(gè)棧頂指針和一個(gè)棧低指針。

48、 </p><p>  typedef struct{ //定義棧的結(jié)構(gòu)體</p><p>  int *base;</p><p><b>  int *top;</b></p><p>  int stacksize;</p><p><b>  }SqSta

49、ck;</b></p><p>  3.2 棧構(gòu)造函數(shù)算法</p><p>  Status InitStack(SqStack &s){ </p><p><b>  //構(gòu)造一個(gè)空棧s</b></p><p>  s.base=(int *)malloc(STACK_INIT_SIZE*sizeo

50、f(int));</p><p>  if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p>  s.top=s.base;</p><p>  s.stacksize=STACK_INIT_SIZE;</p><p>  return OK;</p><p>  }//Ini

51、tStack</p><p>  3.3 入棧函數(shù)算法</p><p>  Status Push(SqStack &s,int e){ </p><p>  //插入元素e為新的棧頂元素</p><p>  if(s.top-s.base>=s.stacksize){//棧滿,追加存儲空間</p><p&

52、gt;  s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*</p><p>  sizeof(int));</p><p>  if(!s.base) exit(OVERFLOW); //存儲空間分配失敗</p><p>  s.top=s.base+s.stacksize;</p>

53、<p>  s.stacksize+=STACKINCREMENT;</p><p><b>  }</b></p><p>  *s.top++=e;</p><p>  return OK;</p><p><b>  }//Push</b></p><p>

54、;  3.4 取棧頂元素函數(shù)算法</p><p>  Status Gettop(SqStack s,int &e){ </p><p>  //若棧不空,則用e返回棧頂元素,并返回OK;否則返回ERRORif(s.top= =s.base) return ERROR;</p><p>  e=*(s.top-1);</p>&l

55、t;p>  return OK;</p><p><b>  }//Gettop</b></p><p>  3.5 出棧函數(shù)算法</p><p>  Status Pop(SqStack &s,ElamType e){ </p><p>  //若棧不空,則刪除s的棧頂元素,并返回OK;否則返回ERR

56、OR</p><p>  if(s.top= =s.base)return ERROR;</p><p>  e=*--s.top;</p><p>  return OK;</p><p><b>  }// Pop</b></p><p>  3.6 輸入迷宮矩陣函數(shù)算法</p&g

57、t;<p>  Status **Inpute(ElamType n,ElamType m){ </p><p>  //輸入迷宮矩陣函數(shù)</p><p>  Status **p=(Status**)malloc(n*sizeof(int));//為矩陣分配存儲空間</p><p>  for(i=0;i<n;i++)</p>

58、<p>  *(p+i)=(Status *)malloc(m*sizeof(int));</p><p>  for(i=0;i<n;i++)</p><p>  for(j=0;j<m;j++)</p><p>  scanf("%d",&p[i][j]);//按行輸入迷宮矩陣的每個(gè)元素</p>

59、<p><b>  return p;</b></p><p><b>  }//Inpute</b></p><p>  3.7 迷宮矩陣求解函數(shù)算法</p><p>  Status MazePath(Status **p,ElamType n,ElamType m){ </p><p

60、>  //迷宮矩陣求解函數(shù)</p><p>  SqStack s1,s2;</p><p>  InitStack(s1); InitStack(s2);</p><p>  Push(s1,i); Push(s2,j);</p><p>  do{i=i+1; //判斷當(dāng)前元素下方的元素位置是否可通,可通則將該位置入棧</p

61、><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){//判斷當(dāng)前元素是否為迷宮出口位置元素</p><p>  Push(s1,i); Push(s2,j); break;&l

62、t;/p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{i=i-1;j=j+1;</p><p>  //判斷當(dāng)前元素右方的元素位置是否可

63、通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p><p>  Push(s1,i);Push(s2,j);break;</p

64、><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p><b>  else{</b></p><p><b>  j=j-2;

65、</b></p><p>  //判斷當(dāng)前元素左方的元素位置是否可通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p

66、><p>  Push(s1,i);Push(s2,j);break;</p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{i=i-1;

67、 j=j+1;</p><p>  //判斷當(dāng)前元素上方的元素位置是否可通,可通則將該位置入棧</p><p>  if(0<=i&&i<n&&0<=j&&j<m&&!p[i][j]){</p><p>  if(i==n-1&&j==m-1){</p&g

68、t;<p>  Push(s1,i);Push(s2,j);break;</p><p><b>  }</b></p><p>  Push(s1,i);Push(s2,j);p[i][j]=2;</p><p><b>  }</b></p><p>  else{//如果該元素的

69、以上四個(gè)相鄰元素位置都不通,則出棧</p><p>  Gettop(s1,i); Gettop(s2,j);</p><p>  p[i][j]=1;Pop(s1); Pop(s2);</p><p>  Gettop(s1,i); Gettop(s2,j);</p><p><b>  }</b></p&

70、gt;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(i==0&&j==0){</p><p>  printf("該迷宮矩陣無可通路徑!\n&qu

71、ot;);</p><p><b>  c=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  }while(1);</p><p>  if(i!=0&&j!=0)

72、</p><p><b>  輸出該通路徑</b></p><p>  return 0K;</p><p><b>  }</b></p><p><b>  系統(tǒng)調(diào)試</b></p><p>  4.1 調(diào)試過程中的錯(cuò)誤</p><

73、;p> ?、?、輸入數(shù)據(jù)時(shí),輸錯(cuò)了數(shù)據(jù)的類型會造成死循環(huán),因此輸入時(shí)需要注意。</p><p>  ②、如下圖所示,一開始主界面輸入非正確字母時(shí),沒有提示錯(cuò)誤。容易造成用戶誤解,在主函數(shù)的switch語句結(jié)束處加上default:cout<<"選擇錯(cuò)誤,請從新選擇!";就可以了。</p><p>  圖4.1 輸入錯(cuò)誤無提示</p><

74、;p>  4.2 具體調(diào)試過程</p><p><b>  主界面</b></p><p>  圖4.2 系統(tǒng)主界面</p><p><b>  迷宮矩陣輸入過程</b></p><p>  圖4.3 輸入矩陣</p><p><b>  系統(tǒng)求解過程&l

75、t;/b></p><p>  圖4.4 求解路徑并輸出</p><p><b>  結(jié)果分析 </b></p><p>  程序設(shè)計(jì)了一個(gè)棧的結(jié)構(gòu)體,在設(shè)計(jì)的過程中,建立了較為清晰的層次,利用了C語言編程思想來完成系統(tǒng)的設(shè)計(jì),做到了用戶根據(jù)具體情況來輸入迷宮矩陣并經(jīng)行求解。而且界面簡潔,容易操作。不足的地方就是程序稍微長了些,不夠簡練

76、,導(dǎo)致出現(xiàn)錯(cuò)誤很難發(fā)現(xiàn)和修改;另外就是在輸入矩陣的時(shí)候,如果所求解的矩陣非常大的話,也容易導(dǎo)致用戶在輸入過程中出錯(cuò)。</p><p><b>  總結(jié)</b></p><p>  首先,接到設(shè)計(jì)題目之后,在對本題目進(jìn)行分析的時(shí)候,我懂得了一個(gè)很重要的道理,那就是說一個(gè)程序的產(chǎn)生需要一個(gè)對題目要求有一個(gè)正確全面的分析。其次,就該考慮程序算法的問題了,一個(gè)好的算法是一個(gè)好

77、程序的靈魂,也決定了一個(gè)程序的質(zhì)量。</p><p>  兩個(gè)星期的課設(shè)雖然有些疲勞和困倦,但帶給我很多的收獲。數(shù)據(jù)結(jié)構(gòu)已經(jīng)學(xué)了一個(gè)學(xué)期了,有許多知識都存在似懂非懂的現(xiàn)象,這種現(xiàn)象通過實(shí)際的上機(jī)操作,已經(jīng)減少了許多。對這些知識也有了更深的理解和很好的掌握。也有很多理論上說得過去的代碼,但到了實(shí)際操作,卻是行不通的。這種困惑,有許多已經(jīng)通過實(shí)際操作解決了,并能夠深刻認(rèn)識,但也有很多沒有明白。只能避過這些方法,換方法

78、實(shí)現(xiàn)。在課程設(shè)計(jì)之前,因?yàn)橛辛司C合實(shí)驗(yàn)的經(jīng)驗(yàn)與教訓(xùn),明白了寫代碼這一步是非常重要的,因?yàn)楫?dāng)你把代碼輸入電腦,并用編譯器將其運(yùn)行,發(fā)現(xiàn)通過不了,再來檢查找出問題,這是一件非常辛苦的事情,也很浪費(fèi)時(shí)間。于是在課程設(shè)計(jì)的時(shí)候,我花了四天的時(shí)間來規(guī)劃與寫代碼,將要實(shí)現(xiàn)的內(nèi)容分析清楚,才把代碼輸入電腦。我覺得寫程序,應(yīng)該先找到該程序中的核心地方,用多種方法來實(shí)現(xiàn)該核心,這才可能避免等到發(fā)現(xiàn)邏輯上或者編譯器不支持上的錯(cuò)誤,才來想補(bǔ)救的措施,這樣花費(fèi)

79、時(shí)間在想補(bǔ)救措施是很不值得的。</p><p>  這次的課程設(shè)計(jì),真是讓我充分的感覺到了要自己設(shè)計(jì)一個(gè)程序是多么的難,以及學(xué)習(xí)好數(shù)據(jù)結(jié)構(gòu)是多么的重要。在這個(gè)程序的設(shè)計(jì)過程中,我清楚的意識到自己的水平有多么的薄弱,課程的知識學(xué)得有多么的不扎實(shí)。</p><p>  以后還會有很多的課程設(shè)計(jì),一定要吸取這次的教訓(xùn),把知識學(xué)懂學(xué)透學(xué)精,真正的為我所用,這樣走上社會我才能真正的發(fā)揮所長。<

80、/p><p><b>  二、一元多項(xiàng)式計(jì)算</b></p><p><b>  系統(tǒng)需求分析</b></p><p>  1.1 系統(tǒng)設(shè)計(jì)的目的與意義</p><p>  在對一元多項(xiàng)式進(jìn)行計(jì)算時(shí),當(dāng)未知數(shù)的系數(shù)較大或指數(shù)較大的時(shí)候,進(jìn)行人工求解比較麻煩同時(shí)也容易出錯(cuò),因此需要一個(gè)一元多項(xiàng)式計(jì)算系統(tǒng)來

81、對迷宮矩陣進(jìn)行求解。</p><p>  1.2 系統(tǒng)功能需求</p><p>  本系統(tǒng)定義了鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型,多項(xiàng)式計(jì)算結(jié)果輸出函數(shù),需要處理的多項(xiàng)式輸出函數(shù),結(jié)點(diǎn)插入函數(shù),多項(xiàng)式輸入函數(shù),結(jié)點(diǎn)刪除函數(shù),多項(xiàng)式相加函數(shù),多項(xiàng)式相減函數(shù)以及一個(gè)主函數(shù),通過主函數(shù)調(diào)用其他幾個(gè)函數(shù)最終實(shí)現(xiàn)多項(xiàng)式的加減計(jì)算。</p><p><b>  總體設(shè)計(jì)</b

82、></p><p>  2.1 系統(tǒng)功能分析</p><p>  系統(tǒng)通過調(diào)用函數(shù)來建立單鏈表、結(jié)點(diǎn)的插入和刪除,輸入多項(xiàng)式系數(shù)和指數(shù),對輸入的多項(xiàng)式進(jìn)行加減運(yùn)算,輸出運(yùn)算結(jié)果等功能。 Print2()函數(shù)用來輸出計(jì)算結(jié)果;Print1()函數(shù)用來輸出用戶所輸入的多項(xiàng)式以檢查輸入是否正確;Insert()函數(shù)用來插入結(jié)點(diǎn); Input()用來輸入多項(xiàng)式的系數(shù)和指數(shù);Delete()函

83、數(shù)用來刪除結(jié)點(diǎn);AddPolyn()函數(shù)用來進(jìn)行多項(xiàng)式相加;ReducPolyn()函數(shù)用來進(jìn)行多項(xiàng)式相,主函數(shù)main()用于調(diào)用這些函數(shù)。 </p><p>  2.2 系統(tǒng)功能模塊劃分與設(shè)計(jì)</p><p>  本系統(tǒng)定義了鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型,定義了Print2()、Print1()、Insert()、Input()、Delete()、AddPolyn()、ReducPolyn()等

84、函數(shù)來實(shí)現(xiàn)系統(tǒng)所需功能。</p><p>  2.3 系統(tǒng)功能模塊圖</p><p>  圖2.1系統(tǒng)功能模塊</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  3.1 定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體</p><p>  該結(jié)構(gòu)體定義了兩個(gè)整型變量分別用來存放系數(shù)和指數(shù),并定義了一個(gè)指針用來存

85、放下一個(gè)結(jié)點(diǎn)的位置。</p><p>  typedef struct term{ //定義鏈表結(jié)點(diǎn)結(jié)構(gòu)體類型</p><p>  int coef; //系數(shù)</p><p>  int expn; //指數(shù)</p><p>  struct term *next;</p><p

86、>  }term,*polynomial; </p><p>  3.2 多項(xiàng)式計(jì)算結(jié)果輸出函數(shù)算法</p><p>  Status Print2(polynomial z){ </p><p>  //對多項(xiàng)式計(jì)算結(jié)果進(jìn)行輸出</p><p><b>  while(z){</b></p>

87、<p>  if(z->coef!=0){</p><p>  輸出多項(xiàng)式的系數(shù)和指數(shù);}</p><p>  else printf("0");</p><p>  if(z->next) printf("+");</p><p>  z=z->next;&l

88、t;/p><p><b>  }//Print2</b></p><p>  3.3 需要處理的多項(xiàng)式輸出函數(shù)算法</p><p>  Status Print1(polynomial z){ </p><p>  //對需要處理的多項(xiàng)式進(jìn)行輸出</p><p><b>  while

89、(z){</b></p><p>  分別輸出需要處理的多項(xiàng)式每一項(xiàng)的系數(shù)和指數(shù);</p><p>  z=z->next;</p><p><b>  }</b></p><p>  } //Print1 </p><p>  3.4 插入結(jié)點(diǎn)函數(shù)算法&l

90、t;/p><p>  Status Insert(polynomial L,int i){ </p><p>  //在帶頭結(jié)點(diǎn)的單鏈表L中第i個(gè)位置前插入一個(gè)結(jié)點(diǎn)</p><p>  j=0;k=0;p=L;</p><p>  while(p&&j<i-1){ p=p->next; ++j; k++

91、; }//尋找第i-1個(gè)結(jié)點(diǎn)</p><p>  if(!p||j>i-1) return ERROR;//i小于1或大于表長+1</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p>  scanf("%d",&s->coef); //輸入第k+1項(xiàng)的

92、系數(shù)</p><p>  scanf("%d",&s->expn); //輸入第k+1項(xiàng)的指數(shù)</p><p>  s->next=p->next;</p><p>  p->next=s;</p><p>  return OK;</p><p><b>

93、;  }//Insert</b></p><p>  3.5 多項(xiàng)式系數(shù)和指數(shù)輸入函數(shù)算法</p><p>  Status Input(polynomial A,polynomial B,polynomial y){ </p><p>  //對多項(xiàng)式系數(shù)和指數(shù)進(jìn)行輸入</p><p><b>  i=0;<

94、;/b></p><p>  scanf("%d",&a);//輸入多項(xiàng)式A共有多少項(xiàng)</p><p>  for(i=0;i<a;i++){</p><p>  Insert(A,i+1);//將多項(xiàng)式A第i+1項(xiàng)的系數(shù)和指數(shù)存到鏈表結(jié)點(diǎn)中 }</p><p>  y=A->next;</

95、p><p>  Print1(y);//輸出剛所輸入的多項(xiàng)式A</p><p>  scanf("%d",&b);//輸入多項(xiàng)式B共有多少項(xiàng)</p><p>  for(i=0;i<b;i++){</p><p>  Insert(B,i+1);//將多項(xiàng)式B第i+1項(xiàng)的系數(shù)和指數(shù)存到鏈表結(jié)點(diǎn)中}</p&g

96、t;<p>  y=B->next;</p><p>  Print1(y);//輸出剛所輸入的多項(xiàng)式B</p><p><b>  }//Input</b></p><p>  3.6 結(jié)點(diǎn)刪除函數(shù)算法</p><p>  Status Delete(polynomial &L,int i)

97、{ </p><p>  //在帶頭結(jié)點(diǎn)的單鏈表L中刪除第i個(gè)結(jié)點(diǎn)</p><p>  j=0; p=L;</p><p>  while(p->next&&j<i-1){ //尋找第i-1個(gè)結(jié)點(diǎn),并令p指向其直接前趨</p><p>  p=p->next;j++;</p><

98、p><b>  }</b></p><p>  if(!(p->next)||j>i-1)return ERROR;</p><p>  q=p->next;p->next=q->next;</p><p><b>  free(q);</b></p><p>

99、;  return OK;</p><p><b>  }//Delete</b></p><p>  3.7 多項(xiàng)式相加函數(shù)算法</p><p>  Status AddPolyn(polynomial &pa,polynomial &pb){</p><p>  //對輸入的多項(xiàng)式進(jìn)行相加運(yùn)算<

100、;/p><p>  pc=(polynomial)malloc(sizeof(term));//生成新頭結(jié)點(diǎn)</p><p>  pc->next=NULL;m=pc;</p><p>  p=pa->next;q=pb->next;</p><p><b>  do{</b></p>&

101、lt;p><b>  i=1; j=1;</b></p><p><b>  if(p){</b></p><p>  while(q&&p->expn!=q->expn){q=q->next; j++;</p><p>  }//判斷兩個(gè)多項(xiàng)式的其中一項(xiàng)指數(shù)是否相等</p&

102、gt;<p>  if(q&&p->expn==q->expn){ </p><p>  //如果指數(shù)相等,則系數(shù)相加,并存入新鏈表的結(jié)點(diǎn)中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p>  s->coef=p->coef+q->

103、coef;</p><p>  s->expn=p->expn; s->next=NULL;</p><p>  m->next=s; m=m->next;</p><p>  Delete(pb,j); Delete(pa,i);//刪除使用過的結(jié)點(diǎn)</p><p><b>  j=1;<

104、/b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  //指數(shù)不相等,直接將a鏈表的第一個(gè)結(jié)點(diǎn)插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));</p><p

105、>  s->coef=p->coef; s->expn=p->expn;</p><p>  s->next=NULL; m->next=s;</p><p>  m=m->next;</p><p>  Delete(pa,i);//在a中刪除使用過的結(jié)點(diǎn)</p><p><b>

106、;  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表插入新鏈表中</p><p>  m->next=pb->next;</p><p&

107、gt;<b>  break;</b></p><p><b>  }</b></p><p>  p=pa->next; q=pb->next;</p><p>  }while(p||q);</p><p>  return pc;</p><p>  }/

108、/AddPolyn</p><p>  3.8 多項(xiàng)式相減函數(shù)算法</p><p>  Status ReducPolyn(polynomial &pa,polynomial &pb) {</p><p>  //對輸入的多項(xiàng)式進(jìn)行相減運(yùn)算</p><p>  pc=(polynomial)malloc(sizeof(term

109、));/生成新頭結(jié)點(diǎn)</p><p>  pc->next=NULL;m=pc;</p><p>  p=pa->next;q=pb->next;</p><p><b>  do{</b></p><p>  i=1; j=1;</p><p><b>  if

110、(p){</b></p><p>  while(q&&p->expn!=q->expn){</p><p>  q=q->next;j++;</p><p>  }//判斷兩個(gè)多項(xiàng)式的其中某一項(xiàng)指數(shù)是否相等</p><p>  if(q&&p->expn==q->

111、expn){</p><p>  //如果指數(shù)相等,則系數(shù)相減,并存入新鏈表的結(jié)點(diǎn)中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p>  s->coef=p->coef-q->coef;</p><p>  s->expn=p->expn;

112、s->next=NULL;m->next=s;</p><p>  m=m->next;</p><p>  Delete(pb,j);Delete(pa,i);//刪除使用過的結(jié)點(diǎn)</p><p><b>  j=1;</b></p><p><b>  }</b>&l

113、t;/p><p>  else{ //指數(shù)不相等,直接將a鏈表的第一個(gè)結(jié)點(diǎn)插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));</p><p>  s->coef=p->coef;s->expn=p->expn;</p><p>  s->next=NULL;

114、m->next=s;</p><p>  m=m->next;Delete(pa,i); //在a中刪除使用過的結(jié)點(diǎn)</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p>

115、;<p>  //若鏈表a已經(jīng)為空,鏈表b不為空,則將b鏈表結(jié)點(diǎn)中所存的系數(shù)符號取反,并同指數(shù)一起存入結(jié)點(diǎn),插入新鏈表中</p><p>  s=(polynomial)malloc(sizeof(term));//生成新結(jié)點(diǎn)</p><p>  s->coef=-q->coef;s->expn=q->expn;</p>&l

116、t;p>  s->next=NULL;m->next=s;</p><p>  m=m->next;Delete(pb,i);//在b中刪除使用過的結(jié)點(diǎn)</p><p><b>  }</b></p><p>  p=pa->next;q=pb->next;</p><p>  

117、}while(p||q);</p><p>  return pc;</p><p>  }//ReducPolyn</p><p><b>  系統(tǒng)調(diào)試</b></p><p>  4.1 調(diào)試過程中的錯(cuò)誤</p><p>  .①、剛開始些程序時(shí),是寫主函數(shù),然后在寫調(diào)用函數(shù)。這時(shí)就會出現(xiàn)下面

118、這種情況;所以必須在主函數(shù)前面先定義各調(diào)用函數(shù)。</p><p><b>  圖4.1錯(cuò)誤提示</b></p><p>  ②、在構(gòu)建鏈表時(shí),使用尾插法進(jìn)行存入數(shù)據(jù)的,所以最后面返回的應(yīng)是頭結(jié)點(diǎn)head而不是最后一個(gè)結(jié)點(diǎn)q;否則當(dāng)調(diào)用該鏈表時(shí),第一個(gè)結(jié)點(diǎn)變成原來的最后一個(gè)結(jié)點(diǎn),會導(dǎo)致結(jié)果的錯(cuò)誤。</p><p>  4.2 具體調(diào)試過程<

119、/p><p><b>  主界面</b></p><p>  圖4.2 系統(tǒng)主界面</p><p><b>  輸入多項(xiàng)式</b></p><p>  圖4.3 輸入多項(xiàng)式</p><p><b>  多項(xiàng)式相加</b></p><p&g

120、t;  圖4.4 多項(xiàng)式相加運(yùn)算</p><p><b>  多項(xiàng)式相減</b></p><p>  圖4.5 多項(xiàng)式相減運(yùn)算</p><p><b>  退出系統(tǒng)</b></p><p><b>  圖4.6 退出系統(tǒng)</b></p><p><

121、b>  結(jié)果分析 </b></p><p>  這個(gè)程序界面比較簡潔,操作簡單。程序做到了根據(jù)用戶的需求,自行輸入多項(xiàng)式,并對輸入的多項(xiàng)式進(jìn)行加減運(yùn)算。在設(shè)計(jì)的過程中,程序中設(shè)計(jì)了一個(gè)鏈表結(jié)點(diǎn)的結(jié)構(gòu)體,利用了面向過程的C語言編程思想來完成系統(tǒng)的設(shè)計(jì)。但是程序還是有寫不足的地方,一個(gè)就是程序代碼長不簡練,導(dǎo)致出現(xiàn)錯(cuò)誤很難發(fā)現(xiàn)和修改;另外一個(gè)就是在輸入多項(xiàng)式系數(shù)和指數(shù)的時(shí)候,如果要進(jìn)行處理的多項(xiàng)式項(xiàng)

122、數(shù)比較大的話,容易使用戶在輸入過程中感到無聊從而導(dǎo)致出錯(cuò)。</p><p><b>  總結(jié)</b></p><p>  從開始做數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),到現(xiàn)在已經(jīng)過去一周多了。我學(xué)到了很多知識,這些都是在課堂上很難單學(xué)習(xí)理論只是就能理解的。所以我對該課程設(shè)計(jì)很感興趣,也很認(rèn)真的做實(shí)驗(yàn)。我也很高興能夠和同學(xué)們一起做課設(shè),一起探討,不會的話還可以求救于老師,趙老師也很樂意想我

123、們解釋難懂的地方,所以我感到很榮幸。做課設(shè)表面上看起來好像很簡單似的,其實(shí)從中我們可以學(xué)到很多東西,因?yàn)槲覀兇蠹叶贾罃?shù)據(jù)結(jié)構(gòu)是很重要的一門學(xué)科,也是一門很深奧的學(xué)科,里面有很多東西值得我們?nèi)ド罹俊?lt;/p><p>  數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來更高的運(yùn)行或者存儲效率。數(shù)據(jù)結(jié)構(gòu)往往同高效的檢索算法和索引技

124、術(shù)有關(guān)。</p><p>  一般認(rèn)為,一個(gè)數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)元素依據(jù)某種邏輯聯(lián)系組織起來的。對數(shù)據(jù)元素間邏輯關(guān)系的描述稱為數(shù)據(jù)的邏輯結(jié)構(gòu);數(shù)據(jù)必須在計(jì)算機(jī)內(nèi)存儲,數(shù)據(jù)的存儲結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)形式,是其在計(jì)算機(jī)內(nèi)的表示;此外討論一個(gè)數(shù)據(jù)結(jié)構(gòu)必須同時(shí)討論在該類數(shù)據(jù)上執(zhí)行的運(yùn)算才有意義。在許多類型的程序的設(shè)計(jì)中,數(shù)據(jù)結(jié)構(gòu)的選擇是一個(gè)基本的設(shè)計(jì)考慮因素。許多大型系統(tǒng)的構(gòu)造經(jīng)驗(yàn)表明,系統(tǒng)實(shí)現(xiàn)的困難程度和系統(tǒng)構(gòu)造的質(zhì)量都嚴(yán)

125、重的依賴于是否選擇了最優(yōu)的數(shù)據(jù)結(jié)構(gòu)。許多時(shí)候,確定了數(shù)據(jù)結(jié)構(gòu)后,算法就容易得到了。有些時(shí)候事情也會反過來,我們根據(jù)特定算法來選擇數(shù)據(jù)結(jié)構(gòu)與之適應(yīng)。不論哪種情況,選擇合適的數(shù)據(jù)結(jié)構(gòu)都是非常重要的。選擇了數(shù)據(jù)結(jié)構(gòu),算法也隨之確定,是數(shù)據(jù)而不是算法是系統(tǒng)構(gòu)造的關(guān)鍵因素。這種洞見導(dǎo)致了許多種軟件設(shè)計(jì)方法和程序設(shè)計(jì)語言的出現(xiàn),面向?qū)ο蟮某绦蛟O(shè)計(jì)語言就是其中之一。</p><p>  通過本次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì),我初步學(xué)會了

126、設(shè)計(jì)報(bào)告的基本方法,學(xué)會了怎樣去借鑒別人的方法和經(jīng)驗(yàn),知道了如何整合資料和處理這些資料的能力,這位以后做畢設(shè)的論文打下了基礎(chǔ),使我感覺比較好的是有一種成功的喜悅,雖然在編譯的時(shí)候會經(jīng)常因?yàn)橐恍┬〉腻e(cuò)誤而心煩意亂,但是也不失為一件好事,失敗的越多積累的經(jīng)驗(yàn)越豐富,對人的考驗(yàn)也比較多,那么在最后編譯成功時(shí)的喜悅就越濃烈,也是自己的能力有了進(jìn)一步的提高。由于知識和經(jīng)驗(yàn)的不足,所以在以后還是需要較多的努力的,還是會在以后的學(xué)習(xí)過程中不斷地提高和

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論