多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第1頁(yè)
多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第2頁(yè)
多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第3頁(yè)
多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第4頁(yè)
多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)MFC_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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、封皮題目 班級(jí) 姓名 學(xué)號(hào) 日期課程設(shè)計(jì)任務(wù)書學(xué)院專業(yè)學(xué)生姓名學(xué)號(hào)設(shè)計(jì)題目多項(xiàng)式類的設(shè)計(jì)與實(shí)現(xiàn)內(nèi)容及要求:開發(fā)多項(xiàng)式類Polynomial ,多項(xiàng)式的每一項(xiàng)用鏈表的結(jié)點(diǎn)表示, 每項(xiàng)包含一個(gè)系數(shù)和一個(gè)指數(shù).例如:2x4的指數(shù)為4,系數(shù)為2.請(qǐng) 開發(fā)一個(gè)完整的Polynomial類,包括構(gòu)造函數(shù)、析構(gòu)函數(shù)以及“get 函數(shù)(讀取值)和“ set函數(shù)(設(shè)置值).該類還要提供以下重載的 運(yùn)算符:(1)重載加法運(yùn)算符+,將兩個(gè)多項(xiàng)式相加.(2)重載加法運(yùn)算符,將兩個(gè)多項(xiàng)式相減.(3)重載賦值運(yùn)算符=,將一個(gè)多項(xiàng)式賦給另外一個(gè)多項(xiàng)式.(4)重載加法運(yùn)算符*,將兩個(gè)多項(xiàng)式相乘.(5)編寫一個(gè)主函數(shù)測(cè)試多項(xiàng)式

2、類的上述功能.進(jìn)度安排:第17周:分析題目,查閱課題相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第18周:程序的設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第19周:程序測(cè)試與分析,撰寫課程設(shè)計(jì)報(bào)告,進(jìn)行辯論驗(yàn)收.指導(dǎo)教師簽字:學(xué)院院長(zhǎng)簽字年月年月日日1需求分析2算法根本原理3類設(shè)計(jì)4詳細(xì)設(shè)計(jì)4.1 類的接口設(shè)計(jì)4.2 類的實(shí)現(xiàn)4.3 主函數(shù)設(shè)計(jì)5 DOS界面程序運(yùn)行結(jié)果及分析5.1 程序運(yùn)彳T結(jié)果5.2 運(yùn)行結(jié)果分析6基于MFC勺圖形界面程序開發(fā)6.1 基于MFC勺圖形界面程序設(shè)計(jì) 6.2 程序測(cè)試6.3 MFW序編寫總結(jié)7參考文獻(xiàn)1需求分析(1)開發(fā)多項(xiàng)式類Polynomial ,多項(xiàng)式的每一項(xiàng)用鏈表的結(jié)點(diǎn)表示,每項(xiàng) 包含一個(gè)

3、系數(shù)和一個(gè)指數(shù).例如:2x4的指數(shù)為4,系數(shù)為2.請(qǐng)開發(fā)一個(gè)完整的 Polynomial類,包括構(gòu)造函數(shù)、析構(gòu)函數(shù)以及“ get函數(shù)(讀取值)和“ set 函數(shù)(設(shè)置值).(2)多項(xiàng)式的定義:n個(gè)單項(xiàng)式的代數(shù)和叫多項(xiàng)式.(3)程序測(cè)試數(shù)據(jù):P1:2x+3xA2+2xA4+3xA2P2:3xA2+2xA3(1)2算法根本原理設(shè)有2個(gè)多項(xiàng)式p1,p2P1:2x+3xA2+2xA4+3xA2P2:3xA2+2xA3實(shí)現(xiàn)多項(xiàng)式p1和p2的計(jì)算,關(guān)鍵是對(duì)p1和p2的指數(shù)和系數(shù)進(jìn)行加減生的操作, 我們可以先編輯一個(gè)基類 Polynominal 0通過鏈表和重載運(yùn)算符的方法來(lái)實(shí)現(xiàn).(1)多項(xiàng)式即個(gè)個(gè)單項(xiàng)式的

4、和,我們可以把一個(gè)多項(xiàng)式分解成一項(xiàng)一項(xiàng)來(lái)看, 每一項(xiàng)用鏈表的一個(gè)節(jié)點(diǎn)表示,每個(gè)節(jié)點(diǎn)包括一個(gè)單項(xiàng)式的系數(shù)、指數(shù)和指向該 節(jié)點(diǎn)類型的一個(gè)指針.(2)用 Polynominal 創(chuàng)立對(duì)象 p1、p2、p3,通過調(diào)用 Create(c1,e1,size1) 函 數(shù)來(lái)構(gòu)建多項(xiàng)式.(3)通過重載+、-、*以及=運(yùn)算符,對(duì)多項(xiàng)式進(jìn)行操作.(4)通過p1.Print() 來(lái)顯示結(jié)果.3類設(shè)計(jì)從上面的算法分析可以看到,本設(shè)計(jì)面臨的計(jì)算問題的關(guān)鍵是多項(xiàng)式運(yùn)算.可以定義一個(gè)多項(xiàng)式類 Polynominal 0(1)該類包括私有數(shù)據(jù)成員Node*head, Node是構(gòu)造的節(jié)點(diǎn)類型的結(jié)構(gòu)體, 包括系數(shù)、指數(shù)和指向該節(jié)

5、點(diǎn)類型的一個(gè)指針(2)成員函數(shù)包括 Polynominal()/ 構(gòu)造函數(shù), Polynominal(const Polynominal &)/拷貝構(gòu)造函數(shù),Polynominal()/ 析構(gòu)函數(shù) Node* get(inte);/讀取指數(shù)為e的項(xiàng),返回其指針,void set(double c,int e);/設(shè)置指數(shù)為 e 的項(xiàng)的系數(shù)為 c, void Create(double *c,int *e,int n);/創(chuàng)立多項(xiàng)式,friend Polynominal operator +(Polynominal a,Polynominal b);/重載 + 運(yùn)算符,friend Po

6、lynominal operator -(Polynominal a,Polynominal b);/重載- 運(yùn)算符,friend Polynominal operator *(Polynominal a,Polynominal b);/重載* 運(yùn)算符,friend ostream& operator<<(ostream& os, const Polynominal& a);Polynominal& operator =(Polynominal a);/ 重載=運(yùn)算符, void Print(ostream& os = cout) const

7、;/顯示函數(shù) void Copy(const Polynominal&a)/復(fù)制函數(shù)對(duì)以上進(jìn)行總結(jié),該程序只包含一個(gè)類即Polynomina ,對(duì)多項(xiàng)式的所有操作都抽象在該類中.4詳細(xì)設(shè)計(jì)程序主要分為三個(gè)局部:類聲明、類實(shí)現(xiàn)、主函數(shù).4.1 類的接口設(shè)計(jì)/類的聲明class Polynominal ( public:Polynominal() head=0; / 構(gòu)造函數(shù)Polynominal(const Polynominal &);/ 拷貝構(gòu)造函數(shù) Polynominal() Node *q,*p;p=head;while (p)/刪除鏈表 q=p->next;if

8、(p) delete p;p=q;)head=NULL;)Node* get(int e);/讀取指數(shù)為e的項(xiàng),返回其指針void set(double c,int e);/設(shè)置指數(shù)為e的項(xiàng)的系數(shù)為cvoid Create(double *c,int *e,int n);/創(chuàng)立多項(xiàng)式friend Polynominal operator +(Polynominal a,Polynominal b);/重載+運(yùn)算符friend Polynominal operator -(Polynominal a,Polynominal b);/重載-運(yùn)算符friend Polynominal operato

9、r *(Polynominal a,Polynominal b);/重載*運(yùn)算符friend ostream& operator<<(ostream& os, const Polynominal& a);Polynominal& operator =(Polynominal a);/重載=運(yùn)算符void Print(ostream& os = cout) const;void Copy(const Polynominal &a);void Addr()cout<<"鏈表頭指車+值為:"<<h

10、ead<<endl;private:Node *head;/鏈表頭指針;在程序中,聲明了個(gè)個(gè)運(yùn)算符的重載,通過 Node* get(int e);讀取指數(shù)為e的項(xiàng),返回其指車t,通過void set(double c,int e)設(shè)置指數(shù)為e的項(xiàng)的系數(shù)為c,多項(xiàng)式的的系數(shù)、指數(shù)以及指針全部采用了動(dòng)態(tài)內(nèi)存分配技術(shù),這些工作 都是由構(gòu)造函數(shù)和Create()函數(shù)完成,它們的清理工作在析構(gòu)函數(shù)中完成.4.2 類的實(shí)現(xiàn)/類實(shí)現(xiàn)#include <iostream.h>#include <cstdlib>#include <cmath>#define MA

11、XSIZE 15 struct Node/ 鏈表結(jié)點(diǎn) ( int exp;/ 指數(shù) double coef;/ 系數(shù) Node *next;); void Polynominal:Copy(const Polynominal &a) /復(fù)制對(duì)象(公用函數(shù))Node *t,*s,*p;p=a.head;s=head=0; while(p) t=new Node;if (head=0) head=t;t->coef=p->coef;t->exp=p->exp;p=p->next;if(s) s->next=t;s=t;)if (s) s->next

12、=0;)Polynominal:Polynominal(const Polynominal& a)/ 復(fù)制構(gòu)造函數(shù) Copy(a);)void Polynominal:Create(double *c,int *e,int n)/創(chuàng)立多項(xiàng)式if (n<1)cout<<"錯(cuò)誤:要?jiǎng)?chuàng)立多項(xiàng)式的項(xiàng)數(shù)必須大于零.n"else head=new Node;/創(chuàng)立頭結(jié)點(diǎn) head->coef=c0;head->exp=e0;Node *q,*p=head;for (int i=1;i<n;i+)(q=new Node;q->coef=c

13、i;q->exp=ei;p->next=q;p=q;p->next=0;Node* Polynominal二get(int e)/讀取指數(shù)為 e 的項(xiàng)(Node *p=head;while (p)(if (p->exp=e) return p;p=p->next;return p;/沒有找到,返回空指針void Polynominal:set(double c,int e)/將指數(shù)為 e 系數(shù)為 c 的項(xiàng)參加多項(xiàng)式(原多項(xiàng)式無(wú)指數(shù)為e的項(xiàng))(Node *q,*p,*t;t=new Node;t->coef=c;t->exp=e;if (head=0)(

14、head=t;head->next=0;return;)if (e>head->exp)(t->next=head;head=t;/ 插入頭部return;)p=head;while (p && e<p->exp)(q=p;p=p->next;) if (p)(/新的項(xiàng)插入p所指結(jié)點(diǎn)前t->next=p;q->next=t;)else/插入尾部(q->next=t;t->next=0;)重載+運(yùn)算符Polynominal operator +(Polynominal a,Polynominal b)/ (Poly

15、nominal temp;Node *p,*q,*s,*t;double x;s=new Node;temp.head=s;/先增力口個(gè)頭結(jié)點(diǎn)p=a.head;q=b.head;while (p && q)(if (p->exp=q->exp)(x=p->coef+q->coef;if (x!=0.0)(t=new Node; t->exp=p->exp;t->coef=x; s->next=t; s=t; p=p->next; q=q->next; else (t=new Node;if(p->exp>q

16、->exp) (t->coef=p->coef; t->exp=p->exp; p=p->next; else ( t->coef=q->coef; t->exp=q->exp; q=q->next;s->next=t; s=t;)if (q) p=q;/p恒指向余下的項(xiàng)while (p)(t=new Node;t->coef=p->coef;t->exp=p->exp;s->next=t;s=t;p=p->next;)s->next=0; /鏈表尾標(biāo)記s=temp.head;te

17、mp.head=s->next;delete s; /刪除多余的頭結(jié)點(diǎn)return temp;)Polynominal operator -(Polynominal a,Polynominal b)/重載-運(yùn)算符(Polynominal temp;Node *p,*q,*s=0,*t;/在此處添加代碼,完成此函數(shù)(模仿上述重載"的函數(shù))double x;s=new Node;temp.head=s;/先增力口個(gè)頭結(jié)點(diǎn)p=a.head;q=b.head;while (p && q)(if (p->exp=q->exp)(x=p->coef-q-&

18、gt;coef;if (x!=0.0)(t=new Node;t->exp=p->exp;t->coef=x;s->next=t; s=t;) p=p->next; q=q->next;) else (t=new Node;if(p->exp>q->exp)(t->coef=p->coef; t->exp=p->exp; p=p->next;) else ( t->coef=-q->coef; t->exp=q->exp; q=q->next;)s->next=t;s=t;)

19、if (q) p=q;/p恒指向余下的項(xiàng)while (p)(t=new Node; t->coef=p->coef; t->exp=p->exp; s->next=t;s=t; p=p->next;)s->next=0; /鏈表尾標(biāo)記s=temp.head;temp.head=s->next;delete s; /刪除多余的頭結(jié)點(diǎn)return temp;)Polynominal operator *(Polynominal a,Polynominal b)/重載* 運(yùn)算符(Polynominal temp;Node *p,*q,*s;int e;

20、double c;p=a.head;while (p) (q=b.head;while (q) (c=p->coef*q->coef;e=p->exp+q->exp;s=temp.get(e);/ 查temp中有無(wú)指數(shù)為e的項(xiàng)if (s)/temp中無(wú)指數(shù)為e的項(xiàng)s->coef+=c;else/temp中無(wú)指數(shù)為e的項(xiàng)temp.set(c,e);q=q->next;) p=p->next;) return temp;)ostream& operator<<(ostream& os, const Polynominal&

21、; a)a.Print(os); return os;)Polynominal& Polynominal:operator =(Polynominal a)/重載=運(yùn)算符(Node *s,*p; if (head) /假設(shè)原多項(xiàng)式存在,先撤消它 p=head;while (p) s=p->next; delete p;p=s;) ) Copy(a); return *this;)void Polynominal:Print(ostream& os) const/顯示多項(xiàng)式Node* p;int e; if (head) e=head->exp;os<<&

22、quot;f(x)="<<head->coef;if (e>1) os<<"xAH<<e;if (e=1) os<<"x") else os << "f(x)=0" << endl; return;)p=head->next;while (p)(e=p->exp;if (p->coef!=0.0)/系數(shù)非零(if (p->coef>0.0) os<<'+'<<p->coef;e

23、lse os<<p->coef;if (e>1) os<v"xA"vve;if (e=1) os<<"x")p=p->next;)os<<endl;)通過類的成員函數(shù)實(shí)現(xiàn)對(duì)多項(xiàng)式的運(yùn)算,構(gòu)造和析構(gòu)函數(shù)主要是實(shí)現(xiàn)初始化 以及銷毀,其它函數(shù)那么主要是實(shí)現(xiàn)功能.4.3 主函數(shù)設(shè)計(jì)/主函數(shù)int main()(int e1MAXSIZE,e2MAXSIZE,size2,size1,i;double c1MAXSIZE,c2MAXSIZE;cout<<" 多項(xiàng)式計(jì)算器"vv

24、endl;cout<<"請(qǐng)輸入多項(xiàng)式P1的項(xiàng)數(shù):";cin>>size1;coutvv"請(qǐng)輸入多項(xiàng)式P1的系數(shù):";for(i=0;i<size1;i+)(cin>>c1i;p1p2顯小多項(xiàng)式的和顯示多項(xiàng)式的差顯示多項(xiàng)式的積cout<<"請(qǐng)輸入多項(xiàng)式pl的指數(shù)"for(i=0;i<size1;i+)(cin>>e1i;)cout<<"請(qǐng)輸入多項(xiàng)式P2的項(xiàng)數(shù):cin>>size2;cout<<"請(qǐng)輸入多項(xiàng)式p2

25、的系數(shù);for(i=0;i<size2;i+)(cin>>c2i;)cout<<"請(qǐng)輸入多項(xiàng)式p2的指數(shù)"for(i=0;i<size2;i+)(cin>>e2i;)Polynominal p1,p2,p3;p1.Create(c1,e1,size1);/創(chuàng)立多項(xiàng)式p2.Create(c2,e2,size2);/創(chuàng)立多項(xiàng)式cout<<"多項(xiàng)式p1為";p1.Print();cout<<endl;/顯示多項(xiàng)式p1cout<<"多項(xiàng)式p2為";p2.Pri

26、nt();cout<<endl;/顯示多項(xiàng)式p2p3 = p1 + p2;cout<<"多項(xiàng)式 p1+p2 為"<< p3<<endl;/p3 = p1 - p2;cout<<"多項(xiàng)式 p1-p2 為"<< p3<<endl;/p3 = p1*p2;cout<<"多項(xiàng)式 p1*p2 為"<<p3<<endl;/ return 0;在程序的主函數(shù)局部,對(duì)算法進(jìn)行了驗(yàn)證.首先,輸入了多項(xiàng)式的系數(shù)指數(shù)項(xiàng)數(shù),接著定義三個(gè)對(duì)象

27、 pl, p2, p3,在定義過程中調(diào)用構(gòu)造函數(shù),進(jìn)行初始 化并動(dòng)態(tài)分配了內(nèi)存.調(diào)用Print()顯示多項(xiàng)式,通過調(diào)用重載運(yùn)算符實(shí)現(xiàn)操作, 最后系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)清理.5 DOS界面程序運(yùn)行結(jié)果及分析5.1 程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果如圖2所示.圖2程序運(yùn)行結(jié)果通過計(jì)算對(duì)運(yùn)行結(jié)果進(jìn)行檢測(cè),經(jīng)檢測(cè)結(jié)果正確無(wú)誤.5.2 運(yùn)行結(jié)果分析整個(gè)程序采用的是鏈表和動(dòng)態(tài)內(nèi)存分配方式.將多項(xiàng)式的運(yùn)算抽象到一個(gè)類 Polynominal中,由該類生成三個(gè)對(duì)象 pl, p2, , p3,同時(shí)由系統(tǒng)調(diào)用構(gòu)造函數(shù)初始化,調(diào)用 Creat()構(gòu)造多項(xiàng)式,調(diào)用重 載的運(yùn)算符,實(shí)現(xiàn)加減乘的操作,由于涉及對(duì)象傳值,調(diào)用拷貝構(gòu)造

28、函數(shù).6基于MFC勺圖形界面程序開發(fā)MFC勺圖形界面程序設(shè)計(jì)可在上述類設(shè)計(jì)的根底上進(jìn)行改造,MFC勺圖形界面程序與DO以面程序的主要不同點(diǎn)是:MFCS形界面程序與DOS面程序的輸 入輸出方式不同,DOS界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,主要通過 cin , cout等I/O流實(shí)現(xiàn),而MFC勺圖形程序界面采用標(biāo)準(zhǔn) Windows窗口和控件 實(shí)現(xiàn)輸入輸出,因此必須在MFC1的框架下參加上面所設(shè)計(jì)的矩陣和方程組類, 并通過圖形界面的輸入輸出改造來(lái)完成.6.1基于MFC的圖形界面程序設(shè)計(jì)(1)界面設(shè)計(jì)首先在VC中建立MFC AppWizard(exe)工程,名稱為一元稀疏多項(xiàng)式運(yùn)算,并在向?qū)У腟

29、tepl中選擇Single document:,即建立基于對(duì)話框的應(yīng)用程序,如下列圖45所示.圖 4 建立 MFC AppWizard(exe)工程圖5建立基于對(duì)話框的應(yīng)用程序?qū)?duì)話框資源中的默認(rèn)對(duì)話框利用工具箱改造成如下界面,如圖 6所示.圖6方程組求解程序界面設(shè)計(jì)圖6所示的界面中包含了 3個(gè)Group Box(分組框),4個(gè)Static Text控件,5個(gè)Button控件,和9個(gè)Edit Box控件,控件的根本信息列表如下表 1所示 表1控件根本信息控件類別控件ID控件Caption說(shuō)明StaticTextIDC_STATIC項(xiàng)系數(shù)項(xiàng)指數(shù)項(xiàng)系數(shù)項(xiàng)指數(shù)BottonIDC_addmenber1

30、添加IDC_addmenber2添加IDC_add加法運(yùn)算IDC_sub減法運(yùn)算IDC_multiply乘法運(yùn)算Edit BoxIDC_EDIT1顯示多項(xiàng)式p1IDC_EDIT4顯示多項(xiàng)式p2IDC_EDIT7顯示加法運(yùn)算結(jié)果IDC_EDIT8顯示減法運(yùn)算結(jié)果IDC_EDIT9顯示乘法運(yùn)算結(jié)果IDC_EDIT2輸入每一項(xiàng)的系數(shù)IDC_EDIT3輸入每一項(xiàng)的指數(shù)IDC_EDIT5輸入每一項(xiàng)的系數(shù)IDC_EDIT6輸入每一項(xiàng)的指數(shù)GroupBoxIDC_STATIC一元多項(xiàng)式EJ,丁 一蜂 *Kwt ga MFWIVndW1Jl iiQ 9 1 % f d4 可, Hp CiC flAlMQi 鄴

31、口 p aH CLlCtfD喻曰-J j f IjI * T1 IP 1 M一fJdC 口 AijMMT-Dlfel*QI Mi TOUT Mx inOmu J Mh = 口 M. _i%mqIiUK 口 lh*為+- -a R(2)IDC代碼設(shè)計(jì)為了能夠?qū)?duì)話控件建立MembeVariableS詢 Ctrl+w 鍵進(jìn)入 MFC ClassWizard 界面,選擇 Memberr ,im*- mJ 工(Afiid7所示.Variables選項(xiàng)卡可顯示.成員!ObiSJOI.面,、如圖囹國(guó)"w#r圖7成員變量設(shè)置界面通過該界面設(shè)置控件對(duì)應(yīng)的成員變量,具體如表 2所示表2控件根本信息控件

32、ID成員變量類型成員變量名稱IDC_EDIT1CStringm_screen1IDC_EDIT2floatm_coef1I IDC_EDIT3intm_expn1IDC_EDIT4CStringm_screen2IDC_EDIT5floatm_coef2IDC_EDIT6intm_expn2IDC_EDIT7CStringm_screen3IDC_EDIT8CStringm_screen4IDC_EDIT9CStringm_screen5下面是編寫代碼的重要階段,可以借鑒在設(shè)計(jì)基于DO陰面的限制臺(tái)應(yīng)用程 序的代碼,并將其作必要的改寫,具體改寫的步驟與內(nèi)容如下. 建立名為一元稀疏多項(xiàng)式計(jì)算的 M

33、FCX程. 將對(duì)話框資源中的默認(rèn)對(duì)話框利用工具箱改造. 設(shè)置控件對(duì)應(yīng)的成員變量. 編寫添加按鈕的響應(yīng)函數(shù),具體代碼如下:void CMyDlg:Onaddmenber2() UpdateData(true);if(h2)/ 創(chuàng)立鏈表d2->next=f(m_expn2,m_coef2);d2=d2->next;elseh2=f(m_expn2,m_coef2);d2=h2;)m_screen2.Format("%s",show(h2);UpdateData(false);) 編寫顯示的消息處理函數(shù),具體代碼如下:CString show(node *h)/顯示函

34、數(shù)(node *t=h;CString e,c,w,u,x,v;while(t)/ 多項(xiàng)式的顯示 (if(t->coef=0)/多項(xiàng)式的項(xiàng)系數(shù)等于0的情況( v=v;)else if(t->coef>0)/多項(xiàng)式的項(xiàng)系數(shù)大于0的情況(w.Format("%s","+");c.Format("%g,t->coef);x.Format("%s","X");u.Format("%s","A");e.Format("%d,t->exp

35、n);if(t->coef=1) ( if(t->expn=1) (if(h=t)/該項(xiàng)是否是顯示的第一位v=v+x;elsev=v+w+x;else if(t->expn=0)(if(h=t) v=v+c;elsev=v+w+c;) else(if(h=t) v=v+x+u+e;elsev=v+w+x+u+e; ) else(if(t->expn=0)(if(h=t) v=v+c;elsev=v+w+c;)else if(t->expn=1)(if(h=t) v=v+c+x;elsev=v+w+c+x;) else(if(h=t)v=v+c+x+u+e;else

36、v=v+w+c+x+u+e; )else if(t->coef<0)/多項(xiàng)式系數(shù)小于0的情況(w.Format("%s","-");c.Format("%g",t->coef);x.Format("%s","X");u.Format("%s","A");e.Format("%d,t->expn);if(t->coef=-1)(if(t->expn=0)v=v+c;else if(t->expn=1)v=v

37、+w+x;elsev=v+w+x+u+e;) else(if(t->expn=0)v=v+c;else if(t->expn=1)v=v+c+x;elsev=v+c+x+u+e;)t=t->next;if(v="")v="0"return v;) 編寫加,減法運(yùn)算的消息處理函數(shù),具體代碼如下: node *add(node *p1,node *p2)/ 多項(xiàng)式加法運(yùn)算 (node *h,*q1,*q2,*t,*k;q1=p1;q2=p2;h=k=new node;k->next=p1;while(q1 && q2)

38、(if(q1->expn=q2->expn)/指數(shù)相同的情況(q1->coef=q1->coef+q2->coef;q1=q1->next;k=k->next;t=q2;q2=q2->next;delete t;)else if(q1->expn>q2->expn)/第一項(xiàng)的指數(shù)比第二項(xiàng)指數(shù)大的情況(k->next=q2;t=q2->next;q2->next=q1;k=k->next;q2=t;)else if(q1->expn<q2->expn)/第一項(xiàng)的指數(shù)比第二項(xiàng)指數(shù)小的情況q1

39、=q1->next;k=k->next;)if(q2)k->next=q2;t=h;h=h->next;delete t;return h;) 編寫乘法運(yùn)算處理函數(shù),具體代碼如下:node *multiply(node *p1,node *p2)(node *i,*j,*k,*s,*l,*m,*n;/乘法算法i=p1;j=p2;m=j;/保存j的頭結(jié)點(diǎn)k=f(0.0);/保存k為頭結(jié)點(diǎn)while(i)/創(chuàng)立乘法計(jì)算結(jié)果鏈表,形成頭結(jié)點(diǎn)為 k的鏈表(j=m;while(j)/乘法計(jì)算算法,并實(shí)現(xiàn)升序排序(l=f(0,0);/新計(jì)算結(jié)果保存在一個(gè)單獨(dú)結(jié)點(diǎn)中,用于對(duì)之前生成的

40、鏈表進(jìn)行比照,形成升序排列l(wèi)->coef=(i->coef)*(j->coef);l->expn=(i->expn)+(j->expn);n=k ;s=k->next;/s用于對(duì)鏈表的遍歷,n為s前驅(qū)while(s)(if(l->expn=s->expn) s->coef+=l->coef;delete l;break;)else if(l->expn<s->expn) (n->next=l; l->next=s; break;) else ( n=n->next; s=s->next;) if(s=NULL) ( n->next=l;) j=j-&

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論