一元多项式的简单计算
- 格式:doc
- 大小:237.00 KB
- 文档页数:24
一元多项式的加法《一元多项式的加法:一场奇妙的数学之旅》嘿,小伙伴们!今天咱们来聊聊一个超级有趣的数学事儿——一元多项式的加法。
你们可别一听“数学”就觉得头疼,这个一元多项式的加法就像一场神奇的游戏呢。
我记得刚开始学这个的时候,心里直犯嘀咕。
啥是一元多项式呀?老师就给我们举例子,比如说3x + 5,这就是一个一元多项式啦,这里面只有一个未知数x,就像一场只有一个主角的戏。
那这个3呢,就像是这个主角x的跟班,时刻陪着它,而且这个3还决定了x的厉害程度。
5呢,就像是个小尾巴,自己在那孤零零地待着。
有一天,老师在黑板上写了两个一元多项式,一个是2x + 3,另一个是4x - 1。
老师说要把它们加起来。
我当时就懵了,这咋加呀?旁边的小明可积极了,他举手说:“老师,我觉得就是把相同的部分加起来。
”老师笑了笑,说:“那你上来试试。
”小明大踏步地走上讲台,他就像个小数学家一样自信。
他把2x和4x看成是一伙的,就像两个小伙伴要联合起来,那加起来就是6x呗。
然后再看3和- 1,这两个数字也要加起来,3加上- 1就等于2。
所以最后得出的结果就是6x + 2。
哇,我当时就觉得好神奇啊,就这么简单?后来,我自己也开始试着做一些一元多项式的加法。
比如说有一次我遇到了5x²+ 3x - 2和- 2x²+ 4x + 1这两个多项式相加。
我就想,这和之前的也差不多嘛。
5x²和- 2x²是同一类的,就像同一种族的小精灵,把它们加起来就是3x²。
3x和4x呢,就像是两个一起奔跑的小怪兽,加起来就是7x。
最后- 2和1,这两个数字就像两个小不点,加起来是- 1。
所以答案就是3x²+ 7x - 1。
我还和同桌小红讨论这个一元多项式的加法呢。
我对小红说:“你说这个一元多项式的加法是不是就像把不同的小积木组合在一起呀?”小红眼睛一亮,说:“对对对,就像我们搭积木,相同形状的积木要放在一起。
第一章 多项式§1 数域 §2 一元多项式一、数域1、定义:P 是由一些复数组成的集合,包含0和1,如果P 中的任意两个数的和、差、积、商(除数不为零)仍在P 中,则称P 为一个数域。
简单地说:P 是一个含0和1的非空集合,且对四种运算封闭。
2、例1:有理数的集合Q ,实数集合R ,复数集合C 均为数域。
例2:{}()2,2Q Q b a b a P =∈+=是一个数域。
证明:Pd c adcb d c bd ac d c d c d c b a d c b a d c d c P bc ad bd ac d c b a P d b c a d c b a P d b c a d c b a Qd c b a P d c b a P P ∈--+--=-+-+=++≠-≠+∈+++=++∈-+-=+-+∈+++=+++∈∈++∀∈+=∈+=2222)2)(2()2)(2(2202,02)5(2)()2()2)(2)(4(2)()()2()2)(3(2)()()2()2)(2(,,,,2,22011;2000)1(2222有若故P 是一个数域。
练习:证{}Q b a bi a i Q ∈+=,)(是一个数域。
二、一元多项式注:在数域P 上进行讨论,x 是一个符号。
1、定义:0111a x a x a x a n n n n ++++-- ,(-∈Z n )称为数域P 上的一元多项式。
其中P a a a n ∈,,,10 ,用 ),(),(x g x f 表示。
若0≠n a ,则称n a 为首项系数,n 为多项式的次数,用))((x f ∂表示。
0a 为常数项。
2、相等:)()(x g x f =当且仅当次数相同,对应系数相等。
3、运算:设0111)(a x a x a x a x f n n n n ++++=-- ,0111)(b x b x b x b x g m m m m ++++=-- ,m n ≥(1) 加法: )()()()()(00b a x b a x b a x g x f m m m n n n +++++++=+其中:011====+-m n n b b b())(),(max ))()((x g x f x g x f ≤+∂ (2) 乘法:snm s s j i j i m n m n m n m n m n xb a b a x b a b a x b a b a x b a x g x f ∑∑+==+-+--+⎪⎪⎭⎫ ⎝⎛=+++++++=0001001111)()()()()(若:0)(,0)(≠≠x g x f ,则))(())(())()((x g x f x g x f ∂+∂=∂ 4、运算规律:(1))()()()(x f x g x g x f +=+(加法交换律)(2)))()(()()())()((x h x g x f x h x g x f ++=++(加法结合律) (3))()()()(x f x g x g x f =(乘法交换律)(4)))()()(()())()((x h x g x f x h x g x f =(乘法结合律) (5))()()()())()()((x h x f x g x f x h x g x f +=+(分配律) (6)若,0)(),()()()(≠=x f x h x f x g x f 则)()(x h x g =(消去律) 5、多项式环。
一元多项式的表示与相加
一元多项式是指只含有一个变量的多项式,其表示方式通常为:
f(x) = a0 + a1x + a2x^2 + …+ anxn
其中,a0、a1、a2……an是多项式的系数,n是多项式的次数,x是变量,^表示“次方”的意思。
一元多项式的相加可以通过对应同次幂的系数进行相加的方式实现。
例如,给定两个一元二次多项式:
f(x) = 2x^2 - 3x + 1
g(x) = x^2 + 2x - 3
我们可以将它们相加,得到下面的结果:
f(x) + g(x) = (2+1)x^2 + (-3+2)x + (1-3)
= 3x^2 - x - 2
因此,将两个一元多项式相加时,需要先确定它们的次数,并将同次幂的系数相加后得到新的系数。
如果某个多项式的次数高于另一个多项式,则需要在较低次数的多项式中补充0作为系数再进行相加。
1.2一元多项式1.若43232231321(),()f x x x x x g x x x x =-+-+=-+-,求()(),()(),f x g x f x g x +-和()()f x g x4324325522()(),()()f x g x x x x f x g x x x x x +=++-=-+-+ 765432314141210621()()f x g x x x x x x x x =-+-+-+- 2.求,,a b c 使22432211251()()x bx x ax x x cx x +--+=++--224322112211()()()()()x bx x ax x b a x ab x a b x +--+=+-+-++-432251x x cx x =++-- 所以: 2511,,b a ab c a b -=-=+=-213,,a b c ⇒=-== 3.,,,a b c d 取何值时,多项式32322()()()f x a b c x a b c x dx =+-++-++与 322()()()()g x a c x a d x c a x b =++-+++相等.1234,,,a b c d ====4.将多项式4323223()f x x x ax x =-++-化成2x +的方幂形式43232262852122261()()()()()f x x x x x =+-+++-++5.设多项式00(),()f x g x ≠≠,问(),()f x g x 的系数满足什么条件时,公式(()())m ax{(),()}f x g x f x g x ∂+≤∂∂ 等号成立?满足什么条件时,小于号成立?1110()n n n n f x a x a xa x a --=++++ ,1110()n n n n g xb x b x b x b --=++++ 当0n n a b +≠时,公式中的等号成立; 当0n n a b +=时,公式中的小于号成立;6.设(),(),()[]f x g x h x R x ∈,若222()()()f x xg x xh x =+,则0()()()f x g x h x ===(),()g x h x 至少有一个不是零多项式.由于(),()[]g x h x R x ∈,所以2222(()())m ax{(),()}g x h x g x h x ∂+=∂∂ 于是等式222()()()f x xg x xh x =+右边的的次数为奇数,而左边的次数为偶数,这导致矛盾,所以必然有0()()()f x g x h x ===7. .设(),()[]f x g x R x ∈,若00(),()f x g x ≠≠,证明则220()()f x g x +≠11100(),n n n n n f x a x a x a x a a --=++++≠ ,11100(),m m m m m g x b x b x b x b b --=++++≠ ,并且m n ≤于是22()()f x g x +的最高次项的系数为22,()n m a b m n +=或2,()n a m n <,不论是哪种情形,22()()f x g x +的最高次项的系数都不为零,所以220()()f x g x +≠ (但这个结论对复数域上的多项式不成立,例如22(),(),f x ix g x x ==但22440()()f x g x x x +=-+=。
数据结构课程设计实验报告专业班级:学号:姓名:2011年1月1日题目:一元多项式的运算1、题目描述一元多项式的运算在此题中实现加、减法的运算,而多项式的减法可以通过加法来实现(只需在减法运算时系数前加负号)。
在数学上,一个一元n次多项式P n(X)可按降序写成:P n(X)= P n X^n+ P(n-1)X^(n-1)+......+ P1X+P0它由n+1个系数惟一确定,因此,在计算机里它可以用一个线性表P来表示:P=(P n,P(n-1),......,P1,P0)每一项的指数i隐含在其系数P i的序号里。
假设Q m(X)是一元m次多项式,同样可以用一个线性表Q来表示:Q=(q m,q(m-1),.....,q1,q0)不是一般性,假设吗吗m<n,则两个多想是相加的结果:R n(X)= P n(X)+ Q m(X)很显然,可以对P,Q和R采用顺序存储结构,使得多项式相加的算法定义和实现简单化。
然而,在通常的应用中,多项式的次数可能变化很大而且很高,使得顺序存储结构的最大长度很难确定。
特别是在处理项数少且次数特别高的情况下,对内存空间的浪费是相当大的。
因此,一般情况下,都采用链式存储结构来处理多项式的运算,使得两个线性链表分别表示一元多项式P n(X)和Q m(X),每个结点表示多项式中的一项。
通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就是去了意义,在计算机内要表示一个多项式,至少具有以下数据信息:系数信息、指数信息和指向下一个单项式的指针。
通过指针,我们就可以把多个单项式连接起来,形成一个多项式。
2、任务要求系数定义的是float型,范围是3.4*10^-38~3.4*10^38;指数定义的是int型,范围是-2147483648~+2147483647;输入多项式系数及指数,系统会自动将系数转化为浮点型。
功能:(1).提示输入数据。
一元多项式除法运算例子
1. 嘿,咱就说多项式除法就像分苹果一样!比如说吧,(x³ + 2x² - x + 1) ÷ (x - 1),这不就像是要把一堆苹果按照某种方式分给几个人嘛。
你不想看看怎么分吗?
2. 哇哦,想想看一元多项式除法啊,就像一场精彩的游戏!拿(x² + 3x + 2) ÷ (x + 1)来说,这就如同在游戏中解开一个谜题一样刺激呢!难道你不想参与进来?
3. 哎呀呀,一元多项式除法运算有的时候真让人头疼但又很有趣呢!像
(x^4 - 1) ÷ (x + 1),简直就是在挑战你的大脑!你不会觉得这很有意思吗?
4. 嘿,你知道吗,一元多项式除法有时候就像走迷宫一样!比如(x³ - 3x² + 2x) ÷ (x - 2),得一步步找到正确的路啊!这可太吸引人了吧!
5. 哇塞,一元多项式除法,那可真是个神奇的东西!好比说(x² - 4x + 3) ÷ (x - 3),就跟寻找宝藏一样充满惊喜呢!你不想去挖掘一下吗?
6. 哈哈,一元多项式除法运算啊,像是一场奇妙的冒险!就像(x³ + x² - 5x - 6) ÷ (x + 2),是不是感觉很刺激,很想去尝试一下?
7. 哎呀,一元多项式除法有时候就像是解开一道复杂的密码!比如(2x³ +
5x。
高中数学多项式方程解题方法一、一元多项式方程的解法在高中数学中,我们经常会遇到一元多项式方程,即只含有一个未知数的多项式方程。
解一元多项式方程的方法有很多种,下面我将介绍其中几种常用的方法。
1.1 因式分解法当方程可以进行因式分解时,我们可以通过因式分解来求解方程。
例如,考虑如下方程:x^2 - 5x + 6 = 0我们可以将其因式分解为:(x - 2)(x - 3) = 0从而得到方程的解为 x = 2 或 x = 3。
因式分解法适用于方程的系数比较简单的情况,能够快速求解方程。
1.2 完全平方公式法当方程可以写成完全平方的形式时,我们可以利用完全平方公式来求解方程。
例如,考虑如下方程:x^2 - 6x + 9 = 0由于方程可以写成 (x - 3)^2 = 0 的形式,根据完全平方公式,我们知道方程的解为 x = 3。
完全平方公式法适用于方程的系数较为复杂,但方程可以写成完全平方形式的情况。
1.3 二次方程求根公式法对于一元二次方程 ax^2 + bx + c = 0,我们可以利用二次方程求根公式来求解方程。
二次方程求根公式为:x = (-b ± √(b^2 - 4ac)) / (2a)例如,考虑如下方程:2x^2 - 5x + 2 = 0根据二次方程求根公式,我们可以得到方程的解为 x = 1 或 x = 0.5。
二次方程求根公式法适用于一元二次方程的解法,可以求解任意一元二次方程。
二、多元多项式方程的解法除了一元多项式方程,我们还会遇到多元多项式方程,即含有多个未知数的多项式方程。
解多元多项式方程的方法也有很多种,下面我将介绍其中几种常用的方法。
2.1 消元法消元法是解多元多项式方程的常用方法之一。
通过逐步消去未知数的方法,将方程化简为只含有一个未知数的方程,从而求解方程。
例如,考虑如下方程组:2x + 3y = 74x - 5y = 1我们可以通过消元法将方程组化简为:2x + 3y = 78x - 10y = 2然后再通过加减法或代入法求解方程组。
一元多项式计算与链表概述及解释说明1. 引言1.1 概述在计算机科学和数学领域,一元多项式计算是一个重要的问题。
一元多项式是指包含一个未知数的多项式,它由各个项的系数和指数决定。
而链表作为一种常见的数据结构,具有灵活性和高效性,可以应用于各种问题的解决中。
1.2 文章结构本文将首先对一元多项式计算进行介绍,包括多项式的定义与表示方法、多项式加法运算以及多项式乘法运算。
然后,我们将详细探讨链表的概念、特点以及链表在一元多项式计算中的应用。
接下来,将通过实例演示来解释一元多项式计算,并说明链表结构在多项式计算中的优势。
最后,我们将分享解决一元多项式计算问题时相关的考虑事项与技巧,并对研究内容进行总结,并展望其可能的拓展方向。
1.3 目的本文旨在向读者介绍和解释一元多项式计算与链表之间的关系,并探讨链表在该问题中所起到的作用。
通过深入了解一元多项式及其计算方法,以及链表数据结构原理和应用场景,读者将能够更好地理解一元多项式的计算过程,并了解链表在提高计算效率和灵活性方面的重要作用。
同时,通过分享解决问题时的考虑事项与技巧,本文还有助于读者在实际应用中更好地利用链表结构来解决一元多项式计算问题。
2. 一元多项式计算:2.1 多项式定义与表示方法:一元多项式是由若干个单项式构成的代数表达式。
一个单项式由系数和指数组成,通常可以表示为a*x^b的形式,其中a为系数,x为未知数,b为指数。
而一个多项式则是由多个单项式相加得到。
在计算机中,可以用数组或链表来表示一元多项式。
使用数组时,每个元素可以存储一个单项式的系数和指数;而使用链表时,则可以将每个单项式作为节点存储在链表中。
2.2 多项式加法运算:两个多项式相加时,需要将同一个指数的单项式进行合并并对系数进行相加。
具体步骤如下:- 将两个多项式中所有的不同指数提取出来形成一个集合。
- 遍历集合中的每个指数,在两个多项式中查找该指数对应的单项式。
- 如果某个多项式不存在该指数的单项式,则该指数对应的系数为空。
数据结构一元多项式的运算数据结构一元多项式的运算简介一元多项式是数学中常见的概念,用于表示一个变量的多项式表达式。
在计算机科学中,经常需要对一元多项式进行各种运算,如加法、减法、乘法等。
为了实现这些运算,可以使用数据结构来存储和操作一元多项式。
本文将介绍一元多项式的数据结构和常见的运算方法,并给出相应的代码示例。
数据结构一元多项式可以用链表来表示。
每个节点包含两个部分:系数(coefficient)和指数(exponent)。
系数表示该项的权重,指数表示该项的幂次。
链表的每个节点按照指数的升序排列。
以下是一个一元多项式的链表表示的示例:```markdown1.2x^2 + 3.7x^4 - 0.5x^3 -2.1x^1 + 4.0``````markdownNode 1: coefficient=1.2, exponent=2Node 2: coefficient=3.7, exponent=4Node 3: coefficient=-0.5, exponent=3Node 4: coefficient=-2.1, exponent=1Node 5: coefficient=4.0, exponent=0```运算方法加法运算两个一元多项式相加可以按照如下步骤进行:1. 遍历两个链表的节点,分别取出当前节点的系数和指数。
2. 如果两个节点的指数相等,将系数相加,并将其作为结果链表的节点。
3. 如果两个节点的指数不相等,将指数较小的节点插入结果链表,并继续遍历指数较大的节点。
4. 当其中一个链表遍历完后,直接将另一个链表的节点插入结果链表。
以下是加法运算的代码示例:```pythondef addPolynomials(p1, p2):result = Nonetl = Nonewhile p1 is not None and p2 is not None:if p1.exponent == p2.exponent:coef_sum = p1.coefficient + p2.coefficient if coef_sum != 0:node = Node(coef_sum, p1.exponent)if result is None:result = tl = nodeelse:tl.next = nodetl = nodep1 = p1.nextp2 = p2.nextelif p1.exponent > p2.exponent:node = Node(p1.coefficient, p1.exponent) if result is None:result = tl = nodeelse:tl.next = nodetl = nodep1 = p1.nextelse:node = Node(p2.coefficient, p2.exponent) if result is None:result = tl = nodeelse:tl.next = nodetl = nodep2 = p2.nextwhile p1 is not None:node = Node(p1.coefficient, p1.exponent)if result is None:result = tl = nodeelse:tl.next = nodetl = nodep1 = p1.nextwhile p2 is not None:node = Node(p2.coefficient, p2.exponent) if result is None:result = tl = nodeelse:tl.next = nodetl = nodep2 = p2.nextreturn result```减法运算减法运算可以看作加法运算的特殊情况,即将第二个多项式的系数取负数,再进行加法运算。
多项式的解法公式一、一元一次多项式(形如ax + b = 0,a≠0)1. 解法公式。
- 移项:将含x的项移到等号一边,常数项移到等号另一边,得到ax=-b。
- 求解x:x =-(b)/(a)。
二、一元二次多项式(形如ax^2+bx + c = 0,a≠0)1. 解法公式。
- 求根公式:x=frac{-b±√(b^2)-4ac}{2a}。
- 当b^2-4ac>0时,方程有两个不同的实数根。
- 当b^2-4ac = 0时,方程有两个相同的实数根(即一个实数根)。
- 当b^2-4ac<0时,方程没有实数根,在复数范围内有两个共轭复数根。
三、二元一次多项式方程组(形如a_1x + b_1y=c_1 a_2x + b_2y=c_2)1. 解法公式。
- 代入消元法。
- 由第一个方程a_1x + b_1y=c_1解出x(或y),例如x=(c_1 - b_1y)/(a_1)(a_1≠0)。
- 将x=(c_1 - b_1y)/(a_1)代入第二个方程a_2x + b_2y=c_2,得到关于y的一元一次方程,然后求解y。
- 把求出的y值代入x=(c_1 - b_1y)/(a_1)求出x。
- 加减消元法。
- 若要消去x,则给第一个方程乘以a_2,给第二个方程乘以a_1,得到a_1a_2x + a_2b_1y=a_2c_1 a_1a_2x + a_1b_2y=a_1c_2。
- 两式相减(a_1a_2x + a_2b_1y)-(a_1a_2x + a_1b_2y)=a_2c_1 - a_1c_2,即(a_2b_1 - a_1b_2)y=a_2c_1 - a_1c_2,然后求解y。
- 将y的值代入原方程组中的一个方程求解x。
一元多项式简单计算学生姓名:冯茹指导老师:陈倩诒摘要本次试验依据长沙理工大学10级数据结构实验要求,较完善的对题目进行了分析,理解和编程,程序思路清晰,考虑全面。
对于此题,应该使用链式存储结构存储多项式的信息,并根据算法用C语言编程。
同时在的报告后面附带了一部分程序源码和对程序的同步解释,为了更直观的对程序的理解,该报告还运用了框架图,使读者能够更好地认识程序。
在用C语言编程的时候,要用到的语句主要有函数调用语句,输入和输出语句等。
关键词链式存储结构;C语言;函数调用目录1、引言.................................. 错误!未定义书签。
1.1 本次课程设计目的......................... 错误!未定义书签。
1.2 实验环境............................................. - 2 -1.3 实验的任务要求....................................... - 3 -2、设计思路与方案 (2)2.1 问题的数学模型 (2)2.2 算法设计 (2)2.3 构造数据结构 (3)2.4 存储结构 (3)3、详细实现 (4)3.1可行性研究 (4)3.2系统结构与主要功能模块 (4)3.3 系统设计 (6)4、运行环境与结果 (9)5、结束语 (11)参考文献 (12)附录 (13)1.引言1.1本次课程设计的目的是对数据结构所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。
通过课程设计,能够提高分析问题、解决问题,从而运用所学知识解决实际问题的能力。
1.2实验环境Visual C++ 6.01.3 实验的任务要求1.3.1 任务设计一个一元多项式简单的计算器。
1.3.2 要求⑴输入并建立多项式;(2)输出多项式;(3)两个多项式想加,建立并输出和多项式;(4)两个多项式相减,建立并输出差多项式。
2.设计思路与方案2.1 问题的数学模型在数学上,一个一元多项式Pn(x)可按升幂写成:Pn(x)=a 0+a1 x+a2 x^2 +…+a n x^n-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,…,an)每一项的指数i隐含在其系数ai的序号里。
2.2 算法设计本程序主要应用了链表,结构体和类模板[1]。
用结构体来定义多项式的结点(即每一项),它包含三个域,分别存放该项的系数、指数以及指向下一项结点的指针;用链表来存储多项式,为了节省空间,只存储多项式中系数非0 的项,用多项式链表类来实现设定的程序的基本功能。
涉及的主要算法有:(1)使用尾插法创建多项式,即从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志(某一项的系数为零)为止。
(2)输出一个非空的多项式链表,不要输出最后一项,即输入系数为零的结束项,用if……else语句判断。
(3)删除整个多项式是一项一项的删,使用链表删除其结点的方法,使用free()函数释放存储空间。
在删除非空的多项式的某一项时,定义k来找到要删除的那一项的位置,再使用delete将其删除。
(4)在对多项式合并同类项时,主要有两点,一是看两项指数是否相等,若相等则合并成一项,二是看两项系数和是否为零,若为零则去掉这两项。
在对多项式排序时,先合并同类项,再按指数值从小到大排序。
(5)在拷贝多项式时使用重载函数,将系数和指数都拷贝给新的多项式。
(6)在判断两多项式是否相等时,先分别对两多项式进行排序,再从头项开始,一项一项的比较其系数和指数,一旦有一个不相等就结束,即这两多项式不相等,否则相等。
(7)计算多项式加减,其算法思想是相同的。
以多项式加法为例,先对两多项式排序,再将两多项式的每一项逐项相加,在相加之前,先比较两项的指数是否相等,若相等则将系数相加,再判断系数是否为零,若为零则删除,否则存储在和多项式中。
若两项指数不相等,当多项式pa指数大于多项式pb指数时,则将pa结点副本插入到和多项式PolyC尾部;当pa指数小于pb指数时,则将pb 结点副本插入到和多项式PolyC尾部,最后插入剩余结点。
2.3 构造数据结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。
通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式[2]。
基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial{float coef;//系数int expn;//指数struct Polynomial *next;//指向下一个结点}*Polyn,Polynomial; //Polyn为结点指针类型2.4 存储结构一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。
链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。
创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
3.详细实现3.1 可行性研究该程序主要从技术的角度来分析可行性。
技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。
该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发平台已成熟可行。
硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,其硬件平台也比较能满足此系统的需要。
此外,还有经济可行性,用户使用可行性,法律可行性等可行性研究,这里从简省去。
3.2 系统结构与主要功能模块从实现多项式式运算过程的角度来分析,至少需要这样一些子功能模块。
如:1. 多项式创建功能;2. 多项式运算功能;3. 操作界面显示功能;4. 销毁多项式的功能;5. 多项式复制功能等。
系统的整体流程和主要功能模块如图3-1所示开始输入选择显示 加法 显示功能表 输入pa 系数、指数退出输入pb 系数、指数减法乘法i=mi=mi<mi<m 图3.1 流程图3.3 系统设计3.3.1系统设计目的与要求通过多项式运算程序设计(用C语言实现),使我们进一步掌握和利用C语言进行结构化程序设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握开发一个小型系统程序设计的基本方法;学会调试一个较长程序的基本方法;学会利用流程图或N-S图表示算法[3];以及掌握书写课程设计开发文档的能力(书写课程设计报告)。
总之,通过本课程设计加深对《C语言》及《数据结构》课程所学知识的理解,进一步巩固C语言语法规则,在程序中体现出算法的思想,提高程序的运行效率。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。
3.3.2系统设计内容多项式运算程序具有以下基本功能:1.界面输出,提示如何输入数据。
要求先输入多项式的项数。
2.创建多项式。
接收输入的数据,并保存到链表中。
3.显示程序的功能表,允许使用者选择运算类型。
4.显示已经创建好的多项式。
6.实现加法运算。
7.实现减法运算。
8.清除内存内容,销毁创建的链表,退出程序。
3.3.3功能算法描述与数据结构说明该多项式程序除了main()函数外,主要有以下函数:void Insert(Polyn p,Polyn h) [4]Polyn CreatePolyn(Polyn head,int m)void DestroyPolyn(Polyn p)void PrintPolyn(Polyn P)int compare(Polyn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)3.3.4 系统主要功能函数的详细设计1. main()函数main函数用来实现提示使用者输入、显示功能列表、调用其他运算函数实现运算功能。
在main()函数中,定义m、n用来保存两个多项式的项数,pa、pb、pc、pd、pf定义程序所需链表的头指针。
在程序开始要求输入两个多项式的项数,随后根据项数创建两个链表以保存多项式,再显示出功能列表后通过if语句来实现功能的选择,从而对整个程序流程进行控制。
2.Polyn CreatePolyn(Polyn head,int m)该函数功能是创建新的多项式链表。
int m保存的多项式的项数,使用for 语句,控制输入多项式的每一项。
当创建的链表长度为m时,将不再提示用户继续输入多项式的系数和指数。
在该函数中要用到分配空间的函数malloc()为新建链表分配空间。
3. void DestroyPolyn(Polyn p)该函数的功能是销毁掉创建的两个链表,释放内存。
以辅助退出程序。
4. void Insert(Polyn p,Polyn h)该函数功能:将新的节点p插入到现有链表的后面,并确保多项式的指数exp是升序。
将s节点插入到head所指向的链表。
在该函数的操作中,要注意指针是如何移动的。
5.Polyn AddPolyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式pa、pb相加,并将计算结果存储于新建立的pc中,它的原理是将指数相同的单项式相加,系数相加后为0,则pa、pb的指针都后移。
在加法计算中要求pa,与pb的幂次序都是升序,否则可能得到错误的结果。
该函数调用了int compare(Polyn a,Polyn b)的结果,用来判断多项式在同一指数下a、b是否有为系数为0。
同样也使用了malloc()关键字,为新链表创建空间。
6. int compare(Polyn a,Polyn b)该函数功能:判断两个多项式在同一指数下是否有其中一个为系数为0。
用来辅助加法和乘法运算。
7. Polyn SubtractPolyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式pa、pb相减,其原理根加法类似,将指数相同的指数相减。
与加法不同的是在送在减法中,创建了新的链表来存放结果,并返回该链表的头指针。
8. void PrintPolyn(Polyn P)该函数功能:显示多项式链表。
在该函数中较复杂的是如何控制链表的输出,尤其是第一项的输出,同时还有符号的控制。