ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:73.71KB ,
资源ID:5116930      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5116930.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一元多项式的运算.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一元多项式的运算.docx

1、一元多项式的运算数据结构课程设计实验报专业班级: 学 号: 姓 名:2011 年 1 月 1 日题目:一元多项式的运算1、题目描述一元多项式的运算在此题中实现加、减法的运算,而多项式的减法可以通过加法来实 现(只需在减法运算时系数前加负号) 。在数学上,一个一元 n 次多项式 Pn(X)可按降序写成:Pn(X)= Pn Xn+ P(n-1) X(n-1)+ + P1X+P0它由 n+1 个系数惟一确定,因此,在计算机里它可以用一个线性表 P 来表示 :P=( Pn ,P(n-1) , ,P1,P0)每一项的指数 i 隐含在其系数 Pi 的序号里 。假设 Q m( X)是一元 m 次多项式,同样

2、可以用一个线性表 Q 来表示:Q=( q m, q (m-1) , ,q1,q0)不是一般性,假设吗吗 mnext;q=0;/ 记录结点位置序号while(p&e.expndata.expn)p=p-next;q+;if(p=NULL|e.expn!=p-data.expn)return 0;elsereturn 1;void InsertNode(LinkList &L,DataType e,int q) 函数功能:将新的节点 p 插入到现有链表的后面,并确保多项式的指数 expn 是升序。将 s节点插入到 e 所指向的链表。在该 函数的操作中,要注意指针是如何移动的。/ 有序链表结点的插入

3、void InsertNode(LinkList &L,DataType e,int q)ListNode *s,*p;int i=0;p=L;while(p-next & inext;i+;/ 查找插入位置s=(ListNode*)malloc(sizeof(ListNode);s-data.coef=e.coef;s-data.expn=e.expn;s-next=p-next;p-next=s; 有了上述两个“结点的查找定位算法”和“有序链表结点的插入算法” ,int n 保存的多项式的项数,使用 for 语句,控制输入多项式的每一项。当创建的链表 长度为 n 时,将不再提示用户继续输入

4、多项式的系数和指数。建立一个一元多项式的单链 表的具体算法如下:/ 多项式链表的建立void CreatPolyn(LinkList &L,int n)LinkList pa; / 定义一个头指针为 pa 链表int i,q; /i 用来计输入的项数, q 指结点的位置序号DataType e; / 插入的值 e pa=(ListNode*)malloc(sizeof(ListNode); / 生成链表头结点 pa-next=NULL;for(i=1;inext;pb=Lb-next; /pa 和 pb 分别指向两个链表的开始结点Lc=pc=La; / 用 La 的头结点作为 Lc 的头结点w

5、hile (pa&pb)if(pa-data.expn pb-data.expn)pc-next=pa;pc=pa;pa=pa-next;else if(pa-data.expn data.expn)pc-next=pb;pc=pb;pb=pb-next;else sum=pa-data.coef+pb-data.coef;if(fabs(sum)0) / 系数和不为零pa-data.coef=sum;pc-next=pa;pc=pa;pa=pa-next;s=pb;pb=pb-next;free(s); else s=pa;pa=pa-next;free(s); s=pb;pb=pb-nex

6、t;free(s);pc-next=pa?pa:pb;/ 插入链表剩余部分 free(Lb);/ 释放 Lb 的头结点(4)多项式链表的输出void printList(LinkList L) 函数功能: 显示多项式链表。 在输出项中使用了条件表达式, 当系数项为正数时,在系数前输出一个“ + ”号,否则输出一个空格,而负数的负号还照常 输出,使得输出结果尽量与原多项式的表示形式类似。 因此, 输出多项式链表的算法实现如 下:/ 多项式链表的输出void printList(LinkList L)p=L-next;while(p)printf(%c %fx %d,(p-data.coef0?

7、+: ),p-data.coef,p-data.expn);p=p-next;printf(n);源程序代码:#include #include #include / 多项式链表结点类型定义typedef struct/ 在 struct 前使用关键字 typedef ,表示是声明新类型float coef; / 系数int expn; / 指数DataType; /DataType 是新类型typedef struct node/ 单链表的存储DataType data;/ 数据域struct node *next;/ 指向下一个结点ListNode,*LinkList;/ListNode

8、是结点的新类型, LinkList 是指向 ListNode 类型的结点的指针类型/ 结点的查找定位int LocateNode(LinkList L,DataType e,int &q)ListNode *p=L-next;q=0;/ 记录结点位置序号while(p&e.expndata.expn)p=p-next;q+;if(p=NULL|e.expn!=p-data.expn)return 0;elsereturn 1;/ 有序链表结点的插入void InsertNode(LinkList &L,DataType e,int q)int i=0;p=L;while(p-next & in

9、ext;i+;s=(ListNode*)malloc(sizeof(ListNode);s-data.coef=e.coef;s-data.expn=e.expn;s-next=p-next;p-next=s;/ 多项式链表的建立void CreatPolyn(LinkList &L,int n)LinkList pa; / 定义一个头指针为 pa 链表int i,q; /i 用来计输入的项数, q 指结点的位置序号DataType e; / 插入的值 epa=(ListNode*)malloc(sizeof(ListNode); / 生成链表头结点pa-next=NULL;scanf(%f,

10、%d,&e.coef,&e.expn);if(!LocateNode(pa,e,q) / 当前链表中不存在该指数项InsertNode(pa,e,q); / 调用 InsertNode 函数插入结点L=pa;/ 多项式链表的输出void printList(LinkList L)ListNode *p;p=L-next;while(p)printf(%c %fx %d,(p-data.coef0? +: ),p-data.coef,p-data.expn);p=p-next;printf(n);/ 多项式链表的相加void AddPolyn(LinkList La,LinkList Lb,Li

11、nkList &Lc) / 两个有序链表 La 和 Lb 表示的多项式相加float sum;pa=La-next;pb=Lb-next;/pa和 pb 分别指向两个链表的开始结点Lc=pc=La;/ 用 La 的头结点作为 Lc 的头结点 while (pa&pb)if(pa-data.expn pb-data.expn)pc-next=pa;pc=pa;pa=pa-next;else if(pa-data.expn data.expn)pc-next=pb;pc=pb;pb=pb-next;else sum=pa-data.coef+pb-data.coef;if(fabs(sum)0)/

12、 系数和不为零pa-data.coef=sum;pc-next=pa;pc=pa;pa=pa-next; s=pb;pb=pb-next;free(s);elses=pa;pa=pa-next;free(s);s=pb;pb=pb-next;free(s);pc-next=pa?pa:pb;/ 插入链表剩余部分free(Lb);/ 释放 Lb 的头结点/ 主控函数void main()LinkList La,Lb,Lc;int n;printf( 输入第一个多项式的项数 :);scanf(%d,&n);,指数 :n);,指数 :);printf( 输入第一个多项式的每一项的系数CreatPol

13、yn(La,n);printf( 第一个多项式为 :);printList(La);printf( 输入第二个多项式的项数 :);scanf(%d,&n);printf( 输入第二个多项式的每一项的系数CreatPolyn(Lb,n);printf( 第二个多项式为 :);printList(Lb);AddPolyn(La,Lb,Lc);printf(n 相加后的和多项式为 :);printList(Lc);5、调试分析此一元多项式的运算程序,只能实现一元多项式的加、减法,不能实现一元多项式的乘法, 而且若想计数多个多项式的和或者差的话, 必须退出界面重新开始计算。 在补充程序 里面,解决了程

14、序没有的选择功能表的功能,及其多项式的乘法运算。6. 测试结果输入多项式的项数,并且显示多项式及其两个多项式的和:补充程序:多项式运算程序具有以下基本功能:1界面输出,提示如何输入数据。要求先输入多项式的项数。2创建多项式。接收输入的数据,并保存到链表中。3显示程序的功能表,允许使用者选择运算类型。 4显示已经创建好的多项式。5实现加法运算。6实现减法运算。7实现乘法运算。8 清除内存内容,销毁创建的链表,退出程序。 该程序实现了多项式的创建、多项式的加法、减法、乘法运算以及多项式的清除。 源程序代码 :#include#include*/* 该函数的功能 :在计算机内要表示一个多项式, 至少

15、以下数据信息 - 系数信息、 指数信息和 指向下一个单项式的指针。 通过指针,我们就可以把多个单项式连接起来,形式一个多项式 .*/ typedef struct Polynomialfloat coef; / 系数int expn; / 指数struct Polynomial *next; / 指向下一个结点 *Polyn,Polynomial; /Polyn 为结点指针类型/* 以下函数用来实现链表的顺序排列和合并相同的项 */* 该函数的功能 :实现链表的顺序排列和合并相同的项。将新的节点 p 插入到现有链表的后面,并确保多项式的指数expn 是升序。将p 节点插入到 head 所指向的

16、链表。在该函数的操作中,要注意指针是如何移动的。 */ void Insert(Polyn p,Polyn h)if(p-coef=0)free(p); / 系数为 0 的话释放结点else / 如果系数不为 0q1=h;q2=h-next;q1=q2;q2=q2-next;if(q2&p-expn=q2-expn) / 将指数相同相合并q2-coef+=p-coef;free(p);if(!q2-coef) / 系数为 0 的话释放结点q1-next=q2-next;free(q2);else / 指数为新时将结点插入p-next=q2;q1-next=p;/Insert以下函数实现建立一个

17、多项式/* 该函数功能 :创建新的多项式链表。int m 保存的多项式的项数,使用 for 语句,控制输入多项式的每一项。当创建的链表长度 为m 时,将不再提示用户继续输入多项式的系数和指数。 */Polyn CreatePolyn(Polyn head,int m)/ 建立一个头指针为 head 、项数为 m 的一元多项式 ,int m 是保存的多项式的项数/ 在主程序初始时, 先输入的多项式中的项数 m 、n 在这里为 m 。主程序中的 pa 、pb 在此为 headint i;/ 定义 int i 计数,当 inext=NULL;for(i=0;icoef,&p-expn);Insert

18、(p,head); / 调用 Insert 函数插入结点return head;/CreatePolyn以下函数实现多项式的销毁/* 该函数的功能 :销毁掉创建的两个链表,释放内存。以辅助退出程序 */void DestroyPolyn(Polyn p)/ 销毁多项式 pPolyn q1,q2; q1=p-next; q2=q1-next;while(q1-next)free(q1);q1=q2; / 指针后移q2=q2-next;以下函数实现显示输出多项式 * */,尤其是第/* 该函数的功能 :显示多项式链表。在该函数中较复杂的是如何控制链表的输出项的输出,同时还有符号的控制。在输出第一项

19、时要判断是不是常数项 ,若是,则不要输出字符 x。 */void PrintPolyn(Polyn P)Polyn q=P-next;int flag=1;/ 项数计数器 ,flag=1 表示为第一项if(!q) / 若多项式为空 ,输出 0putchar(0);printf(n);return;while (q)if(q-coef0&flag!=1)/ 系数大于 0 且不是第一项 putchar(+);if(q-coef!=1&q-coef!=-1)/ 系数非 1 或 -1 的普通情况 printf(%g,q-coef);if(q-expn=1)putchar(X);else if(q-expn)printf(X%d,q-expn);elseif(q-coef=1)if(!q-expn)putchar(1);else if(q-expn=1)putchar(X);elseprintf(X%d,q-expn);if(q-coef=-1)if(!q-expn)printf(-1);else if(q-expn=1) printf(-X);elseprintf(-X%d,q-expn);q=q-next;flag+;/whileprintf(n);/PrintPolyn0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1