一元多项式的加法减法乘法一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+… +AmxmBn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 14:11:17
一元多项式的加法减法乘法一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+… +AmxmBn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x

一元多项式的加法减法乘法一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+… +AmxmBn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x
一元多项式的加法减法乘法
一元多项式的加法、减法、乘法的实现
设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn
请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x).
要求:
(1)分别采用顺序和链式存储结构实现;
(2)结果M(x)中无重复阶项和无零系数项;
(3)要求输出结果的升幂和降幂两种排列情况
希望可以加注释!

一元多项式的加法减法乘法一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+… +AmxmBn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x
#include
#include
using namespace std;
#define N 1000
#define INF 65535
typedef struct
{
int a[N];//记录多项式
int len;//记录多项式的长度
}Ploy;
void ADD(Ploy A,Ploy B,Ploy *M)
/*多项式A与多项式B相加,得到多项式M*/
{
int la=A.len,lb=B.len,i;
M->len=la>lb?la:lb;
for(i=0;ilen=la>lb?la:lb;
for(i=0;i=0)
{
if(ex>maxe) maxe=ex;
if(A->a[ex]!=0) {
printf("你输入的项已经存在,是否更新原数据?(Y/N)");
cin>>ch;
if(ch=='Y'||ch=='y')
{A->a[ex]=coef;printf("更新成功,请继续输入!\n");}
else printf("请继续输入!\n");;
}
else A->a[ex]=coef;
scanf("%d%d",&coef,&ex);
}
A->len=maxe;
return ;
}
void PrintPloy1(Ploy A)
{
int i;
printf(" %dx^%d ",A.a[A.len],A.len);
for(i=A.len-1;i>=1;i--)
{
if(A.a[i]==0) ;
else if(A.a[i]==1) printf(" + x^%d ",i);
else if(A.a[i]==-1) printf(" - x^%d ",i);
else
{
if(A.a[i]>0)
printf("+ %dx^%d ",A.a[i],i);
else
printf("- %dx^%d ",-A.a[i],i);
}
}
if(A.a[0]==0) ;
else if(A.a[0]>0)
printf(" + %d",A.a[0]);//打印x的0次项
else
printf(" - %d",-A.a[0]);
printf("\n");
return ;
}
void PrintPloy2(Ploy A)
{
int i=0;
while(A.a[i]==0) ++i;
if(i==0) printf("%d",A.a[i]);
else {
if(A.a[i]==1) printf("x^%d",i);
else if(A.a[i]==-1) printf("-x^%d",i);
else printf("%dx^%d",A.a[i],i);}
for(++i;i1)
{
printf(" + %dx^%d",A.a[i],i);
}
else if(A.a[i]>id;
while(2)
{
if(id=='1')
{
ADD(A,B,&M);
printf("降幂输出请按1,升幂输出请2!\n");
cin>>sh;
if(sh=='1')
PrintPloy1(M);
else if(sh=='2')
PrintPloy2(M);
else
{
printf("你输入的ID不合法,系统按降幂输出\n");
PrintPloy1(M);
}
break;
}
else if(id=='2')
{
SUB(A,B,&M);
printf("降幂输出请按1,升幂输出请2!\n");
cin>>sh;
if(sh=='1')
PrintPloy1(M);
else if(sh=='2')
PrintPloy2(M);
else
{
printf("你输入的ID不合法,系统按降幂输出\n");
PrintPloy1(M);
}
break;
}
else if(id=='3')
{
MUL(A,B,&M);
printf("降幂输出请按1,升幂输出请2!\n");
cin>>sh;
if(sh=='1')
PrintPloy1(M);
else if(sh=='2')
PrintPloy2(M);
else
{
printf("你输入的ID不合法,系统按降幂输出\n");
PrintPloy1(M);
}
break;
}
else if(id=='4')
{
printf("真的要退出吗?(Y/N)\n");
cin>>ch;
if(ch=='Y'||ch=='y') exit(0);
else break;
}
else
{
printf("输入的ID号不对,请重新输入\n");
break;
}
}
}
return 0;
}