实验1 一元多项式的运算


实验时间

10-12课时。

实验目的

1. 熟悉编程环境,学习程序调试的方法。
2. 熟练掌握C/C++语言中指针的操作。
3. 掌握链表的常用算法。

问题描述

一元多项式可以表示为线性表,相应地一元多项式的运算可以用线性表的基本运算来实现。本实验要求以链表为存储结构,设计一个一元多项式运算器,实现一元多项式的创建、销毁、复制、打印显示、四则运算等功能。

实验内容

熟悉编程环境,对这个文件:listdebug.cpp进行调试,观察指针越界、指针非法等情况下,程序运行和调试时的表现。
实现一元多项式运算器的基本功能:(1)创建多项式;(2)打印显示多项式;(3)销毁多项式;(4)复制多项式;(5)求两个多项式的和;(6)求两个多项式的差;(7)求两个多项式的积;(8)求一个多项式的n次幂;(9)计算一个多项式在x=a处的值。
可选做的高级功能:(1)求两个多项式的商和余式;(2)求两个多项式的最大公约式和最小公倍式;(3)求一个多项式的n阶导函数;(4)求一个多项式的不定积分;(5)求一个多项式在区间[a, b]上的定积分。

实现提示

1. 由于程序有多项功能,可采用菜单选项的方式来分别调用各项功能。
2. 销毁多项式时,要注意释放所有结点的存储空间。
3. 求两个多项式的积可分解为一系列多项式求和运算。
4. 求商和余式可分解为一系列单项式除法、乘法和减法运算。
5. 求最大公约式可采用欧几里得辗转相除法,最小公倍式可由两个多项式及其最大公约式求出。

实验报告范例

问题描述(部分)

程序能够完成如下功能:……
程序输入输出是在命令行中完成的。用户选择所需功能,并输入数据进行运算。出错时会打印错误信息,但不会终止程序。直到用户选择退出,程序结束。
……

实验内容(部分)

程序中使用的主要数据结构是以链表存储的多项式,其定义为

……
程序中的主要函数有:……
其中,求两个多项式的差的函数:
函数原型是
void SubtractPolyn(Polynomial &Pa, Polynomial &Pb)
输入为两个多项式Pa和Pb,函数返回时Pa=Pa-Pb,Pb被销毁。
算法流程:对Pb的每一项,将其系数取负;接着调用AddPolyn函数计算Pa和Pb的和。
算法的时间复杂度是O(Pa.length+Pb.length),空间复杂度是O(1)。
……

实验结果(部分)

……
“多项式求差”功能的测试数据如下:
1. 求x^3+x^2+1和x^2-1的差,结果是x^3+2,正确。
2. 求6x^(-3)-x+4.4x^2-1.2x^9和-6x^(-3)+4.4x^2+7.8x^15的差,结果是-7.8x^15-1.2x^9-x+12x^(-3),正确。
3. 求x^7+x^3和x^7+x^3的差,结果是0,正确。
……

讨论与结论(部分)

……
在打印显示多项式的算法中,开始忘记考虑链表为空表的情况,当计算x^7+x^3和x^7+x^3的差的时候,没有输出。后来在打印显示算法中增加了对空表的处理,显示为0。
……