天天看點

多項式加法在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;

}

指針傳遞也是值傳遞,在裡面對指針進行修改都要傳回。

原文:http://friger.blog.51cto.com/5712363/1628959