高分悬赏,设计一个一元多项式简单的计算器(fortran语言)
1个回答

看我的:

#include "Polynomial.h"

#include

using namespace std;

void Polynomial::DestroyLink(Link &L)

{

Link p;

p=L->next;

while(p)

{

L->next=p->next;

delete p;

p=L->next;

}

delete L;

L=NULL;

}

//创建含有n个链表类型结点的项,即创建一个n项多项式

void Polynomial::CreateLink(Link &L,int n)

{

if(L!=NULL)

{

DestroyLink(L);

}

Link p,newp;

L=new LNode;

L->next=NULL;

(L->data).exp=-1;//创建头结点

p=L;

for(int i=1;i <=n;i++)

{

newp=new LNode;

cout < cout < cin>>(newp->data).coef;

cout < cin>>(newp->data).exp;

if(newp->data.exp <0)

{

cout < delete newp;

i--;

continue;

}

newp->next=NULL;

p=L;

if(newp->data.coef==0)

{

cout < delete newp;

i--;

continue;

}

while((p->next!=NULL)&&((p->next->data).exp data).exp))

{

p=p->next; //p指向指数最小的那一个

}

newp->next=p->next;

p->next=newp;

}

}

/*输出链表*/

void Polynomial::PrintList(Link L)

{

Link p;

if(L==NULL||L->next==NULL)

cout < else

{

p=L->next;

//项的系数大于0的5种情况

if((p->data).coef>0)

{

if((p->data).exp==0)

cout

else if((p->data).coef==1&&(p->data).exp==1)

cout < else if((p->data).coef==1&&(p->data).exp!=1)

cout

else if((p->data).exp==1&&(p->data).coef!=1)

cout

}

//项的系数小于0的5种情况

if((p->data).coef <0)

{

if((p->data).exp==0)

cout

else if(p->data.coef==-1&&p->data.exp==1)

cout < else if(p->data.coef==-1&&p->data.exp!=1)

cout

else if(p->data.exp==1)

cout <

data.coef < else cout

}

p=p->next;

while(p!=NULL)

{

if((p->data).coef>0)

{

if((p->data).exp==0)

cout

else if((p->data).exp==1&&(p->data).coef!=1)

cout data).exp==1&&(p->data).coef==1)

cout < else if((p->data).coef==1&&(p->data).exp!=1)

cout

else cout

}

if((p->data).coef <0)

{

if((p->data).exp==0)

cout

else if(p->data.coef==-1&&p->data.exp==1)

cout < else if(p->data.coef==-1&&p->data.exp!=1)

cout

else if(p->data.exp==1)

cout <

data.coef < else cout

}

p=p->next;

}

}

cout <

}

/*把一个链表的内容复制给另一个链表*/

void Polynomial::CopyLink(Link &pc,Link pa)

{

Link p,q,r;

pc=new LNode;

pc->next=NULL;

r=pc;

p=pa;

while(p->next!=NULL)

{

q=new LNode;

q->data.coef=p->next->data.coef;

q->data.exp=p->next->data.exp;

r->next=q;

q->next=NULL;

r=q;

p=p->next;

}

}

/*将两个一元多项式相加*/

void Polynomial::PolyAdd(Link &pc,Link pa,Link pb)

{

Link p1,p2,p,pd;

CopyLink(p1,pa);

CopyLink(p2,pb);

pc=new LNode;

pc->next=NULL;

p=pc;

p1=p1->next;

p2=p2->next;

while(p1!=NULL&&p2!=NULL)

{

if(p1->data.exp

data.exp)

{

p->next=p1;

p=p->next;

p1=p1->next;

}

else if(p1->data.exp>p2->data.exp)

{

p->next=p2;

p=p->next;

p2=p2->next;

}

else

{

p1->data.coef=p1->data.coef+p2->data.coef;

if(p1->data.coef!=0)

{

p->next=p1;

p=p->next;

p1=p1->next;

p2=p2->next;

}

else

{

pd=p1;

p1=p1->next;

p2=p2->next;

delete pd;

}

}

}

if(p1!=NULL)

{

p->next=p1;

}

if(p2!=NULL)

{

p->next=p2;

}

}

/*将两个多项式相减*/

void Polynomial::PolySubstract(Link &pc,Link pa,Link pb)

{

Link p,pt;

CopyLink(pt,pb);

p=pt;

while(p!=NULL)

{

(p->data).coef=(-(p->data).coef);

p=p->next;

}

PolyAdd(pc,pa,pt);

DestroyLink(pt);

}

//清屏函数

void Polynomial::Clear()

{

system("pause");

system("cls");

}

Polynomial::Polynomial()

{

a=0;

}

#include "Polynomial.h"

#include

using namespace std;

void Menu()

{

cout < cout < cout <}

//判断输入的整数是不是为1到2的数字

int CompareIfNum(int i)

{

if(i>0&&i <8)

return 0;

else return 1;

}

int main()

{

Polynomial test;

int n;

Link L,pc=NULL,pa=NULL,pb=NULL,La=NULL,Lb=NULL;//La,Lb分别为创建的两个多项式

int choose;

while(1)

{

Menu(); //调用菜单函数

cin>>choose;

switch(choose)

{

case 1:

cout < cin>>n;

if(CompareIfNum(n)==1)

{

cout < test.Clear();

break;

}

test.CreateLink(La,n);

cout < cin>>n;

if(CompareIfNum(n)==1)

{

cout < test.Clear();

break;

}

test.CreateLink(Lb,n);

test.Clear();

break;

case 3:

if(La==NULL||Lb==NULL)

{

cout < test.Clear();

break;

}

test.PolySubstract(L,La,Lb);

cout < test.PrintList(La);

test.PrintList(Lb);

cout < test.PrintList(L);

test.Clear();

test.DestroyLink(L);

break;

case 2:

if(La==NULL||Lb==NULL)

{

cout < test.Clear();

break;

}

test.PolyAdd(L,La,Lb);

cout < test.PrintList(La);

test.PrintList(Lb);

cout < test.PrintList(L);

test.Clear();

test.DestroyLink(L);

break;

}

}

return 0;

}

#ifndef POLYNOMIAL_H

#define POLYNOMIAL_H

struct Node

{

float coef;//结点类型

int exp;

};

typedef Node polynomial;

struct LNode

{

polynomial data;//链表类型

LNode *next;

};

typedef LNode* Link;

class Polynomial {

public:

Polynomial();

void CreateLink(Link &L,int n);

void PrintList(Link L);

void PolyAdd(Link &pc,Link pa,Link pb);

void PolySubstract(Link &pc,Link pa,Link pb);

void CopyLink(Link &pc,Link pa);

void DestroyLink(Link &L);

void Clear();

private:

int a;

};

#endif