一元多项式求和

一、实验题目:一元多项式求和。
              把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。

一元多项式求和
二、设计分析:
根据伪代码改写即可,注意记下p,q两个指针头结点的位置,可以创建一个新的链表来代替p、q指针的合并,这样可以不用再删除结点了。
三、程序代码:

#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Node{
    double coef;
    int exp;
    struct Node*next;
}Link;
void creatLink(Link*&p,int m)
{
  Link *r,*s;
  int i;
  p=(Link *)malloc(sizeof(Link));
  r=p;
  for(i=0;i<m;i++)
  {
      s=(Link *)malloc(sizeof(Link));
      printf("输入系数和指数:");
      scanf("%lf %d",&s->coef,&s->exp);
      r->next=s;
      r=s;
  }
  r->next=NULL;
}
void printLink(Link *p){
	Link *s;
 	s=p->next;
 	while(s!=NULL){
    	printf("%.2lfX^%d",s->coef,s->exp);
    	s=s->next;
    	if(s!=NULL){
    		if(s->coef>=0) printf("+");
		}
	}
	printf("\n");
}
Link* addLink(Link *&a,Link *&b){
  Link *newp,*p,*q,*t,*s;
  double temp;
  p=a->next;
  q=b->next;
  newp=(Link *)malloc(sizeof(Link));
  t=newp;
  while(p!=NULL&&q!=NULL)
  {
     if(p->exp<q->exp){
     	s=(Link *)malloc(sizeof(Link));
        s->coef=p->coef;
        s->exp=p->exp;
        t->next=s;
        t=s;
        p=p->next;
     }else if(p->exp==q->exp){
     	temp=p->coef+q->coef;
       	if(temp!=0.0){
           s=(Link *)malloc(sizeof(Link));
           s->coef=temp;
           s->exp=p->exp;
           t->next=s;
           t=s;
        }
        p=p->next;
        q=q->next;
	 }else{
	 	s=(Link *)malloc(sizeof(Link));
        s->coef=q->coef;
        s->exp=q->exp;
        t->next=s;
        t=s;
        q=q->next;
	 }
  }
  if(p!=NULL) t->next=p;
  else t->next=q;
  return newp;
}
int main(){
	Link *p1,*p2;
  	int L1,L2;
  	printf("请输入第一个多项式的项数:");
  	scanf("%d",&L1);
  	creatLink(p1,L1);
  	printf("请输入第二个多项式的项数:");
  	scanf("%d",&L2);
  	creatLink(p2,L2);
  	printf("两个一元多项式相加的结果为:");
  	printLink(addLink(p1,p2));
  	return 0; 
}
上一篇:String.intern() 方法__jdk1.6与jdk1.7/jdk1.8的不同


下一篇:Java进行N阶函数拟合