怎么求多项式乘以多项式的和。

wanfu 麦克百科 64 0

怎么求多项式乘以多项式的和。

为你找到100道相关题目如下:
30+20%)÷2
12×3÷(25+20%)
30÷(3+40%)
27÷8×16×10%
(43×20%)+【3×(1÷9)】
14×15%+25×8×(1÷4)
19.8÷(1+10%)
19.8÷(1-10%)
20÷(1-20%)
20×(1-25%)
20÷(1+20%)
20×(1+25%)
60÷(30%-25%)
120×(1-25%-40%)
605×8+3.5-44+10.9-(6.6+0.125÷12.5%)
(0.75+0.2) ÷0.25×25%+12÷0.75+7.2÷2.4
(25%-695%-12%)×36
4÷2-34%
(25÷3×18) ×30%
1049 × (1-75%)
(1+37%)×20
35÷2×75%
(54+10%)÷20
(25÷÷3×18) ×30%
(2+70%)×40
25%×((23+2%)×4)
(30+20%)÷2
12×3÷(25+20%)
30÷(3+40%)
27÷8×16×10%
(35+10%)×27
(45+50%)×3×1÷2
(43×20%)+(3×(1÷9))
27×(9×(1÷3)) ×5%
14×15%+25×8×(1÷4)
(1+48%)×2
(4×8-12) ×50%
(48÷60%)÷10
63×(1÷7) ×30%
(0.75+0.2) ÷0.25×25%
10.9-(6.6+0.125÷12.5%)
4÷2-34%
7÷3+445%
36×7÷45%
180×75%÷3×5
1700×15%÷5×3
2010÷3×45%
101 × 1÷5 - 1÷5 × 21125%
25%×((23+2%)×4)

多项式乘以多项式的运算法则 多项式乘以多项式怎么计算

1、多项式乘多项式法则是:多项式与多项式相乘,先用一个多项式的每一项与另一个多项式的每一项相乘,再把所得的积相加。

2、多项式乘以多项式就是利用乘法分配律法则得出的,表达公式为:(a+b)×(c+d)=ac+ad+bc+bd。

下面分享相关内容的知识扩展:

请大家帮忙看一个数学题 多项式的乘法

(2x+y)(2x-y)+(x+y)²-2(2x²-xy)
当x=2.y=3时,它的值是多少?
这个该怎么化简???请各位老师讲解一下,给出化简的过程
(2x+y)(2x-y)+(x+y)²-2(2x²-xy)
=4x^2-y^2+x^2+2xy+y^2-4x^2+2xy
=x^2+4xy
=x(x+4y)
=2*(2+12)
=28

二、一元多项式的加法、减法、乘法的实现

设有一元多项式Am(x)和Bn(x).
Am(x)=A0+A1x+A2x2+A3x3+… +Amxm
Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn
请实现求L(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和N(x)= Am(x)×Bn(x)。
要求:
(1)分别采用顺序和链式存储结构实现;
(2)结果M(x)中无重复阶项和无零系数项;
(3)要求输出结果的升幂和降幂两种排列情况
链接程序:#include<stdio.h>
#include<stdlib.h>
typedef struct
{ float coef; //系数
int expn; //指数
}term;
typedef struct LNode
{ term data; //term多项式值
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polynomail;
/*比较指数*/
int cmp(term a,term b)
{ if(a.expn>b.expn) return 1;
if(a.expn==b.expn) return 0;
if(a.expn<b.expn) return -1;
else exit(-2);
}
/*又小到大排列*/
void arrange1(polynomail pa)
{ polynomail h=pa,p,q,r;
if(pa==NULL) exit(-2);
for(p=pa;p->next!=NULL;p=p->next); r=p;
for(h=pa;h->next!=r;)//大的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
if(cmp(p->next->data,p->next->next->data)==1)
{ q=p->next->next;
p->next->next=q->next;
q->next=p->next;
p->next=q;
}
r=p;//r指向参与比较的最后一个,不断向前移动
} }
/*由大到小排序*/
void arrange2(polynomail pa)
{ polynomail h=pa,p,q,r;
if(pa==NULL) exit(-2);
for(p=pa;p->next!=NULL;p=p->next); r=p;
for(h=pa;h->next!=r;)//小的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
if(cmp(p->next->next->data,p->next->data)==1)
{ q=p->next->next;
p->next->next=q->next;
q->next=p->next;
p->next=q;
}
r=p;//r指向参与比较的最后一个,不断向前移动
} }
/*打印多项式,求项数*/
int printpolyn(polynomail P)
{ int i;
polynomail q;
if(P==NULL) printf("无项!\n");
else if(P->next==NULL) printf("Y=0\n");
else
{ printf("该多项式为Y=");q=P->next;i=1;
if(q->data.coef!=0&&q->data.expn!=0)
{ printf("%.2fX^%d",q->data.coef,q->data.expn); i++; }
if(q->data.expn==0&&q->data.coef!=0)
printf("%.2f",q->data.coef);//打印之一项
q=q->next;
if(q==NULL)
{printf("\n");return 1;}
while(1)//while中,打印剩下项中系数非零的项,
{ if(q->data.coef!=0&&q->data.expn!=0)
{ if(q->data.coef>0) printf("+");
printf("%.2fX^%d",q->data.coef,q->data.expn); i++;
}
if(q->data.expn==0&&q->data.coef!=0)
{ if(q->data.coef>0) printf("+");
printf("%f",q->data.coef);
}
q=q->next;
if(q==NULL)
{ printf("\n"); break; }
}
}
return 1;
}
/*1、创建并初始化多项式链表*/
polynomail creatpolyn(polynomail P,int m)
{ polynomail r,q,p,s,Q;
int i;
P=(LNode*)malloc(sizeof(LNode));
r=P;
for(i=0;i<m;i++)
{ s=(LNode*)malloc(sizeof(LNode));
printf("请输入第%d项的系数和指数:",i+1);
scanf("%f%d",&s->data.coef,&s->data.expn);
r->next=s; r=s;
}
r->next=NULL;
if(P->next->next!=NULL)
{ for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)//合并同类项
for(p=q->next,r=q;p!=NULL;)
if(q->data.expn==p->data.expn)
{ q->data.coef=q->data.coef+p->data.coef;
r->next=p->next;
Q=p;p=p->next;
free(Q);
}
else
{ r=r->next;
p=p->next;
}
}
return P;
}
/*2、两多项式相加*/
polynomail addpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r;int j;
p=pa->next;q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{ s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
break;
case 0: s->data.coef=p->data.coef+q->data.coef;
if(s->data.coef!=0.0)
{ s->data.expn=p->data.expn;
r->next=s;
r=s;
}
p=p->next;
q=q->next;
break;
case 1: s->data.coef=q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
break;
}//switch
}//while
while(p)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
}
while(q)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
}
r->next=NULL;
for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项
for(p=q;p!=NULL&&p->next!=NULL;p=p->next)
if(q->data.expn==p->next->data.expn)
{ q->data.coef=q->data.coef+p->next->data.coef;
r=p->next;
p->next=p->next->next;
free(r);
}
printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
return newp;
}
/*3、两多项式相减*/
polynomail subpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r,Q; int j;
p=pa->next;q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{ s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
break;
case 0: s->data.coef=p->data.coef-q->data.coef;
if(s->data.coef!=0.0)
{ s->data.expn=p->data.expn;
r->next=s;
r=s;
}
p=p->next;
q=q->next;
break;
case 1: s->data.coef=-q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
break;
}//switch
}//while
while(p)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s; r=s;
p=p->next;
}
while(q)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=-q->data.coef;
s->data.expn=q->data.expn;
r->next=s; r=s;
q=q->next;
}
r->next=NULL;
if(newp->next!=NULL&&newp->next->next!=NULL)//合并同类项
{ for(q=newp->next;q!=NULL;q=q->next)
for(p=q->next,r=q;p!=NULL;)
if(q->data.expn==p->data.expn)
{ q->data.coef=q->data.coef+p->data.coef;
r->next=p->next;
Q=p;p=p->next;
free(Q); }
else
{ r=r->next;
p=p->next; }
} printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
return newp;}
/*4两多项式相乘*/
polynomail mulpolyn(polynomail pa,polynomail pb)
{ polynomail s,newp,q,p,r;
int i=20,j;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
for(p=pa->next;p!=NULL;p=p->next)
for(q=pb->next;q!=NULL;q=q->next)
{ s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef*q->data.coef;
s->data.expn=p->data.expn+q->data.expn;
r->next=s;
r=s;}
r->next=NULL;
printf("升序 1 , 降序 2\n");
printf("选择:");
scanf("%d",&j);
if(j==1) arrange1(newp);
else arrange2(newp);
for(;i!=0;i--)
{for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项
for(p=q;p!=NULL&&p->next!=NULL;p=p->next)
if(q->data.expn==p->next->data.expn)
{ q->data.coef=q->data.coef+p->next->data.coef;
r=p->next;
p->next=p->next->next; free(r);
}
}
return newp;
}
/*5、销毁已建立的两个多项式*/
void delpolyn(polynomail pa,polynomail pb)
{ polynomail p,q;
p=pa;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
p=pb;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
printf("两个多项式已经销毁\n");
}
void main()
{ polynomail pa=NULL,pb=NULL;
polynomail p,q;
polynomail addp=NULL,subp=NULL,mulp=NULL;
int n,m;
int sign='y';
printf("1、创建两个一元多项式\n");
printf("2、两多项式相加得一新多项式\n");
printf("3、两多项式相减得一新多项式\n");
printf("4、两多项式相乘得一新多项式\n");
printf("5、销毁已建立的两个多项式\n");
printf("6、退出\n");
printf("\n");
while(sign!='n')
{ printf("请选择:");
scanf("%d",&n);
switch(n)
{case 1:
if(pa!=NULL)
{ printf("已建立两个一元多项式,请选择其他操作!");
break;
}
printf("请输入之一个多项式:\n");
printf("要输入几项:");
scanf("%d",&m);
while(m==0)
{ printf("m不能为0,请重新输入m:");
scanf("%d",&m);
}
pa=creatpolyn(pa,m);
printpolyn(pa);
printf("请输入第二个多项式:\n");
printf("要输入几项:");
scanf("%d",&m);
pb=creatpolyn(pb,m);
printpolyn(pb);
break;
case 2:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
addp=addpolyn(pa,pb);
printpolyn(addp);
break;
case 3:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
subp=subpolyn(pa,pb);
printpolyn(subp);
break;
case 4:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
mulp=mulpolyn(pa,pb);
printpolyn(mulp);
break;
case 5:
if(pa==NULL)
{ printf("请先创建两个一元多项式!\n");
break;
}
delpolyn(pa,pb);
pa=pb=NULL;
break;
case 6:
if(addp!=NULL)
{ p=addp;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
}
if(subp!=NULL)
{ p=subp;
while(p!=NULL)
{ q=p;
p=p->next;
free(q);
}
}
exit(-2);
}//switch
}//while
}

顺序程序:
#include<stdio.h>
#include<iostream>
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;i<=la&&i<=lb;i++)
{
M->a[i]=A.a[i]+B.a[i];
}
while(i<=la) {M->a[i]=A.a[i];i++;}
while(i<=lb) {M->a[i]=B.a[i];i++;}
return ;
}
void SUB(Ploy A,Ploy B,Ploy *M)
/*多项式A与多项式B相减(A-B),得到多项式M*/
{
int la=A.len,lb=B.len,i;
M->len=la>lb?la:lb;
for(i=0;i<=la&&i<=lb;i++)
{
M->a[i]=A.a[i]-B.a[i];
}
while(i<=la) {M->a[i]=A.a[i];i++;}
while(i<=lb) {M->a[i]=0-B.a[i];i++;}
return ;
}
void MUL(Ploy A,Ploy B,Ploy *M)
/*多项式A与多项式B相乘,得到多项式M*/
{
int i,j;
for(i=0;i<=A.len+B.len+1;i++) M->a[i]=0;
for(i=0;i<=A.len;i++)
for(j=0;j<=B.len;j++)
{
M->a[i+j]+=A.a[i]*B.a[j];
}
M->len=A.len+B.len;
return ;
}
void GetPloy(Ploy *A)
{
int i,coef,ex,maxe=0;
char ch;
printf("请输入每个项的系数及对应的指数,指数为负数时标志输入结束!\n");
for(i=0;i<N;i++)
A->a[i]=0;
scanf("%d%d",&coef,&ex);
while(ex>=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;i<=A.len;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]>1)
{
printf(" + %dx^%d",A.a[i],i);
}
else if(A.a[i]<-1)
printf(" - %dx^%d",-A.a[i],i);
}
}

void Menu()
{ printf("\n**1、选择加法 2、选择减法 3、选择乘法 4、退出 ***\n");
printf("请输入菜单对应的ID号!\n");
return ;
}

int main()
{
Ploy A,B,M;
char id,ch,sh;
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
printf("请输入多项式A:\n");
GetPloy(&A);
printf("请输入多项式B:\n");
GetPloy(&B);
while(1)
{
Menu();
cin>>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;
}
在C++中都可以运行通过的

两个方阵的多项式相乘为什么满 *** 换律?

f(x)g(x)=g(x)f(x) 则 f(A)g(A)=g (A) f(A) A为方阵
因为A*A=A²,所以f(A)g(A)=g(A)f(A)
(A和A自身满 *** 换律,令A1=A2=A,则A1*A2=A*A=A2*A1)
举个例子
f(x)=ax+b
g(x)=cx²+dx+e
那么
f(A)g(A)
=(aA+b)(cA²+dA+e)
=acA³+(ad+bc)A²+(ae+bd)A+be
=(cA²+dA+e)(aA+b)
=g(A)f(A)

抱歉,评论功能暂时关闭!