返回首页

要编写C程序进行加,减和分配两个多项式。

多项式可能有任何条款。

加法和减法,但越来越困难,而我有一个多项式。

加减法的程序

#include<conio.h>   	

#include<ostream.h> 

#include<process.h>  

//   Creating a NODE Structure

struct node

{

   int coe,exp;        // data

   struct node *next;  // link to next node and previous node

};

 

// Creating a class Polynomial

class polynomial

{

   struct node *start,*ptrn,*ptrp;

   public:

     void get_poly(); // to get a polynomial

     void show();     // show

     void add(polynomial p1,polynomial p2); // Add two polynomials

     void subtract(polynomial p1,polynomial p2); //Subtract2 polynomials

};

 

void polynomial::get_poly()      //  Get Polynomial

{

   char c='y';

   ptrn=ptrp=start=NULL;

   while(c=='y' || c=='Y')

   {

      ptrn=new node;

      ptrp->next=ptrn;

      if(start==NULL)

	start=ptrn;

      ptrp=ptrn;

      cout<<"\nEnter the coefficient: ";

      cin>>ptrn->coe;

      cout<<"Enter the exponent: ";

      cin>>ptrn->exp;

      ptrn->next=NULL;

      cout<<"Enter y to add more nodes: ";

      cin>>c;

   }

   return;

}

 

 

void polynomial::show()  // Show Polynomial

{

    struct node *ptr;

    ptr=start;

    while(ptr!=NULL)

    {

       cout<<ptr->coe<<"X^"<<ptr->exp<<" + ";

       ptr=ptr->next;

    }

    cout<<"\b\b ";

}

 

void polynomial::add(polynomial p1,polynomial p2)  // Add Polynomials

{

   struct node *p1ptr,*p2ptr;

   int coe,exp;

   ptrn=ptrp=start=NULL;

   p1ptr=p1.start;

   p2ptr=p2.start;

   while(p1ptr!=NULL && p2ptr!=NULL)

   {

      if(p1ptr->exp==p2ptr->exp) // If coefficients are equal

      {

	 coe=p1ptr->coe+p2ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

	 p2ptr=p2ptr->next;

      }

      else if(p1ptr->exp>p2ptr->exp)

      {

	 coe=p1ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

      }

      else if(p1ptr->exp<p2ptr->exp)

      {

	 coe=p2ptr->coe;

	 exp=p2ptr->exp;

	 p2ptr=p2ptr->next;

      }

      ptrn=new node;

      if(start==NULL)

	 start=ptrn;

      ptrn->coe=coe;

      ptrn->exp=exp;

      ptrn->next=NULL;

      ptrp->next=ptrn;

      ptrp=ptrn;

   } // End of While

   if(p1ptr==NULL)

   {

      while(p2ptr!=NULL)

      {

	 coe=p2ptr->coe;

	 exp=p2ptr->exp;

	 p2ptr=p2ptr->next;

	 ptrn=new node;

	 if(start==NULL)

	    start=ptrn;

	 ptrn->coe=coe;

	 ptrn->exp=exp;

	 ptrn->next=NULL;

	 ptrp->next=ptrn;

	 ptrp=ptrn;

      }

   }

   else if(p2ptr==NULL)

   {

      while(p1ptr!=NULL)

      {

	 coe=p1ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

	 ptrn=new node;

	 if(start==NULL)

	    start=ptrn;

	 ptrn->coe=coe;

	 ptrn->exp=exp;

	 ptrn->next=NULL;

	 ptrp->next=ptrn;

	 ptrp=ptrn;

      }

   }

}  // End of addition

 

//  Subtract two polynomials

void polynomial::subtract(polynomial p1,polynomial p2)  // Subtract

{

   struct node *p1ptr,*p2ptr;

   int coe,exp;

   ptrn=ptrp=start=NULL;

   p1ptr=p1.start;

   p2ptr=p2.start;

   while(p1ptr!=NULL && p2ptr!=NULL)

   {

      if(p1ptr->exp==p2ptr->exp) // If coefficients are equal

      {

	 coe=p1ptr->coe-p2ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

	 p2ptr=p2ptr->next;

      }

      else if(p1ptr->exp>p2ptr->exp)

      {

	 coe=p1ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

      }

      else if(p1ptr->exp<p2ptr->exp)

      {

	 coe=0-p2ptr->coe;

	 exp=p2ptr->exp;

	 p2ptr=p2ptr->next;

      }

      ptrn=new node;

      if(start==NULL)

	 start=ptrn;

      ptrn->coe=coe;

      ptrn->exp=exp;

      ptrn->next=NULL;

      ptrp->next=ptrn;

      ptrp=ptrn;

   } // End of While

   if(p1ptr==NULL)

   {

      while(p2ptr!=NULL)

      {

	 coe=0-p2ptr->coe;

	 exp=p2ptr->exp;

	 p2ptr=p2ptr->next;

	 ptrn=new node;

	 if(start==NULL)

	    start=ptrn;

	 ptrn->coe=coe;

	 ptrn->exp=exp;

	 ptrn->next=NULL;

	 ptrp->next=ptrn;

	 ptrp=ptrn;

      }

   }

   else if(p2ptr==NULL)

   {

      while(p1ptr!=NULL)

      {

	 coe=p1ptr->coe;

	 exp=p1ptr->exp;

	 p1ptr=p1ptr->next;

	 ptrn=new node;

	 if(start==NULL)

	    start=ptrn;

	 ptrn->coe=coe;

	 ptrn->exp=exp;

	 ptrn->next=NULL;

	 ptrp->next=ptrn;

	 ptrp=ptrn;

      }

   }

}  // End of subtraction

 

 

int main()

{

   clrscr();

   polynomial p1,p2,sum,diff;

   cout<<"First Polynomial.\n";

   p1.get_poly();

   cout<<"\nSecond polynomial.\n";

   p2.get_poly();

   clrscr();

   cout<<"\nThe First polynomial is: ";

   p1.show();

   cout<<"\nThe second polynomial is: ";

   p2.show();

   cout<<"\n\nThe sum of two polynomials is: ";

   sum.add(p1,p2);

   sum.show();

   cout<<"\n\nThe difference of two polynomials is: ";

   diff.subtract(p1,p2);

   diff.show();

   getch();

   return 0;

}

回答

评论会员:游客 时间:2012/02/04
వేంకటనారాయvenkatmakam)
?我觉得有一个问题在此行中ptrp-GT;下= PTRN;在get_poly()function.you分​​配ptrp为NULL,你访问ptrp-GT;未来:愤怒
评论会员:游客 时间:2012/02/04
{C}野生的猜测,它一直是年龄,因为我上次链表