⑴ 一元多项式的计算 能够按照指数降序排列建立并输出多项式 能够完成两个多项式的相加及相减
#include<stdio.h>
typedef struct polynode
node *create() //用尾插法建立一元多项式的链表
printf("exp: ");
scanf("%d",&e);
while(c!=0) //输入系数为0时,多项式的输入结束
s->coef=c;
printf("coef:");
scanf("%d",&c);
scanf("%d",&e);
void print(node *p) //输出函数,打印出一元多项式
temp=q->next;free(q);q=temp;
if(p!=NULL) //将多项式A中剩余的结点加入到和多项式中
pre->next=p;
else
void multipoly(node *ha,node *hb)
{ node *p,*q,*n,*m;
p=ha->next;
m->exp=p->exp+q->exp;
p=p->next;
polyadd(n,m);
printf("多项式的积是: ");
printf("请输入多项式hb的系数与指数: ");
hb=create();
printf("多项式的和是: ");
multipoly(ha,hb);
简介
在数学中,多项式(polynomial)是指由变量、系数以及它们之间的加、减、乘、幂运算(非负整数次方)得到的表达式。
对于比较广义的定义,1个或0个单项式的和也算多项式。按这个定义,多项式就是整式。实际上,还没有一个只对狭义多项式起作用,对单项式不起作用的定理。0作为多项式时,次数定义为负无穷大(或0)。单项式和多项式统称为整式。
⑵ C++编程:一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct polynode
{
int coef; //多项式的系数
int exp; //指数
struct polynode *next;
}node;
node *create() //用尾插法建立一元多项式的链表
{
node *h,*r,*s;
int c,e;
h=(node*)malloc(sizeof(node));
r=h;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
while(c!=0) //输入系数为0时,多项式的输入结束
{
s=(node*)malloc(sizeof(node));
s->coef=c;
s->exp=e;
r->next=s;
r=s;
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
}
r->next=NULL;
return(h);
}
void print(node *p) //输出函数,打印出一元多项式
{
while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->exp);
}
}
void polyadd(node *ha, node *hb)//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除
{
node *p,*q,*pre,*temp;
int sum;
p=ha->next;
q=hb->next;
pre=ha;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp)
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;pre=pre->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else //如果系数和为零,则删除结点p与q,并将指针指向下一个结点
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) //将多项式A中剩余的结点加入到和多项式中
pre->next=p;
else
pre->next=q;
}
void multipoly(node *ha,node *hb)
{ node *p,*q,*n,*m;
p=ha->next;
n=(node*)malloc(sizeof(node));
n->next=NULL;
while(p!=NULL)
{ m=(node*)malloc(sizeof(node));
for(q=hb->next;q;q=q->next)
{ m->coef=p->coef*q->coef;
m->exp=p->exp+q->exp;
m->next=NULL;
}
p=p->next;
polyadd(n,m);
}
printf("多项式的积是:\n");
print(n);
}
void main()
{
node *ha,*hb;
printf("请输入多项式ha的系数与指数:\n");
ha=create();
print(ha);
printf("\n");
printf("请输入多项式hb的系数与指数:\n");
hb=create();
print(hb);
printf("\n");
printf("多项式的和是:\n");
polyadd(ha,hb);
print(ha);
printf("\n");
multipoly(ha,hb);
}
⑶ 多项式计算
#include <stdio.h>
#include<malloc.h>
typedef struct
{
float coef;//系数
int expn;//指数
}
ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}
LNode,*LinkList;
LinkList InitList()//创建链表
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return(L);
}
void Creat(LinkList L,ElemType x)//创建多项式
{
LinkList s,p;
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
p=L;
while(p->next)
p=p->next;
s->next=NULL;
p->next=s;
}
void Insert(LinkList L,LNode p)//插入链表
{
LinkList q,pc;
pc=(LinkList)malloc(sizeof(LNode));
*pc=p;
q=L;
while(q->next)
q=q->next;
pc->next=q->next;
q->next=pc;
}
void AddPolyn(LinkList pa,LinkList pb,LinkList pc)//多项式求和
{
LinkList qa,qb;
LNode qc;
float sum;
int a,b;
qa=pa->next;
qb=pb->next;
while(qa&&qb)
{
a=qa->data.expn;
b=qb->data.expn;;
if(a<b)
{
Insert(pc,*qa);
qa=qa->next;
}
if(a==b)
{
sum=qa->data.coef+qb->data.coef;
if(sum!=0)
{
qc=*qa;
qc.data.coef=sum;
Insert(pc,qc);
qa=qa->next;
qb=qb->next;
}
else
{
qa=qa->next;
qb=qb->next;
}
}
if(a>b)
{
Insert(pc,*qb);
qb=qb->next;
}
while(qa)
{
Insert(pc,*qa);
qa=qa->next;
}
while(qb)
{
Insert(pc,*qb);
qb=qb->next;
}
}
}
void Plus(LinkList pa,LinkList pb,LinkList pc)//多项式的差
{
LinkList qb;
qb=pb->next;
while(qb)
{
qb->data.coef=-(qb->data.coef);
qb=qb->next;
}
AddPolyn(pa,pb,pc);
}
void Print(LinkList L)//输出多项式
{
LinkList p;
p=L->next;
while(p->next)
{
printf("%fx^%d+",p->data.coef,p->data.expn);
p=p->next;
}
printf("%fx^%d",p->data.coef,p->data.expn);
}
void main()//主函数
{
LinkList La,Lb,Lc,Ld;ElemType c;
int a,i;
La=InitList();
Lb=InitList();
Lc=InitList();
Ld=InitList();
printf("输入La的项数:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("输入La第%d项系数和指数:",i+1);
scanf("%f%d",&c.coef,&c.expn);
Creat(La,c);
}
printf("输入Lb的项数:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("输入Lb第%d项系数和指数:",i+1);
scanf("%f%d",&c.coef,&c.expn);
Creat(Lb,c);
}
printf("La为");
printf("\n");
Print(La);
printf("\n");
printf("Lb为");
printf("\n");
Print(Lb);
printf("\n");
printf("多项式和为");
printf("\n");
AddPolyn(La,Lb,Lc);
Print(Lc);
printf("\n");
printf("多项式差为");
printf("\n");
Plus(La,Lb,Ld);
Print(Ld);
}
给你编好了,你先试试,有问题再问我。
⑷ 多项式的计算:
(1)(2x+3y)(3x-2y)
=6x²-4xy+9xy-6y²
=6x²+5xy-6y²
(2)(x+2)(x+3)-(x+6)(x-1)
=x²+5x+6-(x²+5x-6)
=12
(3)2(x+5)(x-8)-(2x-1)(x+2)
=2(x²-3x-40)-(2x²+3x-2)
=2x²-6x-80-2x²-6x+4
=-12x-76
⑸ 多项式逆运算
0.0022a^3 - 0.4435a^2 - 6.2764a + 6.7177 = 0
系数之和为 0, 必有根是 a = 1
0.0022a^3 - 0.4435a^2 - 6.2764a + 6.7177
= (a-1)(0.0022a^2-0.4413a-6.7177)
= 0.0001(a-1)(22a^2-4413a-67177) = 0
另两根满足 22a^2 - 4413a - 67177 = 0
a = [4413±√(4413^2+4*22*67177)]/44
a ≈ 214.806, a ≈ -14.215
⑹ 多项式的运算法则
1、几个多项式相加减的法则是:首先把带减号的多项式中的每个单项式都变号合成一个多项式,然后合并同类项,并按字典排列法写出结果。
例如:设A=7a²-2ab+b²,B=6a²-ab-b²,C=4a²+3ab+2b²,则A-B+C=A+B′+C,其中B′=-B=-6a²+ab+b²。
即A-B+C=(7a²-2ab+b²)-(6a²-ab-b²)+(4a²+3ab+2b²)=7a²-2ab+b²-6a²+ab+b²+4a²+3ab+2b²=5a²+2ab+4b² 。
2、由多项式乘多项式法则可以得到(a+b)(c+d)=a(c+d)+b(c+d)=ac+ad+bc+bd
上面的运算过程,也可以表示为(a+b)(c+d)=ac+ad+bc+bd,多项式乘以多项式就是利用乘法分配律法则得出的。
(6)多项式倒序相加的计算方法扩展阅读
1、整式加减计算的一般步骤是:
(1)根据题意列出代数式;
(2)根据去括号法则去掉括号;
(3)合并同类项。
不难看出,整式的加减实质上是合并同类项。因此,整式加减的结果还是整式。
2、整式的加减能用竖式计算。计算的步骤是
(1)把一个加式或者被减式按照某一个字母的降幂(或升幂)排列成一行,如果有缺项留出空位;
(2)再把其它加式或者减式写在它的下面,使同类项对齐;
(3)然后相加或相减 。
⑺ 多项式乘多项式方法
多项式与多项式相乘,先用一个多项式的每一项与另一个多项式的每一项相乘,再把所得的积相加。
由多项式乘多项式法则可以得到(a+b)(c+d)=a(c+d)+b(c+d)=ac+ad+bc+bd
上面的运算过程,也可以表示为(a+b)(c+d)=ac+ad+bc+bd
多项式乘以多项式就是利用乘法分配律法则得出的。
(7)多项式倒序相加的计算方法扩展阅读:
一、多项式的加法和乘法
有限的单项式之和称为多项式。不同类的单项式之和表示的多项式,其中系数不为零的单项式的最高次数,称为此多项式的次数。
多项式的加法,是指多项式中同类项的系数相加,字母保持不变(即合并同类项)。多项式的乘法,是指把一个多项式中的每个单项式与另一个多项式中的每个单项式相乘之后合并同类项。
F上x1,x2,…,xn的多项式全体所成的集合Fx{1,x2,…,xn},对于多项式的加法和乘法成为一个环,是具有单位元素的整环。
域上的多元多项式也有因式分解惟一性定理。
二、相关应用
给出多项式 f∈R[x1,...,xn] 以及一个 R-代数 A。对 (a1,...,an)∈An,我们把 f 中的 xj都换成 aj,得出一个 A 中的元素,记作 f(a1...an)。如此, f 可看作一个由 An 到 A 的函数。
若然 f(a1...an)=0,则 (a1...an) 称作 f 的根或零点。
例如 f=x^2+1。若然考虑 x 是实数、复数、或矩阵,则 f 会无根、有两个根、及有无限个根!
例如 f=x-y。若然考虑 x 是实数或复数,则 f 的零点集是所有 (x,x) 的集合,是一个代数曲线。事实上所有代数曲线由此而来。
另外,若所有系数为实数多项式 P(x)有复数根Z,则Z的共轨复数也是根。
若P(x)有n个重叠的根,则 P‘(x) 有n-1个重叠根。即若 P(x)=(x-a)^nQ(x),则有 a 是 P’(x)的重叠根且有n-1个。
⑻ 多项式的计算
求的这个多项式,用M表示
则有2(x²-6x-2) - M=3(4x²-7x-5)
M= 2(x²-6x-2)-3(4x²-7x-5)
=(2x²-12x-4)-(12x²-21x-15)
=2x²-11x-4-12x²+21x+15
=-10x²+9x+11
⑼ 倒序相加与等差数列求和的区别
倒序相加是一种求和技巧;等差数列的求和公式是使用倒序相加的方法得到的,是一个结论.