c++多項(xiàng)式課程設(shè)計(jì)---多項(xiàng)式的運(yùn)算_第1頁(yè)
已閱讀1頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《計(jì)算機(jī)科學(xué)與應(yīng)用系程序類課程設(shè)計(jì)》</p><p><b>  設(shè)計(jì)報(bào)告書(shū)</b></p><p>  題 目: 多項(xiàng)式的運(yùn)算 </p><p>  指導(dǎo)教師: </p><p>  姓 名:

2、 </p><p>  學(xué) 號(hào): </p><p>  日 期: 2012/5/16 </p><p>  計(jì)算機(jī)科學(xué)與應(yīng)用系 2011-2012學(xué)年第二學(xué)期</p><p><b>  需求分

3、析</b></p><p>  輸入部分,要求用戶能從屏幕上輸入兩個(gè)一元多項(xiàng)式。如多項(xiàng)式A為:x^3+2x^2+4;多項(xiàng)式B為:-x^3+4x^2+2。</p><p>  程序通過(guò)語(yǔ)句得到這兩個(gè)字符串,進(jìn)行解析,分解出系數(shù)和指數(shù),存儲(chǔ)在不同的線性表LA,LB中。</p><p>  然后,程序基于線性表LA、LB來(lái)實(shí)現(xiàn)多項(xiàng)式的加、減、乘、運(yùn)算。<

4、/p><p>  最終,輸出部分將得到的運(yùn)算結(jié)果輸出,如上述多項(xiàng)式A和B的和為:6x^2+6。</p><p><b>  系統(tǒng)主要功能</b></p><p>  用于一元多項(xiàng)式的加減乘運(yùn)算。</p><p><b>  流程圖</b></p><p><b>  四

5、、 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p>  1. 定義多項(xiàng)式類class Polynomial;</p><p>  2. 把多項(xiàng)式的指數(shù)和系數(shù)結(jié)合定義為一個(gè)類class PolyNode;</p><p>  3. 用鏈表保存多項(xiàng)式list<PolyNode> L;</p><p><b>  五、 類設(shè)

6、計(jì)</b></p><p><b>  1.多項(xiàng)式的項(xiàng)類</b></p><p>  指數(shù)、系數(shù)可以描述多項(xiàng)式的一項(xiàng),作為一個(gè)整體來(lái)存儲(chǔ);</p><p>  class PolyNode</p><p><b>  {</b></p><p><b>

7、  public:</b></p><p>  double xishu;//系數(shù)</p><p>  int zhishu;//指數(shù)</p><p><b>  public:</b></p><p>  PolyNode(void){};</p><p>  ~PolyNode(v

8、oid){};</p><p>  PolyNode(double xishu, int zhishu)//構(gòu)造函數(shù),為xishu、zhishu賦值</p><p>  bool operator< (PolyNode b)const//判斷兩項(xiàng)是否滿足小的關(guān)系,指數(shù)小者小</p><p>  bool operator> (PolyNode b)con

9、st //判斷兩項(xiàng)是否滿足大的關(guān)系,指數(shù)大者大</p><p>  bool operator== (PolyNode b)const//判斷兩項(xiàng)是否滿足等的關(guān)系</p><p><b>  };</b></p><p><b>  2.多項(xiàng)式類</b></p><p>  在多項(xiàng)式類中,必須有存儲(chǔ)

10、多項(xiàng)式各項(xiàng)的線性表,還必須有實(shí)現(xiàn)多項(xiàng)式運(yùn)算的成員函數(shù)。</p><p><b>  類的定義如下:</b></p><p>  class Polynomial//多項(xiàng)式類,其中實(shí)現(xiàn)了多項(xiàng)式的加減乘除。</p><p><b>  {</b></p><p><b>  private:&

11、lt;/b></p><p>  list<PolyNode> L;//用于存放多項(xiàng)式的鏈表</p><p><b>  public:</b></p><p>  Polynomial()//構(gòu)造函數(shù)</p><p><b>  {};</b></p><p&

12、gt;  ~Polynomial()//析構(gòu)函數(shù)</p><p><b>  {</b></p><p>  L.clear();//清空鏈表</p><p><b>  };</b></p><p>  void print()//輸出多項(xiàng)式</p><p>  void

13、Insert(PolyNode e) //插入一個(gè)結(jié)點(diǎn),使得插入后表中結(jié)點(diǎn)仍然按指數(shù)有序還要有合并同類項(xiàng)的功能</p><p>  void Insert(double xishu,int zhishu)</p><p>  Polynomial operator+(Polynomial b) //重載多項(xiàng)式的加法運(yùn)算符</p><p>  Polynomial o

14、perator-(Polynomial b) //重載多項(xiàng)式的減法運(yùn)算符</p><p>  Polynomial operator*(Polynomial b) //重載多項(xiàng)式的乘法運(yùn)算符</p><p>  void Input(Polynomial &p) //輸入多項(xiàng)式</p><p><b>  };</b></p>

15、;<p><b>  六、 主要算法設(shè)計(jì)</b></p><p>  1.用鏈表保存兩個(gè)多項(xiàng)式(list<PolyNode> L;);</p><p>  2.將多項(xiàng)式的項(xiàng)封裝為一個(gè)類(class PolyNode);</p><p>  3.用運(yùn)算符重載的方式實(shí)現(xiàn)多項(xiàng)式的加減乘運(yùn)算,創(chuàng)建一個(gè)用于遍歷的指針對(duì)鏈表進(jìn)行遍

16、歷(list<PolyNode>::iterator i;),先將指數(shù)相同的項(xiàng)的系數(shù)相加</p><p>  if(i->zhishu ==e.zhishu )</p><p><b>  {//合并同類項(xiàng)</b></p><p>  i->xishu+=e.xishu;</p><p>  if

17、(i->xishu==0)</p><p>  L.erase(i);</p><p> ?。催\(yùn)算之前合并同類項(xiàng)),指數(shù)不同按大小順序插入;</p><p>  else if(i->zhishu >e.zhishu )</p><p>  L.insert(i,e);</p><p>  4.減法

18、時(shí)將另一個(gè)多項(xiàng)式每一項(xiàng)系數(shù)乘個(gè)-1再相加;</p><p>  PolyNode temp=*i;</p><p>  temp.xishu*=-1;</p><p>  t.Insert(temp);</p><p>  5.乘法用第一個(gè)多項(xiàng)式的每一項(xiàng)與第二個(gè)多項(xiàng)式的每一項(xiàng)相乘即系數(shù)相乘、指數(shù)相加。</p><p>

19、  for(i=b.L.begin();i!=b.L.end();i++)</p><p>  for(j=L.begin();j!=L.end();j++)</p><p><b>  {</b></p><p>  PolyNode temp;</p><p>  temp.xishu=i->xishu*j-&

20、gt;xishu;</p><p>  temp.zhishu=i->zhishu+j->zhishu;</p><p>  if(temp.xishu)</p><p>  t.Insert(temp);</p><p><b>  }</b></p><p><b>  

21、七、 主要代碼</b></p><p><b>  1.多項(xiàng)式的輸出</b></p><p>  void print()</p><p><b>  {</b></p><p>  list<PolyNode>::iterator i;</p><p&g

22、t;  if(L.size()==0)</p><p><b>  {</b></p><p>  cout<<"0"<<endl;</p><p><b>  return;</b></p><p><b>  }</b></

23、p><p>  i=L.begin();</p><p>  cout<<i->xishu<<"X^"<<i->zhishu;//打印多項(xiàng)式的第一項(xiàng)</p><p><b>  i++;</b></p><p>  for(;i!=L.end();i++

24、)//打印多項(xiàng)式的其他項(xiàng)</p><p><b>  {</b></p><p>  if(i->xishu>0)</p><p>  cout<<"+"<<i->xishu<<"X^"<<i->zhishu;</p>

25、<p><b>  else</b></p><p>  cout<<i->xishu<<"X^"<<i->zhishu;</p><p><b>  }</b></p><p>  cout<<endl;</p>&l

26、t;p><b>  }</b></p><p><b>  2.插入與合并</b></p><p>  void Insert(PolyNode e)</p><p>  {//插入一個(gè)結(jié)點(diǎn),使得插入后表中結(jié)點(diǎn)仍然按指數(shù)有序</p><p>  //還要有合并同類項(xiàng)的功能</p>

27、<p>  list<PolyNode>::iterator i;</p><p>  for(i=L.begin();i!=L.end();i++)</p><p><b>  {</b></p><p>  if(i->zhishu ==e.zhishu )</p><p><b&

28、gt;  {//合并同類項(xiàng)</b></p><p>  i->xishu+=e.xishu;</p><p>  if(i->xishu==0)</p><p>  L.erase(i);</p><p><b>  break;</b></p><p><b>

29、  }</b></p><p>  else if(i->zhishu >e.zhishu )</p><p>  {//找到插入位置,插入</p><p>  L.insert(i,e);</p><p><b>  break;</b></p><p><b>

30、;  }</b></p><p><b>  }</b></p><p>  if(i==L.end())</p><p>  L.push_back(e);</p><p>  //print();</p><p><b>  }</b></p>

31、<p>  void Insert(double xishu,int zhishu)</p><p><b>  {</b></p><p>  PolyNode e(xishu,zhishu);</p><p>  Insert(e);</p><p><b>  }</b></p

32、><p><b>  3.加法</b></p><p>  Polynomial operator+(Polynomial b)</p><p><b>  {</b></p><p>  Polynomial t;</p><p><b>  t.L=L;</b

33、></p><p>  list<PolyNode>::iterator i;</p><p>  for(i=b.L.begin();i!=b.L.end();i++)</p><p>  t.Insert(*i);</p><p><b>  return t;</b></p><

34、;p><b>  }</b></p><p><b>  4.減法</b></p><p>  Polynomial operator-(Polynomial b)</p><p><b>  {</b></p><p>  Polynomial t;</p>

35、<p><b>  t.L=L;</b></p><p>  list<PolyNode>::iterator i;</p><p>  for(i=b.L.begin();i!=b.L.end();i++)</p><p><b>  {</b></p><p>  Po

36、lyNode temp=*i;</p><p>  temp.xishu*=-1;</p><p>  t.Insert(temp);</p><p><b>  }</b></p><p><b>  return t;</b></p><p><b>  }&l

37、t;/b></p><p><b>  5.乘法</b></p><p>  Polynomial operator*(Polynomial b)</p><p><b>  {</b></p><p>  Polynomial t;</p><p>  list<

38、;PolyNode>::iterator i,j;</p><p>  for(i=b.L.begin();i!=b.L.end();i++)</p><p>  for(j=L.begin();j!=L.end();j++)</p><p><b>  {</b></p><p>  PolyNode temp;

39、</p><p>  temp.xishu=i->xishu*j->xishu;</p><p>  temp.zhishu=i->zhishu+j->zhishu;</p><p>  if(temp.xishu)</p><p>  t.Insert(temp);</p><p><b

40、>  }</b></p><p><b>  return t;</b></p><p><b>  }</b></p><p><b>  };</b></p><p><b>  6.多項(xiàng)式的輸入</b></p><

41、;p>  void Input(Polynomial &p)</p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入多項(xiàng)式的系數(shù)和指數(shù),以空格隔開(kāi),0 0表示結(jié)束:"<<endl;</p><p><b>  while(1)</b><

42、;/p><p><b>  {</b></p><p>  double xishu;</p><p>  int zhishu;</p><p>  cin>>xishu>>zhishu;</p><p>  if(xishu==0 && zhishu==0)

43、break;</p><p>  p.Insert(xishu,zhishu);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  7.主函數(shù)</b></p><p>  int main()&l

44、t;/p><p><b>  {</b></p><p>  Polynomial p,q,r;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  cout<<"1:輸入多

45、項(xiàng)式"<<endl;</p><p>  cout<<"2:加法"<<endl;</p><p>  cout<<"3:減法"<<endl;</p><p>  cout<<"4:乘法"<<endl;</p&

46、gt;<p>  cout<<"5:退出"<<endl;</p><p>  cout<<"請(qǐng)輸入你的選擇:";</p><p><b>  int t;</b></p><p><b>  cin>>t;</b><

47、/p><p><b>  if(t==1)</b></p><p><b>  {</b></p><p>  cout<<"請(qǐng)輸入第一個(gè)多項(xiàng)式的信息"<<endl;</p><p><b>  Input(p);</b></p&g

48、t;<p>  cout<<"請(qǐng)輸入第二個(gè)多項(xiàng)式的信息"<<endl;</p><p><b>  Input(q);</b></p><p><b>  }</b></p><p>  else if(t==2)</p><p><b

49、>  {</b></p><p><b>  r=p+q;</b></p><p>  cout<<"p=";</p><p>  p.print();</p><p>  cout<<"q=";</p><p> 

50、 q.print();</p><p>  cout<<"p+q=";</p><p>  r.print();</p><p><b>  }</b></p><p>  else if(t==3)</p><p><b>  {</b>&l

51、t;/p><p>  cout<<"p=";</p><p>  p.print();</p><p>  cout<<"q=";</p><p>  q.print();</p><p>  cout<<"p-q=";<

52、/p><p><b>  r=p-q;</b></p><p>  r.print();</p><p><b>  }</b></p><p>  else if(t==4)</p><p><b>  {</b></p><p>

53、<b>  r=p*q;</b></p><p>  cout<<"p=";</p><p>  p.print();</p><p>  cout<<"q=";</p><p>  q.print();</p><p>  cout

54、<<"p*q=";</p><p>  r.print();</p><p><b>  }</b></p><p>  else if(t==5)</p><p><b>  break;</b></p><p><b>  }&l

55、t;/b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  八、 系統(tǒng)運(yùn)行結(jié)果樣例</p><p><b>  九、 結(jié)束語(yǔ)</b></p><p>  通過(guò)這次課程設(shè)計(jì),我感覺(jué)到

56、要真正做出一個(gè)程序并不很容易,但只要用心去做,總會(huì)有收獲,特別是當(dāng)我遇到問(wèn)題,問(wèn)老師,問(wèn)同學(xué),想盡辦法去解決,最后終于找到方法時(shí),心里的那份喜悅之情真是難以形容.編寫(xiě)程序中遇到問(wèn)題再所難免,應(yīng)耐心探究其中的原因,從出現(xiàn)問(wèn)題的地方起,并聯(lián)系前后程序,仔細(xì)推敲,逐個(gè)排查.直到最終搞清為止。無(wú)論如何,能比較圓滿的完成這個(gè)課程設(shè)計(jì)對(duì)我來(lái)說(shuō)是個(gè)極大的鼓舞,成為我漫漫編程路上的一個(gè)里程碑。</p><p><b>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論