數(shù)據(jù)結(jié)構(gòu)課程設計--用c語言實現(xiàn)一元多項式的加減法計算_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設計報告書</b></p><p>  課程名稱: 數(shù)據(jù)結(jié)構(gòu)與算法分析 </p><p>  題 目: 用C語言實現(xiàn)一元多項式的加減法計算 </p><p>  系 名: 信息工程系 </p><p>  專業(yè)班級:

2、 </p><p>  姓 名: </p><p>  學 號: </p><p>  指導教師: </p><p>  2014年 1

3、月 3 日</p><p>  課 程 設 計 任 務 書</p><p>  課程名稱: 數(shù)據(jù)結(jié)構(gòu)與算法分析 指導教師 </p><p>  班級名稱: 開課系、教研室: </p><p>  一、課程設計目的與任務</p><p&g

4、t;  《數(shù)據(jù)結(jié)構(gòu)》課程設計是為訓練學生的數(shù)據(jù)組織能力和提高程序設計能力而設置的增強實踐能力的課程。目的:學習數(shù)據(jù)結(jié)構(gòu)課程,旨在使學生學會分析研究數(shù)據(jù)對象的特性,學會數(shù)據(jù)的組織方法,以便選擇合適的數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)以及相應操作,把現(xiàn)實世界中的問題轉(zhuǎn)換為計算機內(nèi)部的表示和處理,這就是一個良好的程序設計技能訓練的過程。提高學生的程序設計能力、掌握基本知識、基本技能,提高算法設計質(zhì)量與程序設計素質(zhì)的培養(yǎng)就是本門課程的課程設計的目的。&l

5、t;/p><p>  任務:根據(jù)題目要求,完成算法設計與程序?qū)崿F(xiàn),并按規(guī)定寫出課程設計報告。</p><p>  二、課程設計的內(nèi)容與基本要求</p><p>  設計題目:用C語言實現(xiàn)一元多項式的加減法計算</p><p>  〔問題描述〕輸入并建立兩個多項式并輸出多項式</p><p>  設計一個程序:對兩個多項式進

6、行加、減法運算,建立一個新多項式并輸出。</p><p>  〔實現(xiàn)提示〕:選擇單鏈表存儲多項式</p><p>  具體要完成的任務是:</p><p>  A. 編制完成上述問題的C語言程序、進行程序調(diào)試并能得出正確的運行結(jié)果。</p><p>  B. 寫出規(guī)范的課程設計報告書;</p><p>  三、課程設計

7、步驟及時間進度和場地安排</p><p>  時間:本課程設計安排在第18周 地點:現(xiàn)代教育中心</p><p><b>  具體時間安排如下:</b></p><p>  第一天:布置題目,確定任務、查找相關(guān)資料</p><p>  第二天~第四天:功能分析,編寫程序,調(diào)試程序、運行系統(tǒng);</p>&

8、lt;p>  第五天上午:撰寫設計報告;</p><p>  第五天下午:程序驗收、答辯。</p><p>  四、課程設計考核及評分標準</p><p>  課程設計考核將綜合考慮學生的系統(tǒng)設計方案、運行結(jié)果、課程設計報告書的質(zhì)量、態(tài)度、考勤、答辯情況等各因素。具體評分標準如下:</p><p> ?。?)設計方案正確,具有可行性、創(chuàng)

9、新性; 30分</p><p> ?。?)系統(tǒng)開發(fā)效果較好; 20分</p><p> ?。?)設計報告規(guī)范、課程設計報告質(zhì)量高; 20分</p><p> ?。?)課程設計答辯時,問題回答正確; 20分</p>

10、<p> ?。?)態(tài)度認真、刻苦鉆研、遵守紀律; 10分</p><p>  按上述五項分別記分后求和,總分按五級制記載最后成績。</p><p>  優(yōu)秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),不及格(0~59分)</p><p><b>  設計題目</

11、b></p><p>  用C語言實現(xiàn)一元多項式的加減法計算</p><p>  〔問題描述〕輸入并建立兩個多項式并輸出多項式</p><p>  開發(fā)環(huán)境、采用的語言</p><p>  開發(fā)環(huán)境:vc6.0/windows xp</p><p><b>  采用的語言:C語言</b>&l

12、t;/p><p><b>  設計思想</b></p><p>  我的設計思想是輸入按冪項從大到小輸入一元多項,并將一元多項式相等冪項進行加減運算,在加法運算中將無相等冪項直接輸入到結(jié)果單鏈表中,在減法運算中將被減的一元多項式的無相等冪項直接輸入到結(jié)果單鏈表中,將減項的一元多項式的無相等冪項變號后輸出到結(jié)果單鏈表中,輸入2個方程式之后可以得出2式相加、相減的全部結(jié)果,也

13、是簡化了算法運行時間難度。雖然浪費了一些計算能力,但是簡化了代碼復雜度。</p><p><b>  程序總的流程圖</b></p><p><b>  圖一:程序流程圖</b></p><p>  數(shù)據(jù)結(jié)構(gòu)說明及模塊算法說明</p><p>  數(shù)據(jù)結(jié)構(gòu)說明:使用單鏈表來表示一元多項式:</

14、p><p>  typedef struct linklist</p><p><b>  {</b></p><p>  int mi; //mi是冪項</p><p>  int xishu;//xishu是系數(shù)</p><p>  struct

15、 linklist *next;//next</p><p><b>  }*list;</b></p><p><b>  模塊算法說明</b></p><p>  list creatpoly(void)</p><p>  創(chuàng)建一個新的一元多項式,用do循環(huán)輸入一元多項式,以“系數(shù),冪項”

16、的格式輸入數(shù)據(jù),當系數(shù)與冪項同時為零時停止輸入。</p><p>  void printpoly(list head) </p><p>  輸出一個一元多項式,將多項式從頭到尾輸出,使用一個IF語句來區(qū)分第一項前是否有加號,使用一個whlie在當p->不為NULL時,進行循環(huán)輸出+ax^b的形式,當a為零時輸出空白,當b為零時輸出+ax,當a<0時輸出-ax^b的形式,等等

17、。以應對多項式中出現(xiàn)的各種情況。</p><p>  list addpoly(list pa, list pb)</p><p>  將兩個多項式執(zhí)行pa+pb的計算,從高冪次項向低冪次項,無等冪項直接將數(shù)值輸出結(jié)果單鏈表,有等冪項兩系數(shù)相加后輸出到結(jié)果單鏈表中。</p><p>  list misepoly(list pa, list pb)</p&

18、gt;<p>  將兩個多項式執(zhí)行pa-pb的計算,從高冪次項向低冪次項,無等冪項的pa式中直接將數(shù)值輸出結(jié)果單鏈表、pb式中將系數(shù)變號后輸出到結(jié)果單鏈表中,有等冪項兩系數(shù)相減后輸出到結(jié)果單鏈表中。</p><p>  int main(void)</p><p>  主函數(shù),具有部分交互界面以及各個函數(shù)的調(diào)用過程。可以在主函數(shù)中選擇是否不斷的進行運算,用一個whi

19、le來循環(huán)整個程序。</p><p>  程序運行說明及結(jié)果截圖</p><p>  程序開始運行輸入第一個一元多項式:</p><p><b>  圖二:算法的開始</b></p><p>  輸入第一個一元多項式之后輸入第二個一元多項式:</p><p>  圖三:第一個多項式輸入結(jié)束<

20、/p><p>  程序運算后得到結(jié)果:</p><p>  圖四:運算結(jié)束之后得到結(jié)果</p><p>  按下1后 程序繼續(xù)運行:</p><p>  圖五:按下1后程序繼續(xù)運行</p><p>  程序調(diào)試及測試過程記載</p><p>  本程序從源碼開始經(jīng)過多次調(diào)試,一開始創(chuàng)建一元多項式并沒

21、有遇到什么問題,但是在一元多項式的加法時遇到一些問題,在不從高到低的順序輸入時會導致計算混亂,多出很多項。后來將項從高到底順序輸入,并且沒有重復冪項時,此問題解決。</p><p>  然后是減法運算,若第一個多項式中沒有比如5次冪項,而第二個多項式中有5次冪項,1式減2式的結(jié)果卻為正的五次冪項,經(jīng)過修改后,無此問題。</p><p>  最后是輸出時產(chǎn)生的問題,第一項的輸出若為正的情況是

22、沒有符號的,若第一項系數(shù)為零時還會輸出一個零的情況,還有加法運算或者減法運算后,其計算結(jié)果前面沒有‘+’號的情況,最后將程序制作成可以自動識別正負項以及零項。</p><p><b>  總結(jié)及心得體會</b></p><p>  這次數(shù)據(jù)結(jié)構(gòu)的課程設計讓我加深了對數(shù)據(jù)結(jié)構(gòu)的理解,同時也明白了更多知識。讓我加深了對單鏈表的運用。</p><p>

23、;  在制作這個程序的同時,加深了我對C語言的運用以及理解,讓我的編譯水平的到了一定的提高。我覺得自己的能力提高了,也讓我明白數(shù)據(jù)結(jié)構(gòu)在生活中的運用。</p><p>  我明白了理論與實際應用相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力。培養(yǎng)了基本的、良好的程序設計技能以及合作能力。</p><p>  這次課程設計同樣提高了我的綜合運用所學知識的能力。并對VC有了更深入的了

24、解。《數(shù)據(jù)結(jié)構(gòu)》是一門實踐性很強的課程,上機實習是對學生全面綜合素質(zhì)進行訓練的一種最基本的方法,是與課堂聽講、自學和練習相輔相成的、必不可少的一個教學環(huán)節(jié)。上機實習一方面能使書本上的知識變“活”,起到深化理解和靈活掌握教學內(nèi)容的目的;另一方面,上機實習是對學生軟件設計的綜合能力的訓練,包括問題分析,總體結(jié)構(gòu)設計,程序設計基本技能和技巧的訓練。</p><p><b>  附錄:源代碼</b>

25、</p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  #include<Windows.h></p><p>  typedef struct linklist</p><p><b>  {

26、</b></p><p><b>  int mi;</b></p><p>  int xishu;</p><p>  struct linklist *next;</p><p><b>  }*list;</b></p><p>  list creatp

27、oly(void)</p><p><b>  {</b></p><p><b>  int a, n;</b></p><p>  int i = 1;</p><p>  list head, s, p;</p><p>  printf("輸入一元多項式(以

28、0,0標志結(jié)束):\n");</p><p>  printf("要求:按冪從大到小的次序輸入各個結(jié)點\n");</p><p>  head = (list)malloc(sizeof(struct linklist));</p><p>  head->next = NULL;</p><p><

29、b>  p = head;</b></p><p><b>  do</b></p><p><b>  {</b></p><p>  printf("第%d次-> 系數(shù),冪:", i);</p><p><b>  i++;</b>

30、;</p><p>  scanf_s("%d,%d", &a, &n);</p><p>  if (a != 0 || n != 0)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));&

31、lt;/p><p>  s->xishu = a;</p><p>  s->mi = n;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p&g

32、t;<b>  }</b></p><p>  } while (a != 0 || n != 0);</p><p>  printf("\n");</p><p>  return(head);</p><p><b>  }</b></p><p>

33、  void printpoly(list head)</p><p><b>  {</b></p><p><b>  list p;</b></p><p>  int first = 1;</p><p>  p = head->next;</p><p>  

34、while (p != NULL)</p><p><b>  {</b></p><p>  if (first)</p><p><b>  {</b></p><p>  if (p->xishu == 1)</p><p>  printf("x^%d

35、", p->mi);</p><p>  else if (p->xishu == 0)</p><p>  printf("");</p><p>  else if (p->mi == 0)</p><p>  printf("%d", p->xishu);<

36、/p><p><b>  else</b></p><p>  printf("%dx^%d", p->xishu, p->mi);</p><p>  first = 0;</p><p><b>  }</b></p><p><b>

37、;  else</b></p><p><b>  {</b></p><p>  if (p->xishu > 0)</p><p><b>  {</b></p><p>  if (p->mi == 1)</p><p>  printf(

38、"+%dx", p->xishu);</p><p>  else if (p->mi == 0)</p><p>  printf("+%d", p->xishu);</p><p><b>  else </b></p><p>  printf("

39、+%dx^%d", p->xishu, p->mi);</p><p><b>  }</b></p><p>  else if (p->xishu < 0)</p><p><b>  {</b></p><p>  if (p->mi == 1)<

40、/p><p>  printf("%dx", p->xishu);</p><p>  else if (p->mi == 0)</p><p>  printf("%d", p->xishu);</p><p><b>  else </b></p>

41、<p>  printf("%dx^%d", p->xishu, p->mi);</p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("");</p><p><b

42、>  }</b></p><p>  p = p->next;</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  list addpo

43、ly(list pa, list pb) /*兩個多項式的加法運算*/</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  list pc, s, p; /*pc是新產(chǎn)生的鏈表頭結(jié)點指針*/</p&g

44、t;<p>  pa = pa->next;</p><p>  pb = pb->next;</p><p>  pc = (list)malloc(sizeof(struct linklist)); /*產(chǎn)生附加的表頭結(jié)點*/</p><p>  pc->next = NULL;</p><p>  p

45、= pc; /* P 指向PC鏈表的最后結(jié)點*/</p><p>  while (pa != NULL&&pb != NULL)</p><p><b>  {</b></p><p>  if (pa->mi>pb->mi)</p><p><b

46、>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist)); /* 建新結(jié)點*/</p><p>  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;</p><p>  s->ne

47、xt = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pa = pa->next;</p><p><b>  }</b></p><p>  else if (pa->mi

48、<pb->mi)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pb->mi;</p><p>  s->xishu = pb->xishu;<

49、/p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pb = pb->next;</p><p><b>  }</b></p>&l

50、t;p>  else/* 兩項冪相等*/</p><p><b>  {</b></p><p>  n = pa->xishu + pb->xishu;</p><p>  if (n != 0)</p><p><b>  {</b></p><p>

51、;  s = (list)malloc(sizeof(struct linklist));</p><p>  s->xishu = n;</p><p>  s->mi = pa->mi;</p><p>  s->next = NULL;</p><p>  p->next = s;</p>&

52、lt;p><b>  p = s;</b></p><p><b>  }</b></p><p>  pa = pa->next;</p><p>  pb = pb->next;</p><p><b>  }</b></p><p&g

53、t;<b>  }</b></p><p>  while (pa != NULL)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pa->mi;<

54、;/p><p>  s->xishu = pa->xishu;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pa = pa->next;</p

55、><p><b>  }</b></p><p>  while (pb != NULL)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi =

56、pb->mi;</p><p>  s->xishu = -pb->xishu;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pb = pb-&

57、gt;next;</p><p><b>  }</b></p><p>  return (pc);</p><p><b>  }</b></p><p>  list misepoly(list pa, list pb) /*兩個多項式的減法運算*/</p><

58、p><b>  {</b></p><p><b>  int n;</b></p><p>  list pc, s, p; /*pc是新產(chǎn)生的鏈表頭結(jié)點指針*/</p><p>  pa = pa->next;</p><p>  pb

59、 = pb->next;</p><p>  pc = (list)malloc(sizeof(struct linklist)); /*產(chǎn)生附加的表頭結(jié)點*/</p><p>  pc->next = NULL;</p><p>  p = pc; /* P 指向PC鏈表的最后結(jié)點*/</p><p

60、>  while (pa != NULL&&pb != NULL)</p><p><b>  {</b></p><p>  if (pa->mi>pb->mi)</p><p><b>  {</b></p><p>  s = (list)malloc(

61、sizeof(struct linklist)); /* 建新結(jié)點*/</p><p>  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;</p><p>  s->next = NULL;</p><p>  p->next = s;</p>

62、;<p><b>  p = s;</b></p><p>  pa = pa->next;</p><p><b>  }</b></p><p>  else if (pa->mi<pb->mi)</p><p><b>  {</b>

63、</p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pb->mi;</p><p>  s->xishu = - pb->xishu;</p><p>  s->next = NULL;</p><p&

64、gt;  p->next = s;</p><p><b>  p = s;</b></p><p>  pb = pb->next;</p><p><b>  }</b></p><p>  else/* 兩項冪相等*/</p><p><b>

65、  {</b></p><p>  n = pa->xishu - pb->xishu;</p><p>  if (n != 0)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p>

66、<p>  s->xishu = n;</p><p>  s->mi = pa->mi;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>

67、;<b>  }</b></p><p>  pa = pa->next;</p><p>  pb = pb->next;</p><p><b>  }</b></p><p><b>  }</b></p><p>  while (p

68、a != NULL)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;</p&g

69、t;<p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pa = pa->next;</p><p><b>  }</b></p><p&

70、gt;  while (pb != NULL)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pb->mi;</p><p>  s->xishu = - pb->

71、;xishu;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pb = pb->next;</p><p><b>  }</b><

72、;/p><p>  return (pc);</p><p><b>  }</b></p><p>  int main(void)</p><p><b>  {</b></p><p>  int choose;</p><p><b>

73、  do</b></p><p><b>  {</b></p><p>  list poly1, poly2, poly3,poly4,poly5;</p><p>  printf("建立第1個一元多項式=>\n");</p><p>  poly1 = creatpoly()

74、;</p><p>  printf("建立第2個一元多項式=>\n");</p><p>  poly2 = creatpoly();</p><p>  poly3 = addpoly(poly1, poly2);</p><p>  poly4 = misepoly(poly1, poly2);</p&g

75、t;<p>  poly5 = misepoly(poly2,poly1);</p><p>  printf("第1個一元多項式為\n");</p><p>  printpoly(poly1);</p><p>  printf("第2個一元多項式為\n");</p><p>  pr

76、intpoly(poly2);</p><p>  printf("加法運算后的一元多項式為\n");</p><p>  printpoly(poly3);</p><p>  printf("減法(1-2)運算后的一元多項式為\n");</p><p>  printpoly(poly4);<

77、/p><p>  printf("減法(2-1)運算后的一元多項式為\n");</p><p>  printpoly(poly5);</p><p>  printf("你還要計算其它的多項式嗎?若是按1,若不是按0退出\n");</p><p>  scanf_s("%d",&

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論