一、实验题目:一元多项式求和。
把任意给定的两个一元多项式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; }