您的位置:首页 > 编程语言 > C语言/C++

一元多项式的加法C++

2015-03-05 14:29 218 查看
#include<iostream.h>

#include<stdlib.h>

typedef struct term{

int z; //指数

float x; //系数

struct term *next;

}term;

struct term *creatlink(); //创建多项式

int cmp(int a,int b); //指数比较

struct term * addin(struct term *a,struct term *b); //加法运算

void list(struct term *a);

void main(){

struct term *A=creatlink();

list(A);

struct term *B=creatlink();

list(B);

struct term * C=addin(A,B);

cout<<endl<<"加法运算后:"<<endl;

list(C);

}

void list(struct term *a){

struct term *aa;

aa=a->next;

while(aa){

cout<<aa->x<<"X"<<aa->z;

if(aa->next!=0)

cout<<"+";

aa=aa->next;

}

}

struct term * addin(struct term *a,struct term *b){ //加法

struct term *ahead;

struct term *bhead;

struct term *aa;

struct term *bb;

ahead=a; bhead=b;

aa=ahead->next; bb=bhead->next;

while(aa&&bb){

int result=cmp(aa->z,bb->z);

switch(result){

case 2:ahead=aa;aa=aa->next;break; //指数小

case 1: bhead->next=bb->next;ahead->next=bb;bb->next=aa;ahead=ahead->next;bb=bhead->next;break;

case 0: aa->x+=bb->x;

if(aa->x!=0)

{ahead=aa;}

else

{ahead->next=aa->next;free(aa);}

bhead->next=bb->next;free(bb);bb=bhead->next;aa=ahead->next;break;

}

}

if(bb)

{while(bb)

{bhead->next=bb->next;ahead->next=bb;ahead=bb;bb=bhead->next;}

free(bhead);}

if(aa)

{while(aa)

{ahead=aa;aa=aa->next;}

}

ahead->next=NULL;

return a;

}

int cmp(int a,int b){

if(a==b)

return 0;

if(a>b)

return 1;

else

return 2;

}

struct term *creatlink(){ //创建多项式

struct term *p;

struct term *head;

struct term *q;

p=(struct term *)malloc(sizeof(struct term));

p->z=-1;

p->x=0;

p->next=NULL;

head=p;

cout<<endl<<"请输入多项式的项数:"<<endl;

int number0;

cin>>number0;

for(int i=1;i<=number0;i++){

q=(struct term *)malloc(sizeof(struct term));

cout<<"请输入第"<<i<<"项的系数和指数:"<<endl;

int n;

float m;

cin>>m>>n;

q->x=m;

q->z=n;

p->next=q;

p=q;

}

p->next=NULL;

return head;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: