设计一个一元多项式计算器,输入输出,多项式相加(C语言) 30

http://zhidao.baidu.com/question/72753270.html这个是我网上找到的。。但是是相减的。。不知道怎么才能改成相加~... http://zhidao.baidu.com/question/72753270.html
这个是我网上找到的。。但是是相减的。。不知道怎么才能改成相加~
展开
 我来答
月缘天星
2013-10-06
知道答主
回答量:5
采纳率:0%
帮助的人:4.3万
展开全部

#include<stdio.h>//两个多项式也就是两个链表,相加后的链表我们不重新建立,而是在第一个链表的基础上,增加和删除,得到相加后的链表。

#include<malloc.h>

typedef struct node

{

float cofe;//系数

int expn;//指数

struct node *next;

}node,*tie;

#define LEN sizeof(node)

int main()

{

int n,m;//n表示第一个多项式的项的个数,m表示第二个多项式的项的个数

while((scanf("%d%d",&n,&m))!=EOF)

{

tie p1,p2,head,tou,t1,t2,h1;

        head=NULL;

       p1=(tie)malloc(LEN);

     p1->next=head;

scanf("%f%d",&p1->cofe,&p1->expn);//输入系数和指数

     p2=head=p1;

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

{

     p1=(tie)malloc(LEN);

  scanf("%f%d",&p1->cofe,&p1->expn);

    p1->next=NULL;

    p2->next=p1;

    p2=p1;

}//以上为将第一个多项式建立成链表

tou=NULL;

       p1=(tie)malloc(LEN);

     p1->next=tou;

scanf("%f%d",&p1->cofe,&p1->expn);//输入系数和指数

     p2=tou=p1;

     for( i=1;i<m;i++)

{

     p1=(tie)malloc(LEN);

   scanf("%f%d",&p1->cofe,&p1->expn);

    p1->next=NULL;

    p2->next=p1;

    p2=p1;

}//以上为将第二个多项式建立成链表

        t1=h1=head;

t2=tou;//t1,t2分别指向当前结点,h1起辅助作用,第二个链表我们不要,所以可以用tou做辅助作用

while(t1&&t2)//当前结点都不为空

{

if(t1->expn<t2->expn)//第一个链表的当前位置的指数小于第二个链表

{

h1=t1;

t1=t1->next;

}

else if(t1->expn>t2->expn)//第一个链表的当前位置的指数大于第二个链表

{

  if(t1==head)//在第一个链表的头前插入元素

  {

 head=t2;

 t2=t2->next;

 tou->next=t1;

 tou=t2;

  }

  else

  {

tou=t2;

 t2=t2->next;

 tou->next=t1;

 h1->next=tou;

 h1=tou;

  }

}

else if(t1->expn==t2->expn)//第一个链表的当前位置的指数等于第二个链表

{

float sum=t1->cofe+t2->cofe;

if(sum==0)

{

tou=t2;

t2=t2->next;

h1->next=t1->next;

t1=t1->next;

}

else

{

t1->cofe=sum;

h1=t1;

t1=t1->next;

tou=t2;

t2=t2->next;

}

}

}

if(t1==NULL)//第一个链表已结束,将第二个链表加到第一个链表末尾

   h1->next=t2;

tie p3;//将相加后的链表打印出来

p3=head;

while(p3!=NULL)

{

  if(p3->cofe<0)

     printf("%fx^%d",p3->cofe,p3->expn);

  else

   printf("+%fx^%d",p3->cofe,p3->expn);

  p3=p3->next;

}


}

}

例如:

3x^2+4x^3+5x^5

x+2x^4+6x^5

此题的思路就是:将两个按指数增长顺序的两个链表,假设指针t1,t2分别指向多项式A和B中当前进行比较的某个结点,比较这两个结点中的指针项,有三种情况:1.指针t1的指针值<指针t2的指针值,此时将t1向后移;2.指针t1的指针值>指针t2的指针值,此时将t2的结点加入t1的链表;3.当二者相等时,应判断系数的是否为0.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式