文档库 最新最全的文档下载
当前位置:文档库 › 数据结构课程设计报告一元多项式相加

数据结构课程设计报告一元多项式相加

数据结构课程设计报告题目:一元多项式相加

学号:姓名:

指导老师:

时间: 2011年10月18日星期二

程序建立的过程及步骤:

1首先建立一个定义多项式的结构体duoxiangshi,其中包括一个指数(int型),一个系数(float型),还有一个指向下一项的指针,具体编译代码如下:

typedef struct duoxiangshi//定义一个多项式

{

float coef;//多项式系数

int exp;//多项式指数

struct duoxiangshi *next;

};

2在定义一个函数(1),用来指导用户输入程序运行时所需要的必须得数据,两个一元多项式的项数、系数、指数。具体的代码如下:

void creatDuoX(Polynomial &Px,int n)//定义一个多项式函数

{

initDuoX(Px);

duoxiangshi *p,*q;

p=Px;

for(int i=1;i<=n;i++)

{

q=new duoxiangshi;

cout<<"第"<

cin>>q->coef;//输入系数

cout<<"第"<

cin>>q->exp;//输入指数

q->next=NULL;

p->next=q;

p=q;

}

}

3定义一个计算合并后的多项式的项数的函数(2),此函数的主要作用是用来最后输出合并后的多项式的时候起到作用。具体代码如下:

int lengthDuoX(Polynomial &Px)//计算多项式项数的函数,返回值是这个合并后的多项式的项数

{

duoxiangshi *p;

int count;//定义一个变量,用来计算多项式的长度

p=Px->next;

count=0;

while(p!=NULL)

{p=p->next;

count++;//自加最后得出总项数并返回

}

return count;

}

4定义一个输出合并后的多项式的函数(3),主要作用为主函数调用后可以输出一元多项式,具体代码如下:

void outputDuoX(Polynomial &Px)//输出合并后的多项式

{ duoxiangshi *p;

p=Px->next;

int i;

for(i=0;i

{cout<coef<<"*X^ "<exp<<" +";

p=p->next;

}

cout<<"0"<

}

5, 最重要的核心部分,程序的逻辑中心,让两个多项式相加,其中要考虑的情况如下一:两个多项式A、B 都为0

二:其中一个多项式A 为0,B不为0

三:其中一个多项式B为0,A不为0

四:A与B 都不为0

而在程序中我将二与三这两种情况,通过IF语句将其嵌到四的情况中,这样可以节省代码的复杂度。(也可以用if eals if eals if eals 这种方法将4中情况并列列出)具体代码如下:

duoxiangshi * addDuoX(Polynomial &Pa,Polynomial &Pb)//关键部分,A与B相加

{ duoxiangshi *p,*q;

duoxiangshi *prep;

duoxiangshi *u;

p=Pa->next;

q=Pb->next;

prep=Pa;

while (p&&q)//A与B都不等于0

{if(p->expexp)//A的指数小于B的指数

{prep=p;

p=p->next;

}

else if(p->exp > q->exp)//A的指数大的话

{u=q->next;

q->next=p;

prep->next=q;

prep=q;

q=u;

}

else//A与B的指数相等的话

{p->coef=p->coef+q->coef;

if(p->coef==0)//A与B的指数相等的话,且其中A的系数为0

{duoxiangshi *temp1;

duoxiangshi *temp2;

temp1=p;

temp2=q;

prep->next=p->next;//删除该项,跳过去

p=p->next;

q=q->next;

delete temp1;

delete temp2;

}

else//A与B的指数相等的话,B的系数为0

{duoxiangshi *temp2;

temp2=q;

prep=p;

p=p->next;

q=q->next;

delete temp2;

}

}

}

if(q)

prep->next=q;

delete Pb;

return Pa;

}

最后一项主函数的设计,由于先前的定义的函数完成了大部分的逻辑运输,所以主函数相对来说很简单明了

一:先运用结构体定义三个多项式变量,其作用是让内存分配其相应存储结构(其中两个用来输入初始多项式,一个用来输出合并后的多项式)

二:调用creatDuoX函数创建两个多想书A与B其中该函数可以引导使用者输入创建一个多项式必须的项数、系数、指数。

三:最后通过调用outputDuoX函数,将最后的结果输出。程序完成。

运行程序过程中的具体图像:

1运行程序的初始画面

2 输入项数,系数,指数后的运行图像

3得出结果并输出合并多项式的图像

遇到的问题与解决方法:

1、刚开始我定义结构体duoxiangshi没有定义其内部指针,导致多项式的项数只

能是一,通过翻阅课本关于本节的内容最终才得以解决。

2、最开始的程序运行成功的时候,找其他同学使用的时候,由于缺少中文引导,

很多同学,都无法使用。我在几个关键的引导函数中加入了中文引导,最后得

到了我本人较为满意的程序。

程序的源代码:

#include

using namespace std;

typedef struct iangduoxshi//定义一个多项式

{

float coef;//多项式系数

int exp;//多项式指数

struct iangduoxshi *next;

}iangduoxshi;

typedef iangduoxshi *Polynomial;//重定义一个多项式名字

void initDuoX(Polynomial &Px)

相关文档
相关文档 最新文档