- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)