多项式想加减与乘与升降序
学 院 计算机科学与技术
专 业 信 息 安 全
学 号 201312070
学 生 姓 名 陶宝中
辅导教师姓名
2014年12月 22 日
1、
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
目的与内容
了解数据结构的与算法的设计方法,独立
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
和设计一元多项式加减与乘除的程序编码,通过程序编写掌握软件开发过程的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
分析,系统设计,程序编码,测试等基本方法和技能,提高综合运用所学理论知识和方法独立分析和解决问题的能力,通过这次实践将实验问题中的所涉及的对象在计算机中
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示出来并对他们进行处理,掌握线除 。
任务与分析
本课题主要的目的是分别采用顺序和动态存储结构实现一元多项式的加法、减法和乘法。并将操作结果分别按升序和降序输出
程序的主要功能
一元多项式创建
建立一元多项式的顺序表和链式表,按程序提示输入每个项数据结束创建。借助元素在存储器中的相对位置来表示数据元素之间的关系,顺序表中第i个位置表示一元多项式的第i项的系数为第i个位置存放的内容,指数为i-1。创建一个一元多项式顺序表,对一元多项式的运算中会出现的各种情况进行分析,实现一元多项式的相加、相减、相乘操作。用链表来表示只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个term项结构和指向下一个节点的指针域,term又包括系数和指数两个域分别存放该项的系数、。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减、相乘操作。
一元多项式的加法
对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到和多项式中去。
一元多项式的减法
对于两个一元多项式中所有指数相同的项,对应系数相减,若其差不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,将其按减法
规则
编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf
复抄到差多项式中去。
一元多项式的乘法
将乘法运算分解为一系列的加法运算利用两个一元多项式相加的算法实现。
一元多项式项的指数比较
比较相邻两项的指数的大小。按升序排列时,前面项的指数大于后面项的指数就交换其项的位置。按降序序排列时,后面项的指数大于前面项的指数就交换其项的位置。
一元多项式运算结果升降排序
一元多项式运算结果选择调用降序或升序排序函数。
一元多项式的输出
将选择的运算操作结果输出。
一元多项式的销毁
销毁已建立的两个多项式,释放空间。
3 程序运行平台
VC++6.0。 编译,链接,执行。 Windows XP。
4 总体设计
图4。1 系统总体框架图
5 程序类的说明
(1)Ploy结构声明
typedef struct //顺序表结构声明
{
int a[N];//记录多项式
int len;//记录多项式的长度
}Ploy;
(2)term结构声明
typedef struct //项的表示
{ float coef; //系数
int expn; //指数
}term;
(3)LNode结构声明
typedef struct LNode
{ term data; //term多项式值
struct LNode *next;
}LNode,*LinkList; //两个类型名
typedef LinkList polynomail; //用带头结点的有序链表表示多项式
6 模块分析
整个流程图如图所示:
图1
6.1 创建模块
6.1.1、链式存储结构的一元多项式的创建
程序源代码:
polynomail creatpolyn(polynomail P,int m)
{
//输入m项的系数和指数,建立表示一元多项式的有序链表P
polynomail r,q,p,s,Q;
int i;
P=(LNode*)malloc(sizeof(LNode));
r=P;
for(i=0;i
data.coef,&s->data.expn);
r->next=s;
r=s;
}
r->next=NULL;
if(P->next->next!=NULL)
{
for(q=P->next;q!=NULL/*&&q->next!=NULL*/;q=q->next)//合并同类项
for(p=q->next,r=q;p!=NULL;)
if(q->data.expn==p->data.expn)
{
q->data.coef=q->data.coef+p->data.coef;
r->next=p->next;
Q=p;
p=p->next;
free(Q);
}
else
{
r=r->next;
p=p->next;
}
}
return P;
}
6.1.2、顺序存储结构一元多项式的创建
程序源代码:
void GetPloy(Ploy *A)
{
int i,coef,ex,maxe=0;
char ch;
printf("请输入每个项的系数及对应的指数,指数为负数时标志输入结束!\n");
for(i=0;ia[i]=0;
scanf("%d%d",&coef,&ex);
while(ex>=0)
{
if(ex>maxe)
maxe=ex;
if(A->a[ex]!=0)
{
printf("你输入的项已经存在,是否更新原数据?(Y/N)");
cin>>ch;
if(ch=='Y'||ch=='y')
{
A->a[ex]=coef;
printf("更新成功,请继续输入!\n");
}
else
printf("请继续输入!\n");;
}
else
A->a[ex]=coef;
scanf("%d%d",&coef,&ex);
}
A->len=maxe;
return ;
}
6.2 一元多项式的加法
6.2.1 链式存储两多项式相加
程序源代码:
polynomail addpolyn(polynomail pa,polynomail pb)
{
//完成多项式相加运算,即:Pa=Pa+Pb
polynomail s,newp,q,p,r;
int j;
p=pa->next;
q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{
s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{
case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s;
r=s;
p=p->next;
break;
case 0: s->data.coef=p->data.coef+q->data.coef;
if(s->data.coef!=0.0)
{
s->data.expn=p->data.expn;
r->next=s;r=s;
}
p=p->next;
q=q->next;
break;
case 1: s->data.coef=q->data.coef;
s->data.expn=q->data.expn;
r->next=s;
r=s;
q=q->next;
break;
}//switch
}//while
6.2.2 顺序存储的多项式相加
程序源代码:
void ADD(Ploy A,Ploy B,Ploy *M)
/*多项式A与多项式B相加,得到多项式M*/
{
int la=A.len,lb=B.len,i;
M->len=la>lb?la:lb;
for(i=0;i<=la&&i<=lb;i++)
{
M->a[i]=A.a[i]+B.a[i];
}
while(i<=la)
{
M->a[i]=A.a[i];
i++;
}
while(i<=lb)
{
M->a[i]=B.a[i];
i++;
}
return;
}
6.3 一元多项式相减
6.3.1链式存储的多项式相减
程序源代码:
/*3、两多项式相减*/
polynomail subpolyn(polynomail pa,polynomail pb)
{
//完成多项式相减运算,即:Pa=Pa-Pb
polynomail s,newp,q,p,r,Q; int j;
p=pa->next;
q=pb->next;
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&&q)
{
s=(LNode*)malloc(sizeof(LNode));
switch(cmp(p->data,q->data))
{
case -1: s->data.coef=p->data.coef;
s->data.expn=p->data.expn;
r->next=s;
r=s;
p=p->next;