一元多項式課程設計--用c語言實現(xiàn)一元多項式的加減法計算_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

2、;b>  采用的語言:C語言</b></p><p><b>  設計思想</b></p><p>  我的設計思想是輸入按冪項從大到小輸入一元多項,并將一元多項式相等冪項進行加減運算,在加法運算中將無相等冪項直接輸入到結果單鏈表中,在減法運算中將被減的一元多項式的無相等冪項直接輸入到結果單鏈表中,將減項的一元多項式的無相等冪項變號后輸出到結果單鏈表

3、中,輸入2個方程式之后可以得出2式相加、相減的全部結果,也是簡化了算法運行時間難度。雖然浪費了一些計算能力,但是簡化了代碼復雜度。</p><p><b>  程序總的流程圖</b></p><p><b>  圖一:程序流程圖</b></p><p>  數(shù)據(jù)結構說明及模塊算法說明</p><p>

4、;  數(shù)據(jù)結構說明:使用單鏈表來表示一元多項式:</p><p>  typedef struct linklist</p><p><b>  {</b></p><p>  int mi; //mi是冪項</p><p>  int xishu;//xishu是系數(shù)

5、</p><p>  struct linklist *next;//next</p><p><b>  }*list;</b></p><p><b>  模塊算法說明</b></p><p>  list creatpoly(void)</p><p>  創(chuàng)建一個

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

7、零時輸出+ax,當a<0時輸出-ax^b的形式,等等。以應對多項式中出現(xiàn)的各種情況。</p><p>  list addpoly(list pa, list pb)</p><p>  將兩個多項式執(zhí)行pa+pb的計算,從高冪次項向低冪次項,無等冪項直接將數(shù)值輸出結果單鏈表,有等冪項兩系數(shù)相加后輸出到結果單鏈表中。</p><p>  list misep

8、oly(list pa, list pb)</p><p>  將兩個多項式執(zhí)行pa-pb的計算,從高冪次項向低冪次項,無等冪項的pa式中直接將數(shù)值輸出結果單鏈表、pb式中將系數(shù)變號后輸出到結果單鏈表中,有等冪項兩系數(shù)相減后輸出到結果單鏈表中。</p><p>  int main(void)</p><p>  主函數(shù),具有部分交互界面以及各個函數(shù)的調

9、用過程??梢栽谥骱瘮?shù)中選擇是否不斷的進行運算,用一個while來循環(huán)整個程序。</p><p>  程序運行說明及結果截圖</p><p>  程序開始運行輸入第一個一元多項式:</p><p><b>  圖二:算法的開始</b></p><p>  輸入第一個一元多項式之后輸入第二個一元多項式:</p>

10、<p>  圖三:第一個多項式輸入結束</p><p>  程序運算后得到結果:</p><p>  圖四:運算結束之后得到結果</p><p>  按下1后 程序繼續(xù)運行:</p><p>  圖五:按下1后程序繼續(xù)運行</p><p>  程序調試及測試過程記載</p><p>

11、  本程序從源碼開始經過多次調試,一開始創(chuàng)建一元多項式并沒有遇到什么問題,但是在一元多項式的加法時遇到一些問題,在不從高到低的順序輸入時會導致計算混亂,多出很多項。后來將項從高到底順序輸入,并且沒有重復冪項時,此問題解決。</p><p>  然后是減法運算,若第一個多項式中沒有比如5次冪項,而第二個多項式中有5次冪項,1式減2式的結果卻為正的五次冪項,經過修改后,無此問題。</p><p&g

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

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

14、樣提高了我的綜合運用所學知識的能力。并對VC有了更深入的了解?!稊?shù)據(jù)結構》是一門實踐性很強的課程,上機實習是對學生全面綜合素質進行訓練的一種最基本的方法,是與課堂聽講、自學和練習相輔相成的、必不可少的一個教學環(huán)節(jié)。上機實習一方面能使書本上的知識變“活”,起到深化理解和靈活掌握教學內容的目的;另一方面,上機實習是對學生軟件設計的綜合能力的訓練,包括問題分析,總體結構設計,程序設計基本技能和技巧的訓練。</p><p&g

15、t;<b>  附錄:源代碼</b></p><p>  #include<stdio.h></p><p>  #include<malloc.h></p><p>  #include<Windows.h></p><p>  typedef struct linklist<

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

17、p><p>  list creatpoly(void)</p><p><b>  {</b></p><p><b>  int a, n;</b></p><p>  int i = 1;</p><p>  list head, s, p;</p><

18、p>  printf("輸入一元多項式(以0,0標志結束):\n");</p><p>  printf("要求:按冪從大到小的次序輸入各個結點\n");</p><p>  head = (list)malloc(sizeof(struct linklist));</p><p>  head->next = N

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

20、p><b>  i++;</b></p><p>  scanf_s("%d,%d", &a, &n);</p><p>  if (a != 0 || n != 0)</p><p><b>  {</b></p><p>  s = (list)mall

21、oc(sizeof(struct linklist));</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;

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

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

24、;next;</p><p>  while (p != NULL)</p><p><b>  {</b></p><p>  if (first)</p><p><b>  {</b></p><p>  if (p->xishu == 1)</p>

25、<p>  printf("x^%d", p->mi);</p><p>  else if (p->xishu == 0)</p><p>  printf("");</p><p>  else if (p->mi == 0)</p><p>  printf(&quo

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

27、</p><p><b>  else</b></p><p><b>  {</b></p><p>  if (p->xishu > 0)</p><p><b>  {</b></p><p>  if (p->mi == 1)&

28、lt;/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&

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

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

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

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

33、/p><p>  list addpoly(list pa, list pb) /*兩個多項式的加法運算*/</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  list pc, s, p;

34、 /*pc是新產生的鏈表頭結點指針*/</p><p>  pa = pa->next;</p><p>  pb = pb->next;</p><p>  pc = (list)malloc(sizeof(struct linklist)); /*產生附加的表頭結點*/</p><p>  pc->next = N

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

36、mi)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist)); /* 建新結點*/</p><p>  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;&l

37、t;/p><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>

38、<p>  else if (pa->mi<pb->mi)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p>  s->mi = pb->mi;</p><p>  s-

39、>xishu = pb->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&g

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

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

42、 p->next = s;</p><p><b>  p = s;</b></p><p><b>  }</b></p><p>  pa = pa->next;</p><p>  pb = pb->next;</p><p><b>  }

43、</b></p><p><b>  }</b></p><p>  while (pa != NULL)</p><p><b>  {</b></p><p>  s = (list)malloc(sizeof(struct linklist));</p><p&

44、gt;  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;</p><p>  s->next = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p

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

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

47、;/p><p>  pb = pb->next;</p><p><b>  }</b></p><p>  return (pc);</p><p><b>  }</b></p><p>  list misepoly(list pa, list pb) /

48、*兩個多項式的減法運算*/</p><p><b>  {</b></p><p><b>  int n;</b></p><p>  list pc, s, p; /*pc是新產生的鏈表頭結點指針*/</p><p>  pa = pa->n

49、ext;</p><p>  pb = pb->next;</p><p>  pc = (list)malloc(sizeof(struct linklist)); /*產生附加的表頭結點*/</p><p>  pc->next = NULL;</p><p>  p = pc; /* P 指

50、向PC鏈表的最后結點*/</p><p>  while (pa != NULL&&pb != NULL)</p><p><b>  {</b></p><p>  if (pa->mi>pb->mi)</p><p><b>  {</b></p>

51、<p>  s = (list)malloc(sizeof(struct linklist)); /* 建新結點*/</p><p>  s->mi = pa->mi;</p><p>  s->xishu = pa->xishu;</p><p>  s->next = NULL;</p><p&

52、gt;  p->next = s;</p><p><b>  p = s;</b></p><p>  pa = pa->next;</p><p><b>  }</b></p><p>  else if (pa->mi<pb->mi)</p>&l

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

54、ext = NULL;</p><p>  p->next = s;</p><p><b>  p = s;</b></p><p>  pb = pb->next;</p><p><b>  }</b></p><p>  else/* 兩項冪相等*/&

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

56、(struct linklist));</p><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;&

57、lt;/b></p><p><b>  }</b></p><p>  pa = pa->next;</p><p>  pb = pb->next;</p><p><b>  }</b></p><p><b>  }</b>&l

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

59、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><p><b>  

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

61、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->next;</p><p

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

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

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

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

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

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

68、  scanf_s("%d",&choose);</p><p>  }while(choose);</p><p>  system("pause");</p><p><b>  return 0;</b></p><p><b>  }</b>&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論