c语言实现一元多项式的除法,课内资源 - 基于C++的一元多项式的计算

1 问题描述

将多个多项式输入并存储在内存中,然后对多项式进行加、减运算并输出结果。

2 数据结构描述一元多项式的表示方式:如 f=6x^5-7x^4+3 表示为 f=6,5 -7,4 3,0

每个多项式用单链表来存储:

typedefstructPolyNode

{

floatcoef;// 系数

intexpn;// 指数

structPolyNode*next;// 指向下个结点的指针

}Poly;

图示举例

fa867a89cc4ceed96ed4742b1730e989.png

3 主要算法描述主要功能:对输入的一元多项式进行加减运算并输出

程序主要模块:如下图所示

559a8ba5b23b5ba33b5ddfbbe923ffdb.png

3.1 模块一:一元多项式的建立结点类型为:结构体Poly

数据流:系数、指数。

函数名为:

intCreatPoly(P_Poly*,int);

3.2 模块二:两个一元多项式的加法数据流:两个一元多项式相加后的结果

函数名为:

voidAddPoly(P_Poly*,P_Poly,P_Poly);

f1e6f0d3f8b2cb5c61cdbd4c3ec54dce.png

3.3 模块三:两个一元多项式的减法数据流:两个一元多项式相减后的结果;

函数名为:

voidDecPoly(P_Poly*,P_Poly,P_Poly);

2887120ceee9b6cc0e819904ac928dee.png

程序中的主要函数及相应功能:

// 创建一元多项式

intCreatPoly(P_Poly*,int);

// 输出一元多项式

voidOutP_Poly(P_Poly);

// 两个多项式求和

voidAddPoly(P_Poly*,P_Poly,P_Poly);

// 两个多项式求差

voidDecPoly(P_Poly*,P_Poly,P_Poly);

4 程序的调试

4.1 问题一

由于程序运用了输入输出流的控制符,而没有包含文件,所以在连接时,出了错,后来看了下面窗口的错误提示,才知道自己忘了包含该文件进去。

4.2 问题二

因为输入多项式每一项时的格式为”系数,指数”,而用cin语句不知怎么解决,后来查找资料获悉用scanf函数可以实现输入的格式控制,因此运用了scanf这一函数。

4.3 问题三

输出多项式时,要输出正负号,这是一个比较麻烦的问题。开始想到了运用输出控制符setiosflags(ios::showpos)直接输出正号。可是却发现启用了该控制符后对后面的输出也起作用,导致x后面的指数在输出时也带上了正号。左思右想,得不到解决办法,只好另寻方法。最后多项式是可以输出来了,可是每次输出完后随即弹出出错框(如下图),这个问题本人至今还想不透。

ca3fc1a599d74a1815695edca45d1f10.png

5 程序测试

多项式名称不符合时的情况(本程序规定用单个小写字母命名多项式),如:命令输出一元多项式A

e55114bbcf70c33750d55faa3946f44b.png

多项式不存在时的输出情况,如:命令输出一元多项式a

3c6a5fc8ddb6608b18ebce1e9ea79fa1.png

两多项式相加,如:a=6x^6-10x^5+4x^2 b=-x^6+5x^5+6x^4+2x^3

fbfd6d333151bc51bea616fcb51602a9.png

两多项式相减,如:a=-6x^7+10x^6+4x^4 b=5x^6-9x^5+5x^4+3x^3

cf70220ec7a11cf890a0d65fae68aacd.png

6 程序特色本程序的力求简单明了,让使用者易于掌握。因此每一个指令都有相应的提示语句,分别按照这些提示语句进行选择,就会出现相应的菜单或实现相应的功能。

原本想加上乘法和除法的运算,可是每项互乘除要求两个链表的节点数据也相乘除,问题太多,又想不到好的解决办法,想不出具体实现的函数,因此,没有进行功能扩展。这也是本程序最大的不足之处。

每个函数对应解决一个问题,模块分明,系统出现错误时,易于限定哪个函数还不能完美实现某个功能,以便修改并改进。在完善程序的时候,这个特点帮了我很大的忙。例如调试减法运算功能时,系统有时会出现错误,因此便锁定在相减的函数上查找不足。又如,自己对输出这一功能不是很满意,要改进的话则只需在输出函数上做改进。

7 课程设计总结

这一次的课程设计,我再次感到了程序世界的美妙。

记得在分析完问题的要求后,对要写的程序进行了初步的模块划分。当时觉得问题看起来很简单,但是在具体实现的函数编写上遇到了很多的细节问题。在着手解决这些问题的过程中,虽然耗费了不少时间,困难重重,但付出了总会有收获,即使有一些问题自己还没有十分满意的解决掉,但在无形之中自己又增加了不少课外知识和一些以前忽略的知识点,拓宽了自己的视野,提升了自己的动手能力。

最主要的是对单向链表的使用有了更深刻的了解和掌握,因为多项式的计算要求用单向链表来实现,所以在做课程设计之前通过网上找资料,查参考书等对单向链表的使用比以前掌握的更加到位,并且能够灵活运用,通篇几乎用的都是单向链表,这是受益的一大重点。

参考资料

[1] 数据结构教程学习指导(第3版). 李春葆. 北京: 清华大学出版社, 2009

[2] C++程序设计. 谭浩强. 北京: 清华大学出版社, 2008

[3] C++程序设计题解与上机指导. 谭浩强. 北京: 清华大学出版社, 2007

[4] C++程序开发例题与习题. 张基温. 北京: 清华大学出版社, 2001

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值