一元多项式求和问题的研究与实现

一元多项式求和问题的研究与实现
一元多项式求和问题的研究与实现

一元多项式求和问题的研究与实现

学生姓名:指导老师:

摘要在数学上,一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+anxn,它由n+1个系数唯一确定,一元多项式求和实质上是合并同类项的过程。在实际应用中,多项式的指数可能很高且变化很大,在表示多项式的线性表中就会存在很多零元素。因此,采用单链表来存储一个一元多项式的每一个非零项的系数和指数,即每一个非零项对应单链表中的一个结点,且单链表按指数递增有序排列,就可实现两个一元多项式求和问题。程序通过调试运行,能基本达到设计要求,解决问题。

关键词数据结构;一元多项式;单链表;结点

1 引言

一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+a n x n,它由n+1个系数唯一确定。因此,可以用一个线性表(a0,a1,a2,……,an)来表示,每一项的指数i隐含在其系数ai的序号里。若有A(x)= a0+a1x+a2x2+……+a n x n和B(x)=b0+b1x+b2x2+……+b m x m,一元多项式求和也就是求A(x)=A(x)+B(x),这实质上是合并同类项的过程。

1.1 设计目的

设计合理数据结构表示一元多项式,并设计高效算法实现两个一元多项式相加。

1.2 设计要求

本课程设计要求用C++实现两个一元多项式的求和问题,用带头结点的单链表村存储多项式。基本功能要求如下:

1.输入并建立多项式,输入形式为整数序列n,x1,y1,x2,y2,……,x n,y n。其中n是多项式的项数,x i和y i分别是第i项的系数和指数。

2.输出多项式,按指数升序排列。

3.多项式A(x)和B(x)相加,建立多项式A(x)+B(x),输出相加的多项式,形式为类数学表达式。

2 需求分析

2.1 输入形式和输入值的范围

从键盘依次输入两个多项式的项数,系数和指数。系数为任意整数,项数和指数为大于等于0的整数。

2.2 输出形式

从屏幕输出,显示用户输入的多项式,并显示两多项式相加后的多项式和值。2.3 时间性能分析

所谓时间性能是指实现基于某种存储结构的基本操作(即算法)的时间复杂度。

像取出线形表中第i个元素这样的按位置随机访问的操作,使用顺序表更快一些,时间性能为O(1);相比之下,单链表中按位置访问只能从表头开始依次向后扫描,直到找到那个特定的位置,所需要的平均时间为O(n)。

在单链表中进行插入和删除操作不需要移动元素,在给出指向单链表中某个合适位置的指针后,插入和删除操作所需的时间仅为O(1);而顺序表进行插入和删除操作需移动表长一半的元素,需要的平均时间为O(n)。

作为一般规律,若线性表需频繁查找却很少进行插入和删除操作,或其操作和“数据元素在线性表中的位置”密切相关时,宜采用顺序表作为存储结构;若线性表需频繁进行插入和删除操作,则宜采用单链表作为存储结构。

对于一元多项式求和问题,由于在实际应用中,多项式的指数可能很高且变化很大,一个较好的存储方法是只存非零元素。这样,一个一元多项式的每一个非零项可由系数和指数唯一表示。例如,S(x)=5+10x30+90x100就可以用线性表((5,0),(10,30),(90,100))来表示。

如果采用顺序表存储,对于指数相差很多的两个一元多项式,相加会改变多项式的系数和指数。若相加的某两项的指数不等,则将两项分别加在结果中,将引起顺序表的插入;若某两项的指数相等,则系数相加,若相加结果为零,将引起顺序表的删除。因此采用顺序表可以实现两个一元多项相加,但并不可取。因此,经过分析,在时间性能比较上适宜采用单链表存储,则每一个非零项对应单链表中的一个结点,且单链表应按指数递增有序排列。

2.4 空间性能分析

所谓空间性能是指某种存储结构所占用的存储空间的大小。

如果数据域占据的空间较小,则指针的结构性开销就占去了整个结点的大部分,因而从结点的存储密度上讲,顺序表的存储空间利用率较高。由于顺序表需要预分配一定长度的存储空间,如果事先不知道线性表的大致长度,则有可能对存储空间预分配得过大,致使存储空间得不到充分利用,造成浪费。若估计得过小,又将发生上溢而造成存储空间的再分配;而单链表不需要为其预分配空间,只要有内存空间可以分配,单链表中的元素个数就没有限制。

在此问题中,一个多项式虽然是由一个包括系数和指数的线性表唯一确定的,可是在实际应用中,多项式的指数往往很高且变化很大,项数也不确定,在线性表中,元素变化较大或者未知时,最好使用单链表实现。

3 概要设计

3.1 数据结构设计

为了实现任意多项式的加法,通过以上的时间性能和空间性能分析,选择单链表的结构体,结点结构如图3.1所示。

图3.1 一元多项式链表的结点结构

其中,valuea:系数域,存放非零项的系数;

valueb:指数域,存放非零项的指数;

next:指针域,存放指向下一结点的指针。

3.2 程序模块设计

根据以上对该一元多项式求和问题的功能要求和需求分析,到如图3.2所示的程序流程图。

图3.2 程序流程图

4 详细设计

4.1 菜单设计

简单明了的主菜单是程序成功运行的首要条件。在菜单函数中,调用了函数menuupdown(),该函数用来显示十五次短划线,用作菜单分隔符,使菜单清晰明了,易操作。其中主要的输出语句如下:

cout<<"\t\t\t┃\t\t\t\t┃"<

cout<<"\t\t\t┃\t1.输入一元多项式。\t┃"<

cout<<"\t\t\t┃\t2.输出一元多项式。\t┃"<

cout<<"\t\t\t┃\t3.两多项式相加。\t┃"<

cout<<"\t\t\t┃\t4.退出。\t\t┃"<

cout<<"\t\t\t┃\t\t\t\t┃"<

cout<<"\t\t\t";

cout<<"┗";

4.2 主模块设计

该课程设计的主模块就是解决求和问题。为运算方便,采用带头结点的单链表。先举例分析两个多项式求和的执行过程。

设两个工作指针p和q,分别指向两个单链表的开始结点。两个多项式求和实质上是对结点p的指数域和结点q的指数域进行比较,这会出现下列三种情况:

(1)若p->valuebvalueb,则结点p应为结果中的一个结点,将指针p后移。

示意如图4.1。

图4.1 第一种情况示意图

(2)若p->valueb>q->valueb,则结点q应为结果中的一个结点,将q插入到第一个单链表中结点p之前,再将指针q后移。示意如图4.2。

图4.2 第二种情况示意图

(3)若p->valueb=q->valueb,则p与q所指为同类项,将q的系数加到p的系数上。若相加结果不为0,则将指针p后移,删除结点q;若相加结果为0,则表明结果中无此项,删除结点p和结点q,并将指针p和指针q分别后移。示意如图4.3所示。

(a)相加系数不为零

(b)相加系数为零

图4.3 第三种情况示意图

算法用伪代码描述如下:

1.工作指针p、q初始化;

2.while(p存在且q存在)执行下列三种情形之一

2.1 如果p->valuebvalueb,则指针p后移;

2.2 如果p->valueb>q->valueb,则

2.2.1 将结点q插入到结点p之前;

2.2.2 指针q指向原指结点的下一个结点;

2.3 如果p->valueb=q->valueb,则

2.3.1 p->valuea=p->valuea+q->valuea;

2.3.2 如果p->valuea==0,则执行下列操作,否则,指针p后移;

2.3.2.1 删除结点p;

2.3.2.2 使指针p指向它原指结点的下一个结点;

2.3.3 删除结点q;

2.3.4 使指针q指向它原指结点的下一个结点;

3.如果q不为空,将结点q链接在第一个单链表的后面;

上述伪代码描述的算法还有一个问题:将结点q插到结点p之前和将结点p删除需要知道结点p的前驱结点的地址;将结点q删除也需要知道结点q的前驱结点的地址。所以,在每个单链表中应设两个工作指针。

4.3 类定义

1.用单链表存储多项式每一非零项,为该单链表建立item,其类定义如下:

class item

{

private:

double valuea;

double valueb;

double corp;

item * next;

public:

item(double ax,double bx) { }

item( ) {

cin>>valuea>>valueb;

corp=0; next=NULL;

}

friend class operate;

};

在item类中,提供了如下成员函数:

(1) 函数声明:item(double ax,double bx) { };

完成的功能:有参数构造函数,主要用于生成临时一元多项式的项和头指针。

(2) 函数声明:item( ) {

cin>>valuea>>valueb;

corp=0;

next=NULL;

}

完成的功能:无参数构造函数,主要用于生成一元多项式时使用。

(3) 函数声明:friend class operate;

完成的功能:为了能访问到类item的私有成员,operate应指定为item类的友元类。

2.为操作建立operate,其类定义如下:

class operate

{

private:

item * head,* record;

public:

operate();

item * gethead();

void creat();

item* addsame(item* atemp);

void show(item * show);

operate operator + (operate lasts);

};

在operate类中,提供了如下成员函数:

(1) 函数声明:operate( );

完成的功能:无参数构造函数,用于生成链表头。

(2) 函数声明:item * gethead( );

完成的功能:用于取出多项式的头地址。

(3) 函数声明:void creat( );

完成的功能:声明creat函数,用于生成链表,即输入多项式。

(4) 函数声明:item* addsame(item* atemp);

完成的功能:该函数主要将单个多项式中相同的项相加。

(5) 函数声明:void show(item * show);

完成的功能:显示多项式。

(6) 函数声明:operate operator + (operate lasts);

完成的功能:重载+符号用于多项式相加。

5 测试与分析

5.1 操作平台

运行该程序的操作平台分硬件和软件两方面。

1.硬件要求:此程序需在一台PC机上运行,拥有INTER或AMD的CPU即可。

2.软件要求:本程序能在Windows 9X/2000/XP/2003下运行。

5.2 错误调试分析

1.Call of non-function:调用尚未定义的函数,而正在被使用的函数则没有定义,是由于不正确的函数声明或者是函数名拼写错误所导致的。

2.Cannot modify a constant object:不能修改一个常量对象,对定义为常量的对象进行不合法的操作都将引起该错误。

3.Argument list syntax error:参数表出现语法错误,函数调用的一组参数之间没有以逗号隔开,并以一个右括号结束。

4.Extra parameter in call:调用函数时出现多余函数,调用一个函数时,其实际参数的个数多余函数定义中的参数个数。

5.For statement missing )for:后面缺少“)”,在编制程序的时候,编译程序会发现控制表达式后面缺少右括号。

5.3 程序运行测试

1.菜单界面测试。开始程序执行,显示菜单功能界面,如图5.1。

图5.1 操作菜单截图

2.测试第一组数据(带同类项的两多项式相加)。按操作提示分别输入两多项式:

(1)2x3+5x2;

(2)4x3+17x2+6x。

运行界面如图5.2所示。

图5.2 输入多项式截图

选择2,输出多项式,如图5.3所示。

图5.3 输出多项式截图

选择3,操作界面输出两多项式相加后的表达式。如图5.4。

图5.4显示多项式和截图

3.测试第二组数据(系数为负数的两多项式相加)。

选择1,按操作提示分别输入两多项式:

(1)-3x8+10x11+9x13;

(2)-7x8+5x5。

运行界面如图5.5所示。

图5.5 输入截图选择2,输出多项式,如图5.6。

图5.6 输出截图选择3,输出多项式和,如图5.7。

图5.7 显示多项式和截图

6 结束语

经过半个多月的思考和设计,我基本完成了对一元多项式求和问题的研究与实现。虽然程序简短,操作简单,但它能很好地解决任意两个多项式的求和问题。

虽然在研究和解决问题,逐步完成程序的过程中,遇到了始料未及的困难,但通过自己努力查找资料,积极和其他同学交流,在对程序一次次修改和调试后,解决了很多程序运行出现的错误。在对所学的有限知识的理解和掌握下,并在老师的精心指导下,我终于基本完成了课程设计任务。通过两周的研究学习,动手实践,愈发深刻地体会到<<数据结构>>课程的重要性。该课程的学习效果直接影响到我对其它专业课的学习和今后业务的成长。算法是计算机科学的基石,一个好算法应该具有较短的执行时间并占用较少的辅助空间,是一个程序成功与否的决定性因素。

因为对专业知识没有很深的认识,加之课程设计时间较短,所以设计的程序还有许多不尽如人意的地方,其中难免有一些是错误的或者是不合理的,望老师批评指导。

在以后的学习中,我还应该不断的完善自己的知识体系结构,注意理论与实践的结合,学以致用,达到了学习的真正目的!

参考文献

[1] 王红梅,胡明,王涛. 数据结构(C++版)[M]. 北京:清华大学出版社,2005

[2] 王红梅等. 数据结构(C++版)学习辅导与实验指导[M]. 北京:清华大学出版社,2005

[3] 钱能. C++ 程序设计教程[M]. 北京:清华大学出版社,2006

[4] 李春葆.数据结构[M].北京:清华大学出版社,2002

附录:一元多项式求和主要源程序清单

// 程序名称:一元多项式求和问题的研究与实现

// 程序功能:采用C++语言,实现任意两一元多项式求和。

// 程序作者:梁艳君

// 最后修改日期:2008-9-12

#include

#include

void menuupdown(); //声明菜单的某个部分

class item

{

private:

double valuea; //声明系数

double valueb; //声明指数

double corp; //在做和是只是是否计算过

item * next; //指向下一个元素的地址

public:

item(double ax,double bx) //有参数构造函数,主要用于生成临时一元多项式的项和头指针{

valuea=ax;

valueb=bx;

corp=0;

next=NULL;

}

item() //无参数构造函数,主要用于生成一元多项式时使用

{

cin>>valuea>>valueb;

corp=0;

next=NULL;

}

friend class operate; //声明类operate为类item的友元类

};

void introduce()

{

cout<

cout<

}

//end of class item

//---------------------------------------------------------------

//begin of class operate

class operate

{

private:

item * head,* record; //定义head指向头指针,定义record记录链表最后指针位置,并用于链接链表

public:

operate(); //声明operate函数,用于生成链表头

item * gethead(); //取出多项式的头地址

void creat(); //声明creat函数,用于生成链表,即输入多项式

item* addsame(item* atemp); //声明函数,主要将单个多项式中相同的项相加

void show(item * show); //声明函数,显示多项式

operate operator + (operate lasts); //声明函数,重载+符号用于多项式相加

};

//end of class operate

//---------------------------------------------------------------

//begin of function operate() in class operate

operate::operate() //caozuo构造函数实现过程

{

head= new item(0,0); //使head指向头结点

record=head; //record初始化指向头指针

}

//end of function operate in class operate

//---------------------------------------------------------------

//begin of function gethead() in class operate

item * operate::gethead() //gethead函数实现过程

{

return head; //返回头指针

}

//end of function gethead() in class operate

//---------------------------------------------------------------

//begin of function creat() in class operate

void operate::creat() //creat函数实现过程

{

int i,j;

cout<<"请输入多项式项数:"<

::menuupdown(); //显示一长串---------

cout<

cin>>j;

for(i=1;i<=j;i++)

{ // 依次输入m个非零项

cout<<"输入第"<

item * p=new item;

record->next=p; //以下两句是使链表相连

record=p;

}

}

//end of function creat() in class operate

//---------------------------------------------------------------

//begin of function addsame in class operate

item* operate::addsame(item* atemp)

{

item * h=atemp; //声明的h指针,指向待检查的项

item * h1=atemp; //声明h1指针,指向被比较的项

item * htemp; //用作删除项

while(h1->next) //使被检查项指针在h(待检查项)循环完毕后循环

{

htemp=h1;

if(h->next) //若果h-next不为空,那么指向下一项

h=h->next;

else

h->next=NULL;

while(h->valueb==h1->valueb&&htemp->next) //比较"待检查的项"系数与"被检查项"系数是否相等

{

h1->valuea=h1->valuea+h->valuea; //相等的话使之相加,并把结果放到被检查项处

if(h->next) //如果待检查项的下一项不为空,那么指向,即删除待检查项

{

htemp->next=h->next;

h=h->next;

}

else

{

htemp->next=NULL;

h->next=NULL;

}

}

if(h1->next)

h1=h1->next;

else

h1->next=NULL;

}

return atemp;

}

//end of function addsame in class operate

//---------------------------------------------------------------

//begin of function show in class operate

void operate::show(item * show)

{

int i=0;

if(show->next) //忽略头指针

show=show->next;

//具体显示过程

while(show)

{

if(i>0&&show->valuea>0) //如果不是第一项,那么在前面加上+符号cout<<"+";

if(show->valuea==1) //如果系数为1

if(show->valueb==1) //如果指数为1

cout<<"X";

else

cout<<"X^"<valueb;

else

if(show->valueb==1)

cout<valuea<<"X";

else

cout<valuea<<"X^"<valueb;

show=show->next;

i=i+1;

}

cout<

}

//end of function show in class operate

//---------------------------------------------------------------

//begin of function operator + in class operate

operate operate::operator + (operate lasts)

{

item * last=lasts.gethead(); //声明last指向被加对象的头指针

if(last->next)

last=last->next;

operate answer; //声明定义临时answer对象,用于保存相加结果item * p=answer.gethead(); //p用于操作结果链

item * headlast=last; //headlast用于操作被加链表

operate thistemp=*this;

item * headfirst=thistemp.gethead(); //取出加号前的链表的头地址

if(headfirst->next)

headfirst=headfirst->next;

item * record=p; //record用于链接结果链表

//相加过程,两层循环遍历所有加数

while(headfirst)

{

double answertemp=0;

int flag=0;

while(headlast)

{

if(headlast->valueb==headfirst->valueb) //如果两项指数相等

{

if(flag==0) //如果是第一次执行

{

answertemp=headlast->valuea+headfirst->valuea;

flag=1;

}

else

{

answertemp=answertemp+headlast->valuea;

}

headlast->corp=1; //记录第二多项式项已相加

}

headlast=headlast->next;

}

if(answertemp!=0) //若果相加过,即两式中有相同指数的项存在{

item * temp=new item(answertemp,headfirst->valueb);

record->next=temp;

record=temp;

}

else

{

item * temp=new item(headfirst->valuea,headfirst->valueb);

record->next=temp;

record=temp;

}

headlast=last;

headfirst=headfirst->next;

}

headlast=last;

while(headlast) //再次在第二多项式里遍历,找corp为零的项,即此项未相加过{

if(headlast->corp==0)

{

item * temp=new item(headlast->valuea,headlast->valueb);

record->next=temp;

record=temp;

}

if(headlast->next)

headlast=headlast->next;

else

headlast=NULL;

}

return answer;

}

//end of function operator + in class operate

//---------------------------------------------------------------

//begin of function menuupdown in global

void menuupdown() //显示15次━,用作菜单

{ int i;

for(i=0;i<15;i++)

cout<<"━";

}

//end of function menuupdown in global

//---------------------------------------------------------------

//begin of function menu in global

void menu() //菜单函数

{

int i;

for(i=0;i<2;i++)

cout<

introduce();

for(i=0;i<2;i++)

cout<

cout<<"\t\t\t";

cout<<"┏";

menuupdown();

cout<<"┓"<

cout<<"\t\t\t┃\t\t\t\t┃"<

cout<<"\t\t\t┃\t1.输入一元多项式。\t┃"<

cout<<"\t\t\t┃\t2.输出一元多项式。\t┃"<

cout<<"\t\t\t┃\t3.两多项式相加。\t┃"<

cout<<"\t\t\t┃\t4.退出。\t\t┃"<

cout<<"\t\t\t┃\t\t\t\t┃"<

cout<<"\t\t\t";

cout<<"┗";

menuupdown();

cout<<"┛"<

}

//end of function menu in global

//---------------------------------------------------------------

//begin of function main in global

void main()

{

char inputchoose,YesOrNo; //声明两变量,分别保存选项,是否退出int select=0; //标示是否已创建对象,如果已创建,则会赋值为1 operate news1; //声明第一个操作多项式

operate news2; //声明第二个操作多项式

operate answeradd; //声明,用于相加后保存结果

item * heada;

item * headb;

do

{

(完整版)高等代数多项式习题解答.doc

第一章多项式习题解答1.用g( x)除f ( x),求商q( x)与余式r ( x) . 1)f ( x) x3 3x2 x 1, g (x) 3x2 2x 1 3x 2 2x 1 x3 3x 2 x 1 1 x 7 x3 2 x2 1 x 3 9 3 3 7 x2 4 x 1 3 3 7 x2 14 x 7 3 9 9 26 x 2 9 9 1 x 7 , r ( x) 26 x 2 q( x) 9 9 . 3 9 2)f ( x) x4 2x 5, g(x) x2 x 2 x2 x 2 x 4 0x3 0 x2 2 x 5 x2 x 1 x4 x3 2x2 x3 2x2 2x x3 x2 2x x2 4x 5 x2 x 2 5x 7 q( x) x2 x 1, r ( x) 5x 7 . 2.m, p, q 适合什么条件时,有 1)x2 mx 1| x3 px q x 2 mx 1 x3 0 x2 px q x m x3 mx2 x mx2 ( p 1) x q m x2 m2 x m (m2 p 1) x ( q m) 当且仅当 m2 m 时x2 1| x3 px q .

本题也可用待定系数法求解.当x2 mx 1| x3 px q 时,用 x2 mx 1 去除x3 px q ,余式为零,比较首项系数及常数项可得其商为x q .于是有x3 px q ( x q)( x2 mx 1) x3 (m q)x2 (mq 1) x q . 因此有 m2 p 1 0, q m . 2)x2 mx 1| x4 px2 q 由带余除法可得 x4 px2 q ( x2 mx 1)( x2 mx p 1 m2 ) m(2 p m2 ) x (q 1 p m2 ) 当且仅当 r ( x) m(2 p m2 ) x (q 1 p m2 ) 0 时 x2 mx 1 | x4 px2 q .即 m(2 p m2 ) 0 ,即m 0, 或 p m2 2, q 1 p m2 0 q 1 p, q 1. 本题也可用待定系数法求解 .当x2 mx 1| x4 px2 q 时,用 x2 mx 1 去除x4 px2 q ,余式为零,比较首项系数及常数项可得其商可设为x2 ax q .于是有 x4 px2 q (x 2 ax q)( x2 mx 1) x4 (m a) x3 (ma q 1) x2 (a mq) x q. 比较系数可得 m a 0, ma q 1 p, a mq 0. 消去 a 可得 m 0, 或p m2 2, q 1 q 1. p, 3.求g( x)除f ( x)的商q( x)与余式r ( x) . 1)f ( x) 2x5 5x3 8x , g (x) x 3; 解:运用综合除法可得 3 2 0 5 0 8 0 6 18 39 11 7 327 2 6 1 3 39 109 327 商为 q(x) 2x4 6x3 13x2 39 x 109 ,余式为 r (x) 327.

顺序链式一元多项式加法、减法、乘法运算的实现

1.1设计内容及要求 1)设计内容 (1)使用顺序存储结构实现多项式加、减、乘运算。 例如: 10321058)(2456+-+-+=x x x x x x f ,x x x x x x g +--+=23451020107)( 求和结果:102220128)()(2356++-+=+x x x x x g x f (2)使用链式存储结构实现多项式加、减、乘运算, 10305100)(1050100+-+=x x x x f ,x x x x x x g 320405150)(10205090+++-= 求和结果:1031040150100)()(102090100++-++=+x x x x x x g x f 2)设计要求 (1)用C 语言编程实现上述实验内容中的结构定义和算法。 (2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。 (3)用switch 语句设计如下选择式菜单。 ***************数据结构综合性实验**************** *******一、多项式的加法、减法、乘法运算********** ******* 1.多项式创建 ********** ******* 2.多项式相加 ********** ******* 3.多项式相减 ********** ******* 4.多项式相乘 ********** ******* 5.清空多项式 ********** ******* 0.退出系统 ********** ******* 请选择(0—5) ********** ************************************************* *请选择(0-5): 1.2数据结构设计 根据下面给出的存储结构定义: #define MAXSIZE 20 //定义线性表最大容量

多项式与多项式相乘同步练习(含答案).doc

第 3 课时多项式与多项式相乘 要点感知多项式与多项式相乘,先用一个多项式的_____乘另一个多项式的_____,再把所得的积_____.( a+b)( p+q)=_____. 预习练习1- 1填空:(1)(a+4)(a+3)=a·a+a·3+4·_____+4×3=_____; (2)(2 x- 5y)(3 x-y)=2 x·3x+2x·_____+(- 5y) ·3x+( -5y) ·_____=_____. 1- 2计算:(x+5)(x-7)=_____;(2x-1)·(5x+2)=_____. 知识点 1直接运用法则计算 1.计算: (1)( m+1)(2 m- 1) ;(2)(2 a- 3b)(3 a+2b) ;(3)(2 x- 3y)(4 x2+6xy +9y2) ;(4)( y+1) 2;(5) a( a-3)+(2 -a)(2+ a). 2. 先化简,再求值:(2 x- 5)(3 x+2) - 6( x+1)( x- 2), 其中x= 1 . 5 知识点 2多项式乘以多项式的应用 3.若一个长方体的长、宽、高分别是3x- 4,2 x- 1 和x,则它的体积是 ( ) - 5x2+4x-11x2+4x-4x2-4x2+x+4 4. 为参加市里的“灵智星”摄影大赛,小阳同学将同学们参加“义务献爱心”活动的照片放大为长为 a 厘米,宽为

3 a 厘米的长方形形状,又精心在四周加上了宽 2 厘米的装饰彩框,那么小阳同学的这幅摄影作品照片占的面积是 4 _____平方厘米 . 5. 我校操场原来的长是 2x 米,宽比长少 10 米,现在把操场的长与宽都增加了 5 米,则整个操场面积增加了 _____ 平方米 . 知识点 3 ( x +p )( x +q )= x 2+( p +q ) x +pq 6. 下列多项式相乘的结果为 x 2+3x - 18 的是 ( ) A.( x - 2)( x +9) B.( x +2)( x - 9) C.( x +3)( x - 6) D.( x -3)( x +6) 7. 已知 ( x +1)( x - 3)= x 2 +ax +b ,则 a , b 的值分别是 ( ) =2 , b =3 =- 2, b =-3 =- 2, b =3 =2, b =- 3 8. 计算: (1)( x +1)( x +4) (2)( m - 2)( m +3) (3)( y +4)( y +5) (4)( t -3)( t +4). 9. 计算: (1)( - 2 n )( - - ) ; (2)( x 3 - 2)( x 3+3) - ( x 2 ) 3+ 2 · ; m m n x x

一元多项式求和

一元多项式求和——链表编程 一.实验名称:一元多项式求和——链表编程。 二.实验环境:Windows Xp ,Vc++6.0。 三.实验目的: 1.掌握一元多项式的链表式存储算法; 2.掌握链表的结构定义; 3.采用尾插法生成单链表。 四.实验内容: 1.一元多项式的表示: 一元多项式可按升幂的形式表示为 12012()n e e e n n P x p p x p x p x =++++…… 其中:i e 为第i 项的指数,i p 是指数i e 的项的系数,且 121i n e e e e <=<=<=<=<=<=……。 则多项式()n P x 可以用一个线性表P 来表示:01(,)m P p p p =, ;同理,多项式 ()n Q x 可表示为01(,,)n Q q q q =…(mcodf=c;

单项式与多项式练习题

单项式与多项式练习题 一、填空题 1.“x 的平方与2的差”用代数式表示为 . 2.单项式8 53ab -的系数是 ___,次数是 ___;当5,2a b ==-时,这个代数式的是 . 3.多项式34232-+x x 是 次 项式,常数项是 . 4.单项式2 5x y 、2 2 3x y 、2 4xy -的和为 . 5.若 32115k x y +与387 3 x y -是同类项,则k = . 6.已知单项式32b a m 与-3 2 14-n b a 的和是单项式,那么m = ,n = . 8.已知轮船在逆水中前进的速度是m 千米/时,水流的速度是2千米/时,则这轮船在静水中航行的速度是 千米/时. 9.一个两位数,个位数字是a ,十位数字比个位数字大2,则这个两位数是 . 10.若53<

数据结构-多项式相加

数据结构课程设计 2012年12月 班级:XXX 学号:XXX 姓名: XXX 指导教师:XXX

一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【算法设计思想】 ①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

【实现提示】 用带表头结点的单链表存储多项式。 【程序代码】 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } } void display(polynmial L)//显示,输出多项式L { struct node *p, *q; int flag = 0; int k = 0; q = L->next; while(q)

多项式乘多项式习题(含答案)

第3课时多项式与多项式相乘 知识点多项式与多项式相乘 1.填空:(1)(x-1)(x+2)=x2+________+________-2=______________; (2)(2x+3y)(x-2y)=________+________+________+________=________________. 2.[2018·武汉]计算(a-2)(a+3)的结果是( ) A.a2-6 B.a2+a-6 C.a2+6 D.a2-a+6 3.有下列各式: ①(a-2b)(3a+b)=3a2-5ab-2b2;②(2x+1)(2x-1)=4x2-x-1; ③(x-y)(x+y)=x2-y2;④(x+2)(3x+6)=3x2+6x+12. 其中正确的有( ) A.4个 B.3个 C.2个 D.1个 4.化简: (1)(2x+3y)(3x-2y); (2)(a+3)(a-1)+a(a-2); (3)(2x-3)(x+4)-(x+5)(x+6). 5.先化简,再求值: (1)8x2-(x-2)(3x+1)-2(x+1)(x-5),其中x=-2; (2)x(x+2)(x-3)+(x-1)(-x2-x+1),其中x=-1 3 . 6.根据右图的面积可以说明多项式的乘法运算(2a+b)(a+b)=2a2+3ab+b2,那么根据图②的面积可以说明多项式的乘法运算是( ) A.(a+3b)(a+b)=a2+4ab+3b2 B.(a+3b)(a+b)=a2+3b2 C.(b+3a)(b+a)=b2+4ab+3a2 D.(a+3b)(a-b)=a2+2ab-3b2 7.已知a+b=m,ab=-4,化简(a-2)(b-2)的结果是( ) A.6 B.2m-8 C.2m D.-2m

一元多项式求和问题的研究与实现

一元多项式求和问题的研究与实现 学生姓名:指导老师: 摘要在数学上,一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+anxn,它由n+1个系数唯一确定,一元多项式求和实质上是合并同类项的过程。在实际应用中,多项式的指数可能很高且变化很大,在表示多项式的线性表中就会存在很多零元素。因此,采用单链表来存储一个一元多项式的每一个非零项的系数和指数,即每一个非零项对应单链表中的一个结点,且单链表按指数递增有序排列,就可实现两个一元多项式求和问题。程序通过调试运行,能基本达到设计要求,解决问题。 关键词数据结构;一元多项式;单链表;结点

1 引言 一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+a n x n,它由n+1个系数唯一确定。因此,可以用一个线性表(a0,a1,a2,……,an)来表示,每一项的指数i隐含在其系数ai的序号里。若有A(x)= a0+a1x+a2x2+……+a n x n和B(x)=b0+b1x+b2x2+……+b m x m,一元多项式求和也就是求A(x)=A(x)+B(x),这实质上是合并同类项的过程。 1.1 设计目的 设计合理数据结构表示一元多项式,并设计高效算法实现两个一元多项式相加。 1.2 设计要求 本课程设计要求用C++实现两个一元多项式的求和问题,用带头结点的单链表村存储多项式。基本功能要求如下: 1.输入并建立多项式,输入形式为整数序列n,x1,y1,x2,y2,……,x n,y n。其中n是多项式的项数,x i和y i分别是第i项的系数和指数。 2.输出多项式,按指数升序排列。 3.多项式A(x)和B(x)相加,建立多项式A(x)+B(x),输出相加的多项式,形式为类数学表达式。 2 需求分析 2.1 输入形式和输入值的范围 从键盘依次输入两个多项式的项数,系数和指数。系数为任意整数,项数和指数为大于等于0的整数。 2.2 输出形式 从屏幕输出,显示用户输入的多项式,并显示两多项式相加后的多项式和值。2.3 时间性能分析 所谓时间性能是指实现基于某种存储结构的基本操作(即算法)的时间复杂度。

一元多项式计算(数据结构课程设计)

一元多项式计算(数据结构课程设计)

一、系统设计 1、算法思想 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。 因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。P 的指数小于q的指数的话就应该复制q的节点到多项式中。P的指数大于q的指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。 (2)一元多项式的减法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q的节点到多项式中。P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。 2、概要设计 (1)主函数流程图: (注:a代表第一个一元二次方程,b代表第二个一元二次方程)

多项式与多项式相乘同步练习(含答案)

第3课时 多项式与多项式相乘 要点感知 多项式与多项式相乘,先用一个多项式的_____乘另一个多项式的_____,再把所得的积_____.(a +b )(p +q )=_____. 预习练习1-1 填空:(1)(a +4)(a +3)=a · a +a ·3+4·_____+4×3=_____; (2)(2x -5y )(3x -y )=2x ·3x +2x ·_____+(-5y )·3x +(-5y )·_____=_____. 1-2 计算:(x +5)(x -7)=_____;(2x -1)·(5x +2)=_____. 知识点1 直接运用法则计算 1.计算: (1)(m +1)(2m -1); (2)(2a -3b )(3a +2b ); (3)(2x -3y )(4x 2+6xy +9y 2); (4)(y +1)2; (5)a (a -3)+(2-a )(2+a ). 2.先化简,再求值:(2x -5)(3x +2)-6(x +1)(x -2),其中x =51. 知识点2 多项式乘以多项式的应用 3.若一个长方体的长、宽、高分别是3x -4,2x -1和x ,则它的体积是( ) -5x 2+4x -11x 2+4x -4x 2 -4x 2+x +4 4.为参加市里的“灵智星”摄影大赛,小阳同学将同学们参加“义务献爱心”活动的照片放大为长为a 厘米,宽为43a 厘米的长方形形状,又精心在四周加上了宽2厘米的装饰彩框,那么小阳同学的这幅摄影作品照片占的面积是_____平方厘米. 5.我校操场原来的长是2x 米,宽比长少10米,现在把操场的长与宽都增加了5米,则整个操场面积增加了_____平方米. 知识点3 (x +p )(x +q )=x 2+(p +q )x +pq 6.下列多项式相乘的结果为x 2+3x -18的是( ) A.(x -2)(x +9) B.(x +2)(x -9) C.(x +3)(x -6) D.(x -3)(x +6) 7.已知(x +1)(x -3)=x 2+ax +b ,则a ,b 的值分别是( ) =2,b =3 =-2,b =-3 =-2,b =3 =2,b =-3 8.计算: (1)(x +1)(x +4) (2)(m -2)(m +3) (3)(y +4)(y +5) (4)(t -3)(t +4).

多项式求和

数据结构课程设计 题目:多项式运算 学生姓名:熊奉标 学号:10115011046 专业:计算机科学与技术 班级:10级(1)班 指导教师姓名及职称:陈正铭讲师 起止时间:2012 年2 月——2012 年4 月 1 需求分析

1.1 课题背景及意义 本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建、录入、存储、打印、以及之间的运算。在本课程设计中,程序设计语言为C++语言,程序运行平台为Windows/98/2000/XP,程序采用了链表存储方法以及结构化和模块化的设计方法,通过调试运行,可以进行多项式的加、减、乘运算,勉强实现了设计目标,并且经过适当完善后,将可应用到实际中解决某些问题。 一元多项式的运算,虽然无法直接在除数学外的其他领域作出贡献,但是在数学上,它可以为人们解决一些自己动笔动手很难解决的问题,比如说那些很长很长的多项式,用笔算可能要算半天,但是用该程序,只需短短的几秒钟,所以它给人们带来了不少方便,同时相信它也能间接地为其他领域做出贡献。 1.2 课题要求 (1)掌握线性表的创建、插入、删除等基本运算。 (2)掌握线性表的顺序存储结构和链式存储结构 (3)掌握线性表的典型应用—多项式运算(加、减、乘)。 该程序的主要任务是将用户输入的多项式用线性表存储,然后通过对线性表的基本操作,而实现多项式之间的三则运算,把正确结果输出给用户。 1.3 软件格式规定 输入格式:有两类编辑框可供输入,系数编辑框、指数编辑框,在系数编辑框中允许输入浮点型数据,在指数编辑框中只允许输入整型数据。 正确的输入: f(x)=8X^6+4X^5-2X^4-12X^3-1X^1+10X^0 g(x)=2X^3-5X^2+1X^1 正确的输出结果: f(x)+g(x):结果= 8.00X^6 +4.00X^5 -2.00X^4 -121.00X^3 -5.00X^2 +10.00 f(x)-g(x):结果= 8.00X^6 +4.00X^5 -2.00X^4 -125.00X^3 +5.00X^2 -2.00X

一元多项式的计算数据结构课程设计

一元多项式的计算—加,减 摘要(题目)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 目录 1.引言 2.需求分析 3.概要设计 4.详细设计 5.测试结果 6.调试分析 7.设计体会 8.结束语 一:引言: 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数

降序排列。 二:需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果 三:概要设计 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 1.单连表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={| ai-1, ai∈D,i=2,…,n} 基本操作: InitList(&L) //操作结果:构造一个空的线性表 CreatPolyn(&L) //操作结果:构造一个以单连表存储的多项试 DispPolyn(L) //操作结果:显示多项试 Polyn(&pa,&pb) //操作结果:显示两个多项试相加,相减的结果 } ADT List 2.本程序包含模块: typedef struct LNode //定义单链表 { }LNode,*LinkList; void InitList(LinkList &L) //定义一个空表 { } void CreatPolyn(LinkList &L) //用单链表定义一个多项式 { } void DispPolyn(LinkList L) //显示输入的多项式

一元多项式习题及解答

习 题 一 A 组 1. 判别 {},a a b =+∈Q Q 是否为数域 解 是. 2. 设32()1f x x x x =+++,2 ()32g x x x =++,求()()f x g x +,()()f x g x -,()()f x g x . 解 32()()243f x g x x x x +=+++, 3()()21f x g x x x -=--, 5432()()46652f x g x x x x x x =+++++. 3.设19932199431995()(54)(421)(8112)f x x x x x x =----+,求()f x 的展开式中各项系数的和. 解 由于()f x 的各项系数的和等于(1)f ,所以 199319941995(1)(54)(421)(8112)1f =----+=-. 4. 求()g x 除以()f x 的商()q x 与余式()r x . (1) 322()31, ()321f x x x x g x x x =---=-+; (2) 42()25,()2f x x x g x x x =-+=-+. 解 (1) 用多项式除法得到 2323222732131 3923374133 7147399 26299x x x x x x x x x x x x x x -+----- +----+--- 所以,17262(),()3999 q x x r x x =-=--. (2) 用多项式除法得到

242432 3232222251 2225 245 2 57 x x x x x x x x x x x x x x x x x x x x -+-++--+--+-+--+-+--+ 所以,2()1,()57q x x x r x x =+-=-+. 5.设,a b 是两个不相等的常数,证明多项式()f x 除以()()x a x b --所得余式为 ()()()() f a f b af b bf a x a b a b --+--. 证明 依题意可设()()()()f x x a x b q x cx d =--++,则 (), ().f a ca d f b cb d =+??=+? 解得 ()()()()(), ()()).c f a f b a b d af b bf a a b =--???=--?? 故所得余式为 ()()()() f a f b af b bf a x a b a b --+--. 6. 问,,m p q 适合什么条件时,()f x 能被()g x 整除 (1) 3()f x x px q =++,2()1g x x mx =+-; (2) 42()f x x px q =++,2()1g x x mx =++. 解 (1) 由整除的定义知,要求余式()0r x =.所以先做多项式除法, 233222221(1)(1)() x mx x px q x m x mx x mx p x q mx m x m p m x q m +-++-+--+++--++++- 要求2()(1)()0r x p m x q m =+++-=, 所以2(1)0,0p m q m ++=-=.即21, p m q m =--=时, 可以整除. (2) 方法同上.先做多项式除法,所得余式为

一元多项式相加完整实验报告

一元多项式相加实验报告 一元多项式的相加

一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 float coef; // 系数 int expn; // 指数 term, ElemType; V oid AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b) Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构

一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对

数据结构——一元多项式的建立与相加

#include #include using namespace std; typedef struct PolyNode { int coef; //系数 int expn; //指数 struct PolyNode *next; } *PNode; //多项式结点的指针 void InitPoly(PNode &head,PNode &p) { head=(PNode)malloc(sizeof(struct PolyNode)); head->next=NULL; head->coef=0; head->expn=-1; p=head; } void CreatePoly(PNode &head,int a,int n) { PNode s; s=(PNode)malloc(sizeof(struct PolyNode)); //建立新的结点s->coef=a; s->expn=n; s->next=NULL; head->next=s; head=s; } void PrintPoly(PNode head) { int i=1;//控制第一对系数指数的显示 head=head->next;//指向表头结点的下一个 PNode p; p=head; while ((p->next)!=NULL) { if(i) //显示第一对的时候是不需要显示加号的 { if (p->expn==1) cout<coef<<"x"; else if (p->expn==0) cout<coef<

else cout<coef<<"x^"<expn; i=0; } else { if (p->expn==1) cout<coef<<"+x"; else if (p->expn==0) cout<<"+"<coef<coef<<"x^"<expn; } p=p->next; } cout<next; pb=pb->next; p=pc; while (pa!=NULL && pb!=NULL) { if (pa->expn>pb->expn) { s=(PNode)malloc(sizeof(struct PolyNode)); s->coef=pa->coef; s->expn=pa->expn; s->next=NULL; p->next=s; p=s; pa=pa->next; } else if (pa->expnexpn) { s=(PNode)malloc(sizeof(struct PolyNode)); s->coef=pb->coef; s->expn=pb->expn; s->next=NULL; p->next=s; p=s; pb=pb->next; }

高等代数习题及答案(1)

高等代数试卷 一、判断题(下列命题你认为正确的在题后括号内打“√”,错的打“×”;每小题1分,共10分) 1、)(x p 若是数域F 上的不可约多项式,那么)(x p 在F 中必定没有根。 ( ) 2、若线性方程组的系数行列式为零,由克莱姆法则知,这个线性方程组一定是无解的。 ( ) 3、实二次型),,,(21n x x x f 正定的充要条件是它的符号差为n 。 ( ) 4、 321321;3,2,1,,,x x x i R x x x x W i 是线性空间3R 的一个子空间。( ) 5、数域F 上的每一个线性空间都有基和维数。 ( ) 6、两个n 元实二次型能够用满秩线性变换互相转化的充要条件是它们有相同的正惯性指数和负惯性指数。 ( ) 7、零变换和单位变换都是数乘变换。 ( ) 8、线性变换 的属于特征根0 的特征向量只有有限个。 ( ) 9、欧氏空间V 上的线性变换 是对称变换的充要条件为 关于标准正交基的矩阵为实对称矩阵。 ( ) 10、若 n ,,,21 是欧氏空间V 的标准正交基,且 n i i i x 1 ,那么 n i i x 1 2 。 ( ) 二、单项选择题(从下列各题四个备选答案中选出一个正确答案,并将其号码写 在题干后面的括号内。答案选错或未作选择者,该题无分。每小题1分,共10分) 1、关于多项式的最大公因式的下列命题中,错误的是( ) ① n n n x g x f x g x f ,, ; ② n j i j i f f f f f j i n ,,2,1,,,1,1,,,21 ; ③ x g x g x f x g x f ,, ; ④若 1,1, x g x f x g x f x g x f 。 2、设D 是一个n 阶行列式,那么( ) ①行列式与它的转置行列式相等; ②D 中两行互换,则行列式不变符号; ③若0 D ,则D 中必有一行全是零; ④若0 D ,则D 中必有两行成比例。 3、设矩阵A 的秩为r r (>)1,那么( ) ①A 中每个s s (<)r 阶子式都为零; ②A 中每个r 阶子式都不为零;

一元多项式相家问题

一元多项式相加问题 # include typedef struct node{ float coef; int exp; int flg; struct node *next; }PolyNode,*PolyList; PolyNode *head_a,*head_b,*head_c; PolyList A,B,C; PolyNode *Creat_PolyNode() { PolyNode *s,*r; PolyList L; float x;int y; L=new PolyNode; L->next=NULL; r=L; cin>>x>>y; while(x||y) //输0的时候输入【0,另一个链表有的指数】{ s=new PolyNode; s->coef=x; s->exp=y; r->next=s; r=s; cin>>x>>y; } r->next=NULL; return L; } void Out_PolyNode(PolyNode *L,float a[100],int b[100]) { PolyNode *p;int i=0,j=0; p=L->next; if(p==NULL) cout<<"0"; while(p) { a[i]=p->coef; b[i]=p->exp; p=p->next; i++,j++; }

for(i=0;inext,q=B->next; while(p&&q) { if(p->exp==q->exp) { s=new PolyNode; s->coef=p->coef+q->coef; if(s->coef==0) { p=p->next; q->flg=1; } else { s->exp=p->exp; r->next=s; r=s; p->flg=1; q->flg=1; p=p->next; q=B->next; } } else if(p->exp!=q->exp&&q->next==NULL) { s=new PolyNode; s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p->flg=1; p=p->next; q=B->next; } else

数据结构多项式求和

数据结构与算法 上机实验报告(一) 上机实验题目:一元多项式的表示及相加 专业班级:信息与计算科学1401班 姓名:邢鑫锋学号:140701211 设计室:理学院机房 上机时间: 2015-11-10 上机学时: 4学时 指导教师:杜洪波成绩:

一.实验目的: 1、进一步熟练掌握应用链表处理实际问题的能力 2、 二.实验内容: 1、一元多项式相加是通过键盘输入两个形如 P0+P1X1+P2X2+。。。+PnXn 的多项式,经过程序运算后在屏幕上输出它们的相加和。 2、 3、 三、程序及注释: #include #include #include typedef struct Node { int Data; Node* next; }SLNode; void listInt(SLNode **T) {if((*T=(SLNode*)malloc(sizeof(SLNode)))==NULL) exit(1); (*T)->next=NULL; }

void Create(SLNode *T,int n) { SLNode *p; int i; p=T; for(i=0;inext=q; printf("请输入链表数据\n"); scanf("%d",&q->Data); p=q; } } void Addtion(SLNode*T,SLNode*B,SLNode*C,int n) { int i; SLNode *p; p=C;

相关文档
最新文档