第二章上机作业题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 上机作业题: 用线性表实现一元多项式的操作 简介: 一元n次多项式 :Pn(x)=p0+p1x+p2x2+ … + pnxn 由n+1个系数唯一确定。因此,在计算机中,可以用一个线性表P来表示: P=(p0, p1, p2, … pn) 设Qm(x)为一元m次多项式: Q=(q0, q1, q2, … qm) 设mn , 则两个多项式相加的结果还是线性表: (p0+q0, p1+q1, p2+q2,… pm+qm, pm+1,… pn) 设计要求: 1. 设计上述一元多项式线性表的存储结构(如顺序结构,或者链式结构),并说明设计理由。 2. 根据1 , 设计一元多项式的输入和输出格式,并实现输入函数和输出函数。 3. 实现一元多项式相加运算,用下面的数据,输出结果: P20000(x)=1+5x5000+3x10000+6x15000+ 9x20000 Q20000(x)=8+2x3000+4x11000+3x12000+ 4x20000 R30000(x)=20+10x2000+8x16000+9x12000+ 7x30000 4. 实现一元多项式相乘运算,用下面的数据,输出结果: P20000(x)=1+5x5000+3x10000+6x15000+ 9x20000 Q20000(x)=8+2x3000+4x11000+3x12000+ 4x20000 5. 求多项式微商运算,用下面的数据,输出结果: P20000(x)=1+5x5000+3x10000+6x15000+ 9x20000 设计报告格式要求: 1. 基本信息:姓名,学号 2. 设计思路:说明你设计的理由,算法复杂性分析和结论。 3. 程序代码: 除了main()之外,其它的函数头要有注释,说明该函数的功能,各个参数的含义。 设计思路及程序实现 设计思路1: 最简单的,用一个一维数组P模拟多项式,其中P[i]表示多项式i次幂的系数,则加法,乘法和微分做法非常简单。然而观察题目所给系数非常大,而乘法的空间复杂度为O(m*n),非常浪费。同时也无法处理负指数幂的形式。所以不要采用这种形式。 设计思路2: 同样用一维数组模拟,只是P[i]=(coe,exp)为一个二元有序对,coe为第i项的系数,exp为第i项的次数。这样可以压缩空间,然而增加了一定的编程难度,同时由于加法乘法在插入结点的同时要移动大量的结点,造成较大的时间复杂度。而且同样无法精确分配足够空间。所以最好也不要用这种方法。 设计思路3: 否定了上诉思路后,一个概念便明确了:不能使用顺序表作为多项式的存储结构。同时另一个概念便浮现了:应该采用动态结构,即链表,来模拟多项式。下面便基于这一思路设计程序。 1.输入格式: 为了便于程序处理,输入应采取最简形式:先输入多项式总项数,再依次数升序输入多项式各项,先系数后次数,并确保系数非零。本程序不在另行检测合法性。 2.输出格式: 输出采用题例格式,即除常数项外,每项采用系数x次数的格式。项与项之间用加号连接。 3.数据结构: 为了达成上诉要求,下面给出多项式的结构定义。简单的说,多项式就是由多项式单项依次数升序连成的链表。 下面是数据结构的定义和输入输出程序。 struct lnode //多项式单项类型 { int coe;//系数 int deg;//次数 lnode* next; }; struct llist //多项式 { lnode* header;//头指针 }; void input(llist la)//输入一个多项式la,用有头结点的链表header表示 { la.header =new lnode; la.header -next = NULL; lnode* tailer; lnode* newer; cout请输入多项式的项数:\n; int n; cinn; cout请依次数升序输入多项式各项,先系数后次数,并确保系数非零。本程序不在另行检测合法性。\n; tailer=la.header; for (int i=1;i=n;i++) //用插尾法建立链表 { newer=new lnode; cinnewer-coe newer-deg; tailer-next =newer; tailer=newer; tailer-next=NULL; } } void oute(lnode* elem)//输出多项式单项 { coutelem-coe ; if (elem-deg !=0) coutxelem-deg; } void output(llist la)//输出多项式 { lnode* temp=la.header ; if (temp-next ==

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档