多项式求和
一元多项式相加问题实验报告

一元多项式相加问题实验报告一元多项式相加问题一、问题描述通过键盘输入两个形如P 0 +P 1 X 1 +P 2 X 2 +…+P n X 的多项式,经过程序运后在屏幕上输出它们的相加和。
二、数据结构设计一个一元多项式的每一个子项都由“系数-指数”两部分组成,因此可将其抽象为包含系数coef、指数exp、指针域next 构成的链式线性表。
将两个多项式分别存放在两个线性表中,然后经过相加后将所得多项式存放在一个新的线性表中,但是不用再开辟新的存储空间,只依靠结点的移动来构成新的线性表,期间可以将某些不需要的空间回收。
基于这样的分析,可以采用不带头结点的单链表来表示一个一元多项式。
具体数据类型定义为:struct node {float coef;//系数域int exp;//指数域struct node *next; }; 三、功能函数设计1、输入多项式的系数和指数初始化多项式的功能模块具体函数为node *in_fun() 此函数的处理较为全面,要求用户按照指数递增的顺序和一定的输入格式输入各个系数不为0 的子项,输入一个子项建立一个相关结点,当遇到输入结束标志时停止输入。
关键步骤具体如下:⑴控制用户按照指数递增的顺序输入r=a; while(r!=q-next){if(y=r-exp){cout“请按照指数递增顺序输入,请重新输入“;cinxy;break;}r=r-next;} 从头开始遍历,若遇到目前输入的指数不是最大时,就跳出循环,让用户重新输入。
⑵当输入的系数为零时,不为其分配存储空间存储while(x==0) { cinxy; continue;} 即若系数为0,不再进行动态分配并新建结点,而是重新提取用户输入的下一个子项的系数和指数,利用continue 进入下一次循环。
⑶初始化完成后将最后一个结点的指针域置为空,并返回该新建链表的首地址。
if(q!=NULL)q-next=NULL;return a; ⑷动态分配空间新建结点存储系数和指数的代码如下:p=new node;p-coef=x;p-exp=y;if(a==NULL) a=p;else q-next=p;q=p; 2、多项式显示功能函数由于系数有正有负,故采取如下处理:对于正数,输出时在前面加“+”,头指针除外;对于负数,直接将系数输出即可,即:p=a;while(p){if(p==a)coutp-coef"*x^"p-else if(p-coef0)coutp-coef"*x^"p-else if(p-coef0)cout"+"p-coef"*x^"p-p=p-next;} 输出的多项式的形式形如:P 1 X^1+P 2 X^2+…+P n X^n 3、多项式相加的功能函数函数为:node *plus_fun(node *a,node *b) 此函数根据在 1 中初始化的两个多项式进行相加运算,并存放在以c 为头指针的一个新链表中。
一类特殊多项式的求和问题

两边 同乘 z后 , 对 z求导得 : 再
S : 1 + 2 z4 3z。 … + 7 z 4 - - 2 = : =
c一 年 1z
( ) 当 z一 1时 , 2 有
— — — — —
(. r 兰 一
一
一
.
[ l x4 l x + z 一 ( 1 1 l l 。 n )z + - 4 - - 4
当 z≠ 1时 , 3 由( )知
S 一 1 + 2 z 4 3 z - … 4 n X r 。 。 4 - - 。 , : -
S = 1 +3 +2 +…+ 一 ̄nn ) -(+1.
当 z≠ 1时 , 由于
+5 C 2+ z。 … + X + n一 _-一: l X .+ 2 : n
s- t 一 1 2 3 。 … 4 ~zr 卜 + 卜 z4 卜 3 4 - 2- - ,
两边 同乘 后 , 再对 z求 导得 :
S 一 1 + ’ + 3 z 。 2 。 + … + n 一 = Z ̄ Z 1 X一 + 1。 + ( + 2 + ) 2 n一 1 )
C ( + 2 1 + … + )+ … +
[ L c + … +c c I+ 3 j 。 抖 ~
证 明
C ( 1+ 2+ 3+ … + )+ 。 .
1 +C ・l + c ・ +C F- … ・1 1 + , 3 抖 一 ( 2+ 1 抖 一 )
摘 要 利 用 二 项 式 定 理 给 出 自然 数 幂 和 的 求 和 公 式 , 由此 出发 , 用 逐 项 求 导 法 得 到 形 如 利
S( )= 1 + 2 x+ 3 z。+ … + z k
的多 项 式 和 的算 法 . 关键 词 多 项 式 ; 和 ; 导 求 求 中 图分 类 号 O1 3 7 文 献标 识 码 A 文 章 编 号 1 0—3 9 2 1 ) 10 6 —2 0 81 9 (0 2 0 —0 50
完整word版一元多项式求和实验报告范文_

完整word版一元多项式求和实验报告范文_实验一、线性结构综合应用一、实验题目:顺序表的应用二、实验内容:一元多项式求和。
把任意给定的两个一元多项式P(某),Q(某)输入计算机,计算它们的和并输出计算结果。
三、设计分析:实现要定义的一元多项式应采用链式存储结构。
根据一元多项式相加的运算法则,对于两个多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成新多项式的一项;对于两个多项式中所有指数不同的项,分别复制到新多项式中。
新多项式不必另外生成,而是在原来的两个多项式中摘取结点即可。
采用顺序存储结构存储多项式系数A,使多项式的某些运算变得更简洁。
但在实际使用时,多项式的阶数可能很高,不同的多项式阶数可能相差很大,这使顺序存储结构的最大长度难以确定。
而且,最高次幂与最低次幂项之间缺项很多时,采用顺序存储结构显然十分浪费存储空间,因此,一般情况下多采用链式存储结构来存储高阶多项式。
在用线性链表来存储一个多项式时,多项式中的每个非零项系数对应一个结点,结点由数据元素项和指针组成。
数据元素项中包含系数和指数值,设计中先定义定义数据元素中的数据,其中有指数、系数级指针ne某t等。
并要先构造一元多项式。
在定义输出、删除、合并等模块。
假设指针qa和qb分别指向多项式A和B中当前进行操作的某个结点,比较这个结点的指数项,可能有三种情况:①指针qa->e某p<qb->e某p,则摘取qa指针所指结点插入到和多项式中;②指针qa->e某p<qb->e某p,则摘取qb指针所指结点插入到和多项式中;③指针qa->e某p=qb->e某p,则将系数相加,若和数不为零,则修改qa->coef的值,同时释放qb所指结点,反之,从多项式A的链表中删除相应的结点,并释放指针Pa和Pb所指结点;还有就是在输入是采取的降序输入,也好使两个多项式进行合并。
并输出。
在主函数中将前面也的这些功能都运用起来就可以了四、程序代码:#include<iotream>#defineNULL0uingnamepacetd;typedeftructPolynomial{floatcoef;//系数inte某p;//指数tructPolynomial某ne某t;}Polynomial;Polynomial某CreatPolyn(){//输入m项的系数和指数,建立一元多项式floatmod;intind;Polynomial某H,某p,某;H=newPolynomial;=H;潣瑵请输入多项式的系数和指数:(按0结束输入)<<endl; cin>>mod>>ind;while(mod){p=(Polynomial某)newPolynomial;p->coef=mod;p->e某p=ind;->ne某t=p;=p;cin>>mod>>ind;}->ne某t=NULL;returnH;}voidPrint(Polynomial某pa){//打印输出一元多项式pwhile(pa->ne某t!=NULL){pa=pa->ne某t;cout<<pa->coef<<某某^<<pa->e某p;if(pa->ne某t!=NULL&&pa->ne某t->coef>0) cout<<+;}}voidDelete(Polynomial某pa){//删除一元多项式Polynomial某p,某q;p=pa->ne某t;while(p){q=p;p=p->ne某t;deleteq;}pa->ne某t=NULL;}voidAddPolyn(Polynomial某pa,Polynomial某pb) {//用于链表的合并使用完成多项式的相加运算floatum;Polynomial某p,某q,某pre,某temp;p=pa->ne某t;q=pb->ne某t;pre=pa;while(p!=NULL&&q!=NULL){if(p->e某p>q->e某p){pre->ne某t=p;pre=pre->ne某t;p=p->ne某t;}eleif(p->e某p==q->e某p) {um=p->coef+q->coef;if(um!=0){p->coef=um;pre->ne某t=p;pre=pre->ne某t;p=p->ne某t;temp=q;q=q->ne某t; deletetemp;}ele{temp=p->ne某t;deletep;p=temp;temp=q->ne某t;deleteq;}}ele{pre->ne某t=q;pre=pre->ne某t;q=q->ne某t;}}if(p!=NULL)//将多项式A中剩余的结点加入到和多项式中pre->ne某t=p;elepre->ne某t=q;}intmain(){intc;intt=1;cout<<某某某某某某某某某某某某某某某某某某菜单某某某某某某某某某某某某某某某某某<<endl<<endl;cout<<.创建并显示一元多项式A和B,计算一元多项式A加B并显示和<<endl<<endl;cout<<.退出程序.<<endl;cin>>c;witch(c){cae1:Polynomial某p1,某p2;p1=CreatPolyn();潣瑵一元多项式A是:;Print(p1);cout<<endl;p2=CreatPolyn();潣瑵一元多项式B是:;Print(p2);cout<<endl;AddPolyn(p1,p2);潣瑵一元多项式A加B的和是:;Print(p1);cout<<endl;Delete(p1);break;cae2:t=0;break;}}ytem(paue);return0;}五、测试用例:六、实验总结通过这次实验,对于链表的应用知识有了更加深刻的认识,虽然中间出了很多问题,但是经过调试以后都得以解决。
线性表——一元多项式的求和

线性表——⼀元多项式的求和♥注:未经博主同意,不得转载。
多项式的表⽰与求和是线性表应⽤的典型案列。
在数学上,⼀元多项式P(x)的表⽰为:P(x)=a0+a1x+a2x2+…+anxn其中,n为⼤于或等于0的整数,表⽰x的幂:a o,a1,…a n为系数,a n≠0,a0,a1,…,a n-1可以为0,也可以不为0。
⼀元多项式的表⽰ 为了表⽰⼀元多项式,可以将其所有项的系数⽤⼀个线性表来表⽰:(a0,a1,…,a n)。
这个线性表可以使⽤顺序存储结构或链式存储结构来存储,从⽽进⾏多项式的有关运算。
若采⽤顺序存储结构,可使⽤⼀个⼀维数组存储这个线性表,即多项式的系数,⽽相应的幂则使⽤数组下标来表⽰。
⼀元多项式的顺序存储结构如下:1 typedef int DataType;2const int MaxPolySize=100;34class Polyn5 {6private:7 DateType data[MaxPolySize];8int size; //元素的个数910public:11 Polyn(){size = 0;} //构造⼀个空多项式12 ~Polyn();1314void Clear(){size=0;} //清空15 Polyn sum(Polyn a); //多项式相加16 Polyn sub(Polyn a); //多项式相减17 }; 但多项式的顺序存储有⼀个缺点:当存储形如P(x)=1+10x99的多项式时,由于a1到a98均为0,所以⽤来存储⼀元多项式的⼀维数组中的绝⼤部分单元存储的值都是0,导致存储效率低下,造成存储空间的浪费。
因此,⼀般采⽤链式存储结构来描述⼀元多项式。
⼀元多项式的链式存储必须显式地表达系数值和幂值,这是由于链式存储打破了顺序存储中原有的幂与数组下标间的⼀⼀对应关系,⼀元多项式的项的结点结构表⽰如图所⽰。
⼀元多项式的链式存储结构表⽰如下:12struct term3 {4double coef; //系数5int expn; //指数6 };7struct PNode8 {9 term data;10 PNode *next;11 };12class Ployn13 {14 PNode *phead;15public:16 Polyn()17 { //构造函数18 phead =new PNoed;19if(phead= =NULL)20 exit(0);21 phead->next=NULL;22 }23 ~Polyn(); //析构函数2425void PolynAdd(Ployn Pa,Ployn Pb); //两个多项式相加26void Print(); //打印多项式27void Create(); //建⽴多项式28 };29⼀元多项式的求和 本节以多项式的加法为例,讲述⼀元多项式操作的实现。
用不定积分解答多项式数列求和问题的措施

探索探索与与研研究究在习题训练时,我们经常会遇到数列求和问题,其中多项式数列求和问题属于难度较大的一类题目.由于解答此类问题过程中的运算量较大,因而很多同学经常得不到正确的答案.事实上,我们可以利用不定积分来解答多项式数列求和问题.仔细观察数列{}n 2的前n 项和公式与函数y =x 2的不定积分,可以发现二者之间存在很多相似之处:(1)都是三次式;(2)三次式最高次项的系数都为13.这给了我们一个启示:多项式数列的前n 项和公式与对应的多项式函数不定积分之间有很多相同的地方.观察∑i =1ni =n (n +1)2,∑i =1n i =n (n +1)()2n +16,∑i =1n i =éëêùûún (n +1)22,可发现多项式数列的特点,可以得到下面的定理.定理1:若f k (n )=∑i =1ni k,k ∈N,则f k (n )必含有因子n .证明:采用数学归纳法证明.①当k =0时,f 0(n )=n ,结论成立.②假设当k ≤m ,m ∈N 时,结论成立,那么k =m +1时,由(n +1)m +2-n m +2=C m +1m +2n m +1+C m m +2nm+⋯+C 2m +2n 2+C 1m +2n +1,得∑i =1n []()i +1m +2-im +2=∑i =1n (Cm +1m +2im +1+C m m +2i m +⋯+C 2m +2i2+C1m +2i +1,∴(n +1)m +2-1=(m +2)∑i =1n im +1+Cm m +2∑i =1nim +1+⋯+C2m +2⋅∑i =1ni2+C 1m +2∑i =1ni +n ,∴∑i =1n i m -1=1m +2⋅éëê(n +1)m +2-1-æèçC mm +2∑i =1ni m +⋯+C 2m +2⋅ùûúöø÷∑i =1ni 2+C 1m +2∑i =1ni +n (*),右边显然含有因子n ,故左边也含有因子n .由①②得,f k (n )中必含有因子n .证毕.定理2:f k (n )=∑i =1ni k ,k ∈N +,则f ′k (n )=∑i =1n(i k )′+B k =k ⋅∑i =1n ik -1+B k ,其中B k 是常数.若B 0=1,则∑i =0nC i nB i =∑i =0nC i n B i=n +B n ,∑i =0nC i n(-1)n -iB i =B n ,n ∈N.证明:采用数学归纳法证明.当k =1时,f 1(n )=n 2+n 2,f ′k (n )=n +12,又∑i =1ni 0+B 1=n +B 1,所以B 1=12,结论成立.假设k ≤m ,m ∈N +时,结论成立,则当k =m +1时,在(*)式的两边同时对n 求导,得æèçöø÷∑i =1n i m +1′n =1m +2⋅éëê(n +1)m +2-1-æèçC m m -2∑i =1n i m +⋯+ùûúöø÷C 2m +2∑i =1ni 2+C 1m +2∑i =1ni +n ′n.可得æèçöø÷∑i =1n i m +1′n=(n +1)m +1-1m +2æèçC m m +2∑i =1n (i m )′+⋯+öø÷C2m +2∑i =1n (i 2)′+C 1m +2∑i =1n(i )′+C ,其中C =C m m +2B m +C m -1m +2B m -1+⋯+C 2m +2B 2+C 1m +2B 1+B 0,化简右边的式子得:æèçöø÷∑i =1n i m +1′=(m +1)∑i =1n i m +1-Cm +2.显然1-Cm +2是一个常数,记为B m +1.于是B m +1=1-Cm +2,即(m +2)B m +1=(m +2)-(C m m +2B m +⋯+C 2m +2B 2+C 1m +2⋅B 1+B 0),⇔C m m +2B m +1+(C m m +2B m +⋯+C 2m +2B 2+C 1m +2B 1+B 0)=m +2,⇔C m +2m +2B m +2+C m +1m +2B m +1+(C m m +2B m +⋯+C 2m +2B 2+C 1m +2B 1+B 0)=B m +2+(m +2),⇔∑i =0m +2C i m +2B i =(m +2)+B m +2,m ∈N +,(1)所以结论成立.证毕.通过证明可得∑i =0m +2(-1)m +2-i C im +2B i =B m +2,m ∈N +,(2)令B 0=1,B 1=12,B k =B k,那么(1)(2)式就变为:ìíî(B +1)n =B n +n ,(B -1)n=B n (n ≠1),n ∈N +,令n =2k ,k ≥2,得ìíîïï(B +1)2k =C 2k 2k B 2k +C 2k -12k B 2k -1+⋯+C 22kB 2+C 12kB 1+B 0=B 2k+2k ,(B -1)2k=C 2k 2kB 2k-C 2k -12kB 2k -1+⋯+C 22kB 2-C 12kB 1+B 0=B 2k,将两式相减得,2C 2k -12k B 2k -1+2C 2k -32k B 2k -3+⋯+C 32k B 3+2C 12k B 1=2k ,53探索探索与与研研究究又B 1=12,所以2C 2k -12k B 2k -1+2C 2k -32k B 2k -3+⋯+2C 32k B 3=0,依次令k =2,3,4,⋯,得B 3=B 5=B 7=⋯=0.可得数列{B k }前几项为:B 0=1,B 1=12,B 2=16,B 3=0,B 4=-130,B 5=0,B 6=142,⋯,数列{B k }就是伯努利数列,对应的递推公式为(B +1)n =B n (n ≠1),(B -1)n =B n +(-1)n n ,n ∈N .通过进一步研究,就可以得到公式∑i =1ni k =1k +1⋅[(B +n )k +1-B k +1].该式为1713年雅格布·伯努力著的《猜度术》中的方幂和公式.定理3:g (n )是多项式,f (n )=∑i =1n g (i ),则ìíîïïïïf ′(n )=∑i =1ng ′(i )+f ′(0),f (1)=g (1),f (0)=0,证明:由定理1得,∑i =1n g (i )中必含有因子n ,所以f (0)=0.而f (1)=g (1),由定理2得f ′(n )=∑i =1n g ′(i )+C .由定理1得∑i =1ng ′(i )中必含有因子n ,所以当n =0时,f ′(0)=0+C .所以f ′(n )=∑i =1n g ′(i )+f ′(0),证毕.推论1:g (n )是多项式,f (n )=∑i =1n g (i ),则一定有ìíîïïïïïïïïf ″(n )=∑i =1ng ″(i )+f ″(0),f ′(1)-f ′(0)=g ′(1),f (1)=g (1),f (0)=0.推论2:g (n )是多项式,f (n )=∑i =1n g (i ),则一定有ìíîïïïïïïïïïïïïïïïïïïïïf (k )(n )=∑i =1ng (k )(i )+f (k )(0),f (k -1)(1)-f (k -1)(0)=g (k -1)(1),f (k -2)(1)-f (k -2)(0)=g (k -2)(1),⋯f ″(1)-f ″(0)=g ″(1),f ′(1)-f ′(0)=g ′(1),f (1)=g (1),f (0)=0.这里运用导数的运算性质、不定积分公式、数学归纳法以及组合知识得到了伯努利数的递推公式,并通过进一步研究得到了方幂和的通项公式.由定理3、推论1、推论2可知,求高次多项式数列的和,要先对数列通项公式求导,再求和,最后用不定积分公式∫x k d x =1k +1x k +1+C,解微分方程就可以得到f (n )了.例题:(2020全国文数卷I,第16题)数列{a n }满足a n +2+(-1)n a n =3n -1,前16项和为540,则a 1=_____.解:令n =2k -1,k ∈N +,得a 2k +1-a 2k -1=6k -4,a 2k +1=(a 2k -1-a 2k -3)+(a 2k -3-a 2k -5)+⋯+(a 3-a 1)+a 1=(6k -10)+(6k -16)+⋯+2+a 1=(6k -10+2)(k -1)2+a 1=3k 2-7k +4+a 1,令h (k )=∑i =1ka 2i -1=∑i =1k(3i 2-7i +4+a 1),∴h (k )必含有因子k ,且有h ′(k )=∑i =1k(3i 2-7i +4+a 1)′+h ′(0)=∑i =1k(6i -7)+h ′(0)=3k 2-4k +h ′(0),∴h (k )=∫[3k 2-4k +h ′(0)]d x =k 3-2k 2+h ′(0)k .令n =2k ,k ∈N +,得a 2k +2+a 2k =6k -1,即a 2k +2-3(k +1)+2=-(a 2k -3k +2).∴a 2k -3k +2=(a 2-1)(-1)k -1,∴∑i =1ka 2i =∑i =1k[3i -2+(a 2-1)(-1)i -1]=(3k -1)k 2+(a 2-1)⋅1-(-1)k2.∑i =116a i=∑i =18a2i -1+∑i =18a 2i =h (8)+23×82=540,即83-2×82+h ′(0)⋅8+23×82=540,∴h ′(0)=8,∴h (k )=k 3-2k 2+8k ,∴a 1=h (1)=7解答本题,需根据定理1、定理2得到∑i =1ka 2i -1=k 3-2k 2+h ′(0)k 的表达式,这是是解答本题的关键.然后根据定理3、推论2,通过求不定积分得到h (k )的表达式,进而求得a 1的值.运用不定积分求高次多项式数列的和,关键要建立数列的前n 项和与多项式函数不定积分之间的联系,根据上述3个定理得出多项式函数f (n )=∑i =1ng (i ),然后通过求不定积分,求得数列的前n 项和.(作者单位:江西省赣州市南康区第三中学)54。
多项式求和顺序储存结构

#include<stdio.h>#define MAXLEN 100typedef struct{int data[MAXLEN];int last;}SeqList;void create_list(SeqList *D){ int n,i;printf("请按多项式X的最高次数:");scanf("%d",&n);for(i=MAXLEN-1;i>=0;i--)D->data[i]=0;printf("请输入多项式X的系数,缺少该项请输入0:\n");for(i=n;i>=0;i--){ printf("输入X^%d项的系数: ",i);scanf("%d",&D->data[i]);}D->last=n;}void add_List(SeqList A, SeqList B, SeqList *C){ int i;C->last=st>st? st:st;for(i=0;i<=C->last;i++)C->data[i]=A.data[i]+B.data[i];}void Show(SeqList C){int i,n=1; //项数计数for(i=st;i>=0;i--){if(C.data[i]==0) continue;if(C.data[i]>0&&n!=1) putchar('+');if(C.data[i]!=1&&C.data[i]!=-1){printf("%d",C.data[i]);if(i==1) putchar('X');else if(i) printf("X^%d",i);}else{if(C.data[i]==1){if(!i) putchar('1');else if(i==1) putchar('X');else printf("X^%d",i);}if(C.data[i]==-1){if(!i) printf("-1");else if(i==1) printf("-X");else printf("-X^%d",i);}}n++;}printf("\n");}void main(){ SeqList A,B,C;printf("生成多项式f(X):\n");create_list(&A);printf("f(X)=");Show(A);printf("生成多项式g(X):\n");create_list(&B);printf("g(X)=");Show(B);printf("多项式f(X)和g(X)的和\n ");add_List (A,B,&C);printf("f(X)+g(X)=");Show(C);}。
两多项式求和(C语言版)

两多项式求和(C语言版)#include "stdlib.h"#include "stdio.h"# define OVERFLOW -2typedef struct term{ float coef; //多项式系数int expn; //多项式指数struct term *next;} node;node *Create(int n)//创建一个n个结点的链表,并给每//个节点数据域赋值{ node *head, *p, *q;//int i;head=(node *)malloc(sizeof(node));if(!head) { printf("分配内存失败!");exit(OVERFLOW);}for(i=0;i<n;i++)< p="">{ p=(node *)malloc(sizeof(node));if(!p){ printf("分配内存失败!");exit(OVERFLOW);}printf("请输入第%d项系数:\n",i+1);//从键盘读取数据scanf("%f",&p->coef);printf("请输入第%d项指数:\n",i+1);scanf("%d",&p->expn);//从键盘读取数据if(i==0)//如果是第一个节点,则指针q、head同时指向该第一个实节点head->next=q=p;else //否则一个节点一个节点往后接{ q->next=p;p->next=NULL;q=p;}}return(head);//返回所建链表头指针}int cmp (node *m,node *n )//比较两个指数大小,并返回-1或0或1 { if(m->expnexpn)return -1;else if(m->expn==n->expn)return 0;elsereturn 1;}float Sum(node *m,node *n)//求多项式两个系数之和{ return m->coef+n->coef;}node *Add (node *a,node *b )//两个多项式相加{ node *ha,*hb,*pa,*pb,*tmpb;int t;ha=a;hb=b;while(ha->next!=NULL) {pa=ha->next;pb=hb->next;tmpb=hb;while(tmpb->next!=NULL){t=cmp(pa,pb);if(t==0){ (pa->coef)+=(pb->coef);pb=pb->next;tmpb->next=pb;}if(t!=0){tmpb=pb;pb=pb->next;}}ha=ha->next;}if(hb->next!=NULL)//如果多项式b还有某些项未执行相加操作,//则将其接到结果多项式a后面ha->next=hb->next;return a;//返回结果多项式}int main(){ node *x,*y,*p,*hp;int m=0,n=0;char c1,c2;printf("请输入第一个多项式的项数!\n");scanf("%d",&m);printf("请输入第一个多项式\n\n");x=Create(m);printf("请输入第二个多项式的项数!\n");scanf("%d",&n);printf("请输入第二个多项式\n\n");y=Create(n);p=Add(x,y );printf("两个多项式相加成功,其结果如下:\n"); while(p->next!=NULL)//输出相加所得的多项式{ printf("%5.1f",p->next->coef);if(p->next->expn!=0)printf(" * X(%d)",p->next->expn);p=p->next;if(p->next!=NULL)printf(" + ");}c1=getchar();c2=getchar();if(c2=='\n')printf("\n");return 0;}</n;i++)<>。
二元多项式求和

二元多项式求和
二元多项式求和是高中数学中的一个重要知识点,也是数学中的一种基本运算。
在学习二元多项式求和时,我们需要掌握二元多项式的定义、二元多项式的加减法、二元多项式的乘法等知识点。
我们来了解一下什么是二元多项式。
二元多项式是指含有两个变量的多项式,通常用x和y表示。
例如,3x^2y+2xy^2-5x^2y^2就是一个二元多项式。
接下来,我们来看一下二元多项式的加减法。
二元多项式的加减法与一元多项式的加减法类似,只需要将同类项合并即可。
例如,将3x^2y+2xy^2-5x^2y^2和4x^2y-3xy^2+2x^2y^2相加,我们可以先将同类项合并,得到7x^2y-xy^2-3x^2y^2。
我们来看一下二元多项式的乘法。
二元多项式的乘法需要用到分配律和结合律,具体步骤如下:
1. 将两个二元多项式中的每一项相乘,得到一系列的单项式。
2. 将这些单项式按照x和y的次数进行合并,得到一个新的二元多项式。
例如,将(3x+2y)(4x-5y)相乘,我们可以先将每一项相乘,得到12x^2-15xy+8xy-10y^2,然后将同类项合并,得到12x^2-7xy-10y^2。
二元多项式求和是高中数学中的一个重要知识点,需要我们掌握二元多项式的定义、二元多项式的加减法、二元多项式的乘法等知识点。
只有掌握了这些知识点,我们才能够在数学学习中更加得心应手。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
h->data[i]=f.data[i]+g.data[i];
}
void main()
{ SeqList f,g,h;
printf("创建的多项式f(x):\n");
printf("\n");
create_list(&f);
printf("f(x)=");
首先分析实验内容,要实现多项式求和,必须创建三个函数,一个是创建多项式的函数,一个是显示多项式的函数,最后面一个是两个多项式求和的函数。然后在主函数中两次调用函数,最后调用求和函数,实现求和功能。
源代码
#include<stdio.h>
#define MAXLEN 100
typedef struct
for(i=n;i>=0;i--)
{printf("输入X^%d项的系数: ",i);
scanf("%d",&D->data[i]);
}
D->last=n;
}
//两个多项式求和
void add_List(SeqList f, SeqList g, SeqList *h)
{ int i;
h->last=st>st? st:st;
电子信息学院
实验报告书
课程名:数据结构
题目:多项式求和
实验类别设计
班级:BX1001
学号:**************Βιβλιοθήκη **2011年09月25日
1.实验题目
(1)掌握线性表的顺序存储结构和链式存储结构;
(2)掌握线性表插入、删除等基本运算;
(3)掌握线性表的典型应用——多项式求和。
2 .实验内容
顺序存储结构的实现。
show_list(f);
printf("创建的多项式g(x):\n");
printf("\n");
create_list(&g);
printf("g(x)=");
show_list(g);
printf("多项式f(x)和g(x)的和 ");
add_List (f,g,&h);
printf("h(x)=");
}
//创建的多项式
void create_list(SeqList *D)
{ int n,i;
printf("请输入多项式X的最高次数:");
scanf("%d",&n);
for(int k=99;k>=0;k--)
D->data[k]=0;
printf("请按多项式X的次数由大到小输入系数,缺少项用0补齐\n");
show_list(h);
}
5.测试数据与实验结果(可以抓图粘贴)
6.结果分析与实验体会
程序成功运行,实验成功。我觉得我刚刚看到题目,第一反应是好难啊。但经过思考后,根据题目的提示,定义了顺序表数据结构类型,在三个函数中,我首先构建的是创建多项式的函数。这个函数其实不难,主要用到的就是循环结构,还有把系数赋给D->data[i]变量。在下面一个显示函数中也是通过循环体来显示一个个多项式中的各项,从st开始依次输出。在最后一个求和函数中就是把前面所创建的两个函数通过条件表达式来实现系数相加。还有一点非常重要,就是在多项式中系数缺少项补0,开始我很苦恼,没有那一项不知道怎么去除。相比前面的函数,主函数就显得繁琐了,一次次的调用函数,一次次用printf()函数输出。但不断修改后,界面就更加完美了。在整个实验中,我觉得我对循环结构的应用更加熟练了,也能轻易的调用数据实现简单的加减法,收获很大。
例如,已知:f(x)=8x^6+5x^5-10x^4+32x^2-x+10,g(x)=7x^5+10x^4-20x^3-10x^2+x,
求和结果:f(x)+g(x)=8x^6+12x^5-20x^3+22x^2+10。
顺序表类型定义如下:
#define MAXLEN 100
typedef struct
{ int data[MAXLEN];
int last;
} SeqList;
3.实验要求
(1)利用C(或C++)语言完成算法设计和程序设计。
(2)上机调试通过实验程序。
(3)输入数据,检验程序运行结果。
(4)给出具体的算法分析,包括时间复杂度和空间复杂度。
(5)撰写实验报告。
4.实验步骤与源程序
实验步骤
{ int data[MAXLEN];
int last;
} SeqList;
//显示多项式
void show_list(SeqList h)
{
for(int i=st;i>=1;i--)
if(h.data[i])
printf("\(%dx^%d\)+",h.data[i],i);
printf("\(%dx^%d\)\n",h.data[0],0);