当前位置:文档之家› 一元多项式加减乘运算

一元多项式加减乘运算

#include
#include
typedef struct NodeList
{
int a;
int e;
struct NodeList *next;
}lNodeList,*pNodeList;
lNodeList *La,*Lb;
lNodeList *attach(lNodeList *H,int a,int e)
{
lNodeList *t;
lNodeList *p,*point;
p=(lNodeList*)malloc(sizeof(lNodeList));

int flag=0;
p=H;
while(p) //指数相同时只系数相加
{
if(p->e==e)
{
p->a+=a;
flag++;
}
p=p->next;
}
if(flag==0) //指数不同时插入
{
t=(lNodeList*)malloc(sizeof(lNodeList));
p=H;
point=p;
while(p->next)
{
if(p->e==e+1)
{
t->a=a;
t->e=e;
t->next=p->next;
p->next=t;
return H;
}
point=p;
p=p->next;
}
p=H;
while(p)
{
if(p->next==NULL)
{
t->a=a;
t->e=e;
t->next=p->next;
p->next=t;
return H;
}
else
{
if(p->next->e{
t->a=a;
t->e=e;
t->next=p->next;
p->next=t;
return H;
}
p=p->next;
if(p->next!=NULL&&p->next->e>e)
{
p=p->next;
point=point->next;
}
}
}
}
return H;
}
lNodeList* Create_Poly()
{
lNodeList *H;
int a;
int e;
int n;

H=(lNodeList*)malloc(sizeof(lNodeList));
H->e=-1;
H->a=0;
H->next=NULL;
printf("请输入多项式项数:\n");
scanf("%d",&n);
for(int i=0;i{
scanf("%d%d",&a,&e);
attach(H,a,e);
}
return H;
}

void print_Polly(lNodeList *p)
{
int flag=0;
p=p->next;
while(p)
{
if(p->a<0) //系数小于0直接输出
{
if(p->a!=-1)
{
if(p->e!=0)
{
if(p->e!=1) printf("%2d*X^%-2d",p->a,p->e);
if(p->e==1) printf("%2d*X",p->a);
}
if(p->e==0) printf("%2d",p->a);
}
if(p->a==-1)
{
if(p->e!=0)
{
if(p->e!=1) printf("-X^%-2d",p->e);
if(p->e==1) printf("-X");

}
if(p->e==0) printf("-1");
}

}
if(p->a>0) //系数大于0时,考虑是否是第一项,是则去掉+号输出,不是第一项则输出+号
{
if(flag)
{
if(p->a!=1)
{
if(p->e!=0)
{
if(p->e!=1) printf("+%2d*X^%-2d",p->a,p->e);
if(p->e==1) printf("+%2d*X",p->a);
}
if(p->e==0) printf("+%2d*X",p->a);
}
if(p->a==1)
{
if(p->e!=0)
{
if(p->e!=1) printf("+X^%-2d",p->e);
else printf("+X");
}
if(p->e==0) printf("+1");
}
}
if(!flag)
{
if(p->a!=1)
{
if(p->e!=0)
{
if(p->e!=1) printf("%2d*X^%-2d",p->a,p->e);
else printf("%2d*X",p->a);
}
if(p-

>e==0) printf("%2d*X",p->a);
}
if(p->a==1)
{
if(p->e!=0)
{
if(p->e!=1) printf("X^%-2d",p->e);
else printf("X");
}
if(p->e==0) printf("1");
}
}
}
if(p->a==0) //系数为0时直接输出0
{
printf("0");
}
p=p->next;
flag++;
}
printf("\n");
}

lNodeList *Add_Poly(lNodeList *La,lNodeList *Lb)
{
lNodeList *pa,*pb,*H,*pc;
// int a;
pa=La->next;
pb=Lb->next;
H=pc=(lNodeList*)malloc(sizeof(lNodeList));
pc->a=0;
pc->e=0;
pc->next=NULL;
while(pa)
{
attach(H,pa->a,pa->e);
pa=pa->next;
}
while(pb)
{
attach(H,pb->a,pb->e);
pb=pb->next;
}
return H;
}


lNodeList *Sub_Poly(lNodeList *La,lNodeList *Lb)
{
lNodeList *pa,*pb,*H,*pc;
// int a;
pa=La->next;
pb=Lb->next;
H=pc=(lNodeList*)malloc(sizeof(lNodeList));
pc->a=0;
pc->e=0;
pc->next=NULL;
while(pa)
{
attach(H,pa->a,pa->e);
pa=pa->next;
}
while(pb)
{
attach(H,-pb->a,pb->e);
pb=pb->next;
}
return H;
}


lNodeList *Multy_Poly(lNodeList *La,lNodeList *Lb)
{
lNodeList *pa,*pb,*H,*pc;
// int a;
pa=La->next;
pb=Lb->next;
H=pc=(lNodeList*)malloc(sizeof(lNodeList));
pc->a=0;
pc->e=0;
pc->next=NULL;
while(pa)
{
while(pb)
{
attach(H,pa->a*pb->a,pa->e+pb->e);
pb=pb->next;
}
pb=Lb->next;
pa=pa->next;
}
return H;
}


void main()
{
lNodeList *La,*Lb,*Lc,*Ld,*Le;
int n;
while(1)
{
system("cls");
printf("**********************************************\n");
printf("***********一元多项式加减乘运算系统***********\n\n");
printf("& 1.输入多项式A &\n");
printf("& 2.输入多项式B &\n");
printf("& 3.计算多项式A+B &\n");
printf("& 4.计算多项式A-B &\n");
printf("& 5.计算多项式A*B &\n");
printf("& 0.退出系统 &\n");
printf("**********************************************\n");
printf("请选择:\n");
scanf("%d",&n);
switch(n)
{
case 0:
return ;
case 1:
printf("请输入多项式A\n");
La=Create_Poly();
break;
case 2:
printf("请输入多项式B\n");
Lb=Create_Poly();
break;
case 3:
printf("多项式A是:\n");
print_Polly(La);
printf("多项式B是:\n");
print_P

olly(Lb);
printf("多项式A+B结果为:\n");
Lc=Add_Poly(La,Lb);
print_Polly(Lc);
system("pause");
break;
case 4:
printf("多项式A是:\n");
print_Polly(La);
printf("多项式B是:\n");
print_Polly(Lb);
printf("多项式A-B结果为:\n");
Ld=Sub_Poly(La,Lb);
print_Polly(Ld);
system("pause");
break;
case 5:
printf("多项式A是:\n");
print_Polly(La);
printf("多项式B是:\n");
print_Polly(Lb);
printf("多项式A*B结果为:\n");
Le=Multy_Poly(La,Lb);
print_Polly(Le);
system("pause");
break;

}
}
}

相关主题
文本预览
相关文档 最新文档