多项式的加法C语言,C语言多项式加法

#include

#include

#define ERROR -1

typedef struct list{

double coef;

int expn;

struct list *next;

}polyn;

polyn* creatpolyn(polyn*p,int m)

{

p=(polyn*)malloc(sizeof(polyn));

p->next=NULL;

while(m--){

polyn *temp=(polyn*)malloc(sizeof(polyn));

scanf("%lf %d",&temp->coef,&temp->expn);

temp->next=p->next;

p->next=temp;

}

return p;

}

int cmp(int a,int b){

if(a>b) return 1;

else if(a==b) return 0;

else return -1;

}

void delfirst(polyn*p,polyn*q)

{

p->next=q->next;

}

void insfirst(polyn*p,polyn*q)

{

q->next=p->next;

p->next=q;

}

void append(polyn*p,polyn*q)

{

polyn *temp=p;

while(1){

temp=temp->next;

if(!temp->next){

temp->next=q;

break;

}

}

}

void addpolyn(polyn*pa,polyn*pb)

{int a,b;

double sum=0;

polyn *ha=pa;

polyn *hb=pb;

polyn *qa=ha->next;

polyn *qb=hb->next;

while(qa&&qb){

a=qa->expn;

b=qb->expn;

switch(cmp(a,b)){

case -1:ha=qa;

qa=qa->next;

break;

case 0:sum=qa->coef+qb->coef;

if(sum!=0.0){

qa->coef=sum;

ha=qa;

}

else{

delfirst(ha,qa);

free(qa);

}

delfirst(hb,qb);

free(qb);

qb=hb->next;

qa=ha->next;

break;

case 1:delfirst(hb,qb);

insfirst(ha,qb);

qb=hb->next;

ha=ha->next;

break;

}

}

if(!pb->next) append(pa,qb);

free(hb);

}

int main (void){

int numberofpa,numberofpb;

polyn *pa=NULL,*pb=NULL,*p=NULL;

scanf("%d %d",&numberofpa,&numberofpb);

pa=creatpolyn(pa,numberofpa);

printf("链表A设置完毕\n");

p=pa->next;

while(p!=NULL){

printf("%.2f %d\n",p->coef,p->expn);

p=p->next;

}

pb=creatpolyn(pb,numberofpb);

printf("链表B设置完毕\n");

addpolyn(pa,pb);

printf("加法完成\n");

while((pa->next)!=NULL){

pa=pa->next;

printf("%.2f %d\t",pa->coef,pa->expn);

}

return 0;

}

指针传递也是值传递,在里面对指针进行修改都要返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值