一元多项式的加法、减法、乘法的实现数据结构课程设计

合集下载

数据结构课程设计-一元多项式的加法、减法、乘法的实现

数据结构课程设计-一元多项式的加法、减法、乘法的实现

数据结构课程设计-一元多项式的加法、减法、乘法的实现一、设计题目一元多项式的加法、减法、乘法的实现。

二、主要内容设有一元多项式A m(x)和B n(x).A m(x)=A0+A1x1+A2x2+A3x3+… +A m x mB n(x)=B0+B1x1+B2x2+B3x3+… +B n x n请实现求M(x)= A m(x)+B n(x)、M(x)= A m(x)-B n(x)和M(x)=A m(x)×B n(x)。

要求:1) 首先判定多项式是否稀疏2) 采用动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列情况三、具体要求及应提交的材料1.每个同学以自己的学号和姓名建一个文件夹,如:“312009*********张三”。

里面应包括:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。

2.打印的课程设计说明书(注意:在封面后夹入打印的“任务书”以后再装订)。

四、主要技术路线提示为把多个小功能结合成一个完整的小软件,需使用“菜单设计”技术(可以是控制台方式下的命令行形式,若能做成图形方式则更好)。

五、进度安排共计两周时间,建议进度安排如下:选题,应该在上机实验之前完成需求分析、概要设计可分配4学时完成详细设计可分配4学时调试和分析可分配10学时。

2学时的机动,可用于答辩及按教师要求修改课程设计说明书。

注:只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充。

六、推荐参考资料(不少于3篇)[1]苏仕华等编著,数据结构课程设计,机械工业出版社,2007[2]严蔚敏等编著,数据结构(C语言版),清华大学出版社,2003[3]严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003指导教师签名日期年月日系主任审核日期年月日摘要分析了matlab,mathmatic,maple等数学软件对一元多项式的计算过程,步骤后。

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

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

一元多项式计算(数据结构课程设计)一、系统设计1、算法思想根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。

因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。

为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。

主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。

P 的指数小于q的指数的话就应该复制q的节点到多项式中。

P的指数大于q的指数的话,就应该复制p节点到多项式中。

当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。

当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。

(2)一元多项式的减法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。

p的指数小于q的指数的话,就应该复制q的节点到多项式中。

P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。

当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。

2、概要设计(1)主函数流程图:(注:a代表第一个一元二次方程,b代表第二个一元二次方程)(2)一元多项式计算算法用类C语言表示:Typedef struct00{ //项的表示,多项式的项作为LinkList的数据元素Float coef;//细数Int expn;//指数}term,ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名Typedef LinkList polynomial://用带表头的节点的有序链表表示多项式//基本操作的函数原型说明Void CreatePolyn(polynomail&P);//输入n的系数和指数,建立表示一元多项式的有序链表P 销毁一元多项式P Void DestroyPolyn(polynomailP);销毁一元多项式PvoidPrintPoly(polynomail P);//打印输入一元多项式PIntPolynLength(polynnomail P);//返回一元多项式P中的项数void CreatPolyn(polynomail&Pa.polunomail&Pb);//完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式Pb voidSubtractPolyn(polunomail&Papolunomail&Pb);//完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb//基本操作的算法描述Int cmp(tem a,temp b);//依a的指数值<(或=)(或>b的住数值,分别返回-1、0和+1Void CreatePolyn(polynomail&P,int m){//输入m项的系数和指数,建立表示一元多项式的有序链表PInitList(P);h=GetHead(P);E.coef=0.0; e.expn=-1;S erCurElem(h,e);//设置头结点的数据元素For (i=1;i<=m;++i){ //依次输入m个非零项Scanf(e.coef,e.epn);If(!LocateElem(P,e,q,(*cmp)())){//当前链表中不存在该指数项If(MakeNode(s,e))InsFirst(q,s);//生成节点并插入链表}}}//CreatPolun二、详细设计1、算法实现(1)输入一元多项式函数:void shuchu(pnode *head){pnode *p;int one_time=1;p=head;while(p!=NULL) /*如果不为空*/{if(one_time==1){if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/else if(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*//*如果系数是-1的话就直接输出-x号*/else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/{if(p->xishu>0)printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/}else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/printf("+X^%d",p->zhishu);else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/printf("X^%d",p->zhishu);else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next; /*指向下一个指针*/}printf("\n");}(2)加法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}(3)减法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}2、程序代码/*一元多项式计算*//*程序功能:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;*//*提示:输入完一元多项式之后,输入“0 0”结束本一元多项式的输入*//*注意:系数只精确到百分位,最大系数只能为999.99,指数为整数.如果需要输入更大的系数,可以对程序中5.2%f进行相应的修改*/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>/*建立结构体*/typedef struct pnode{float xishu; /*系数*/int zhishu; /*指数*/struct pnode *next; /*下一个指针*/}pnode;/*用头插法生成一个多项式,系数和指数输入0时退出输入*/pnode * creat()int m;float n;pnode *head,*rear,*s; /*head为头指针,rear和s为临时指针*/ head=(pnode *)malloc(sizeof(pnode));rear=head; /*指向头*/scanf("%f",&n); /*系数*/scanf("%d",&m); /*输入指数*/while(n!=0) /*输入0退出*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=n;s->zhishu=m;s->next=NULL;rear->next=s; /*头插法*/rear=s;scanf("%f",&n); /*输入系数*/scanf("%d",&m); /*输入指数*/}head=head->next; /*第一个头没有用到*/return head;}/*调整多项式*/void tiaozhen(pnode *head){pnode *p,*q,*t;float temp;p=head;while(p!=NULL){q=p;t=q->next;while(t!=NULL){if(t->zhishu>q->zhishu)q=t;t=t->next;}temp=p->xishu;p->xishu=q->xishu;q->xishu=temp;temp=p->zhishu;p->zhishu=q->zhishu;q->zhishu=temp;p=p->next;}/*显示一个多项式*/void shuchu(pnode *head){pnode *p;int one_time=1;p=head;while(p!=NULL) /*如果不为空*/{if(one_time==1){if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/else if(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*//*如果系数是-1的话就直接输出-x号*/else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/{if(p->xishu>0)printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/}else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/printf("+X^%d",p->zhishu);else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/printf("X^%d",p->zhishu);else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next; /*指向下一个指针*/}printf("\n");/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}/*两个多项式的减法运算*/pnode * sub(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r;float x; /*x为系数相减*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*两个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu-q->xishu; /*系数相减*/if(x!=0) /*相减的差不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}else{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}while(p!=NULL) /*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}while(q!=NULL) /*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/ s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}void add_main(){pnode * a,*b,*c;printf("\n输入第一个一元多项式:\n系数指数\n");a=creat();tiaozhen(a);printf("\n输入第二个一元多项式:\n系数指数\n");b=creat();tiaozhen(b);c=add(a,b);printf("第一个一元多项式如下:");shuchu(a);printf("第二个一元多项式如下:");shuchu(b);printf("两式相加如下:");shuchu(c);}void sub_main(){pnode * a,*b,*c;printf("\n输入第一个一元多项式:\n系数指数\n");a=creat();tiaozhen(a);printf("\n输入第二个一元多项式:\n系数指数\n");b=creat();tiaozhen(b);c=sub(a,b);printf("第一个一元多项式如下:");shuchu(a);printf("第二个一元多项式如下:");shuchu(b);printf("两式相减如下:");shuchu(c);}void open(){printf("\n****************************************************\n");printf(" 功能项: * 1 两个一元多项式相加;2 两个一元多项式相减;0 退出*\n");printf("****************************************************\n\n请选择操作: ");}void main(){int choose;open();while(choose!=0){scanf("%d",&choose);getchar();switch(choose){case 0:return;case 1:printf("\n 两个一元多项式相加\n");add_main();choose=-1;open();break;case 2:printf("\n 两个一元多项式相减\n");sub_main();choose=-1;open();break;default:printf("没有该选项!请重新选择操作!\n\n");open();}}}三、测试方案及结果1、测试方案在Visual C++ 6.0环境中调试运行。

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

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

一元多项式计算(数据结构课程设计)池州学院CHIZHOU《数据结构》课程设计报告学号:57 54 39 37 20 25 27姓名:周田张永鹏武警温凯侨李坤米昌华阮健健班级:10计算机科学与技术(2)班指导教师:成绩:数学与计算机科学系一、系统设计1、算法思想根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。

因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。

为了节省空间,我采用两个链表分别存放多项式a和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。

主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。

P 的指数小于q的指数的话就应该复制q的节点到多项式中。

P的指数大于q的指数的话,就应该复制p节点到多项式中。

当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。

当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。

(2)一元多项式的减法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。

p的指数小于q的指数的话,就应该复制q的节点到多项式中。

P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。

当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。

2、概要设计(1)主函数流程图:(注:a代表第一个一元二次方程,b代表第二个一元二次方程)(2)一元多项式计算算法用类C语言表示:Typedef struct00{ //项的表示,多项式的项作为LinkList的数据元素Float coef;//细数Int expn;//指数}term,ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名Typedef LinkList polynomial://用带表头的节点的有序链表表示多项式//基本操作的函数原型说明Void CreatePolyn(polynomail&P);//输入n的系数和指数,建立表示一元多项式的有序链表P 销毁一元多项式P Void DestroyPolyn(polynomailP);销毁一元多项式PvoidPrintPoly(polynomail P);//打印输入一元多项式PIntPolynLength(polynnomail P);//返回一元多项式P中的项数void CreatPolyn(polynomail&Pa.polunomail&Pb);//完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式Pb voidSubtractPolyn(polunomail&Papolunomail&Pb);//完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb//基本操作的算法描述Int cmp(tem a,temp b);//依a的指数值<(或=)(或>b的住数值,分别返回-1、0和+1Void CreatePolyn(polynomail&P,int m){//输入m项的系数和指数,建立表示一元多项式的有序链表PInitList(P);h=GetHead(P);E.coef=0.0; e.expn=-1;S erCurElem(h,e);//设置头结点的数据元素For (i=1;i<=m;++i){ //依次输入m个非零项Scanf(e.coef,e.epn);If(!LocateElem(P,e,q,(*cmp)())){//当前链表中不存在该指数项If(MakeNode(s,e))InsFirst(q,s);//生成节点并插入链表}}}//CreatPolun二、详细设计1、算法实现(1)输入一元多项式函数:void shuchu(pnode *head){pnode *p;int one_time=1;p=head;while(p!=NULL) /*如果不为空*/{if(one_time==1){if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/else if(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*//*如果系数是-1的话就直接输出-x号*/else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/{if(p->xishu>0)printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/}else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/printf("+X^%d",p->zhishu);else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/printf("X^%d",p->zhishu);else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next; /*指向下一个指针*/}printf("\n");}(2)加法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}(3)减法函数/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}2、程序代码/*一元多项式计算*//*程序功能:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;*//*提示:输入完一元多项式之后,输入“0 0”结束本一元多项式的输入*//*注意:系数只精确到百分位,最大系数只能为999.99,指数为整数.如果需要输入更大的系数,可以对程序中5.2%f进行相应的修改*/#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>/*建立结构体*/typedef struct pnode{float xishu; /*系数*/int zhishu; /*指数*/struct pnode *next; /*下一个指针*/}pnode;/*用头插法生成一个多项式,系数和指数输入0时退出输入*/ pnode * creat(){int m;float n;pnode *head,*rear,*s; /*head为头指针,rear和s为临时指针*/ head=(pnode *)malloc(sizeof(pnode));rear=head; /*指向头*/scanf("%f",&n); /*系数*/scanf("%d",&m); /*输入指数*/while(n!=0) /*输入0退出*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=n;s->zhishu=m;s->next=NULL;rear->next=s; /*头插法*/rear=s;scanf("%f",&n); /*输入系数*/scanf("%d",&m); /*输入指数*/}head=head->next; /*第一个头没有用到*/return head;}/*调整多项式*/void tiaozhen(pnode *head){pnode *p,*q,*t;float temp;p=head;while(p!=NULL){q=p;t=q->next;while(t!=NULL){if(t->zhishu>q->zhishu)q=t;t=t->next;}temp=p->xishu;p->xishu=q->xishu;q->xishu=temp;temp=p->zhishu;p->zhishu=q->zhishu;q->zhishu=temp;p=p->next;}}/*显示一个多项式*/void shuchu(pnode *head){pnode *p;int one_time=1;p=head;while(p!=NULL) /*如果不为空*/{if(one_time==1){if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/else if(p->xishu==1||p->xishu==-1)printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*//*如果系数是-1的话就直接输出-x号*/else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);one_time=0;}else{if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/{if(p->xishu>0)printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/}else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/printf("+X^%d",p->zhishu);else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/printf("X^%d",p->zhishu);else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%5.2fX^%d",p->xishu,p->zhishu);else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);}p=p->next; /*指向下一个指针*/}printf("\n");}/*两个多项式的加法运算*/pnode * add(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/float x; /*x为系数的求和*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu+q->xishu; /*系数就应该相加*/if(x!=0) /*相加的和不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next; /*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL){s=(pnode *)malloc(sizeof(pnode));s->xishu=q->xishu;s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}/*两个多项式的减法运算*/pnode * sub(pnode *heada,pnode *headb){pnode *headc,*p,*q,*s,*r;float x; /*x为系数相减*/p=heada; /*指向第一个多项式的头*/q=headb; /*指向第二个多项式的头*/headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/r=headc;while(p!=NULL&&q!=NULL) /*两个多项式的某一项都不为空时*/{if(p->zhishu==q->zhishu) /*指数相等的话*/{x=p->xishu-q->xishu; /*系数相减*/if(x!=0) /*相减的差不为0的话*/{s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/s->xishu=x;s->zhishu=p->zhishu;r->next=s;r=s;}q=q->next;p=p->next; /*2个多项式都向右移*/}else if(p->zhishu<q->zhishu) /*p的系数小于q的系数的话*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}else{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next; /*p向右移动*/}}while(p!=NULL) /*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=p->xishu;s->zhishu=p->zhishu;r->next=s;r=s;p=p->next;}while(q!=NULL) /*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/{s=(pnode *)malloc(sizeof(pnode));s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/s->zhishu=q->zhishu;r->next=s;r=s;q=q->next;}r->next=NULL; /*最后指向空*/headc=headc->next; /*第一个头没有用到*/return headc; /*返回头接点*/}void add_main(){pnode * a,*b,*c;printf("\n输入第一个一元多项式:\n系数指数\n");a=creat();tiaozhen(a);printf("\n输入第二个一元多项式:\n系数指数\n");b=creat();tiaozhen(b);c=add(a,b);printf("第一个一元多项式如下:");shuchu(a);printf("第二个一元多项式如下:");shuchu(b);printf("两式相加如下:");shuchu(c);}void sub_main(){pnode * a,*b,*c;printf("\n输入第一个一元多项式:\n系数指数\n");a=creat();tiaozhen(a);printf("\n输入第二个一元多项式:\n系数指数\n");b=creat();tiaozhen(b);c=sub(a,b);printf("第一个一元多项式如下:");shuchu(a);printf("第二个一元多项式如下:");shuchu(b);printf("两式相减如下:");shuchu(c);}void open(){printf("\n****************************************************\n");printf(" 功能项: * 1 两个一元多项式相加;2 两个一元多项式相减;0 退出*\n");printf("****************************************************\n\n请选择操作: ");}void main(){int choose;open();while(choose!=0){scanf("%d",&choose);getchar();switch(choose){case 0:return;case 1:printf("\n 两个一元多项式相加\n");add_main();choose=-1;open();break;case 2:printf("\n 两个一元多项式相减\n");sub_main();choose=-1;open();break;default:printf("没有该选项!请重新选择操作!\n\n");open();}}}三、测试方案及结果1、测试方案在Visual C++ 6.0环境中调试运行。

数据结构一元多项式加、减乘运算设计报告

数据结构一元多项式加、减乘运算设计报告

韶关学院计算机科学学院数据结构课程设计题目:多项式运算学生姓名:学号:专业:班级:指导教师姓名及职称:讲师起止时间:年月——年月1.课题分析1.1课题背景及意义《数据结构课程设计》是一门实践性的计算机课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。

通过这次课程设计,要求掌握较大程序的设计方法,相应数据结构的选择应用、算法的设计及其实现和性能分析等方面中加深对课程基本内容的理解。

同时,在设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

1.2程序功能本程序的功能是建立按照指数降序排列的两个一元多项式,并能够完成加、减和乘运算,最后将结果按照指数降序排列显示出来。

输入和输出值范围:系数精确到小数点6位,指数以整数表示。

输入形式:系数指数系数指数……0 0 //以0 0作为结束输出形式:fk(x)=系数x^指数+系数x^指数+……+0 x^01.3测试数据:1)加法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1.多项式相加2.多项式相减3.多项式相乘1fa(x)+f(b)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-121.000000x^3)+(-5.000 000x^2)+(10.000000x^0)2)减法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)fa(x)=(3.000000x^3)+(2.000000x^2)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1.多项式相加2.多项式相减3.多项式相乘2fa(x)-fb(x)=(8.000000x^6)+(4.00000x^5)+(-2.000000x^4)+(-125.000000x^3)+(-5.0000 00x^2)+(-2.000000x^1)+(10.000000x^0)3)乘法操作:请输入第一个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)8 64 5-2 4-123 3-1 110 00 0fa(x)=(8.000000x^6)+(4.000000x^5)+(-2.000000x^4)+(-123.000000x^3)+(-1.000000x ^1)+(10.000000x^0)fa(x)=(3.000000x^3)+(2.000000x^2)请输入第二个要操作的多项式:请按多项式指数由高到低输入系数和指数:(以0 0结束)2 3-5 21 10 0fb(x)=(2.000000x^3)+(-5.000000x^2)+(1.000000x^1)请选择你要进行的操作:1. 多项式相加2. 多项式相减3. 多项式相乘3fa(x)*fb(x)=(16.000000x^9)+(-32.000000x^8)+(-16.000000x^7)+(-232.000000x^6)+(6 13.000000x^5)+(-125.000000x^4)+(25.000000x^3)+(-51.000000x^2)+(10.000000x^1) 2.概要设计2.1本程序包含的模块typedefstructLinkNode //定义单向链表{}linknode;voidcreatelink(linknode *head){ };//构建一个以单链表存储的多项式void show(linknode *head){ };//显示多项式voidaddtion(linknode *fa,linknode *fb,linknode *fc){ };//加法操作void subtraction(linknode *fa,linknode *fb,linknode *fc){ } ;//减法操作void multiply(linknode *fa,linknode *fb,linknode *fc){ };//乘法操作voidsortion(linknode *fc){ };//将乘法所得的结果合并同类项void deletion(linknode *head,linknode *s);{ };//删除结点操作voidmian(){ };//主程序2.2问题解决的思路概述首先是确定结构化程序设计的流程图,利用已存在的数据结构来构造一个存储一元多项式的结构,接着把三则运算分成五个主要的模块:实现加法的模块、实现减法的模块、实现乘法的模块、实现合并同类项模块、删除结点模块,然后各个模块里面还要分成若干种情况来考虑并通过函数的嵌套调用来实现其功能。

数据结构链式表实现一元多项式加减乘运算课程方案实验报告

数据结构链式表实现一元多项式加减乘运算课程方案实验报告

数据结构课程设计设计题目:基于链式表实现一元多项式的加减乘运算目录问题分析11.1 问题描述设计一个n元多项式程序,并完成多项式的乘法运算。

从实际的角度出发,这里设计的程序是基于一元n次多项式的数学模型。

1.2 问题的数学模型在数学上,一个一元多项式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的序号里。

多项式的乘法规则:多次运用单项式与多项式相乘的法则得到的.计算时(a+b>(m+n>,先把(m+n>看成一个单项式,(a+b>是一个多项式,运用单项式与多项式相乘的法则,得到(a+b>(m+n>=a(m+n>+b(m+n>,然后再次运用单项式与多项式相乘的法则。

1.3 构造数据结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。

通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。

基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial{float coef。

//系数int expn。

//指数struct Polynomial *next。

//指向下一个结点}*Polyn,Polynomial。

//Polyn为结点指针类型2 系统分析2.1 可行性研究该程序主要从技术的角度来分析可行性。

技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。

该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发平台已成熟可行。

数据结构课程设计之一元多项式加减乘

数据结构课程设计之一元多项式加减乘

##大学数据结构课程设计报告题目:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 2011.06.20-06.30指导教师:2010—2011年度第 2 学期一、需求分析1、顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

可以分为几个模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序模块。

2、在程序过程中加入汉字提示符,让读者清楚明白的操作该程序。

运行程序时看起来简洁有序,操作简单明了3、程序执行时的命令:①选择创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤选择操作方式⑥选择降幂或升幂排序⑦输出结果⑧是否退出。

4、测试数据。

输入的一元多项式系数指数分别为7 0,3 1,9 8,5 17和8 1,22 7,-9 8。

加法结果为;升幂降幂减法结果为:升幂降幂乘法结果为:升幂降幂二、概要设计1、设计思路:在该程序中分别分为顺序存储和链式存储结构。

2、数据结构设计:一元多项式抽象数据类型的定义:ADT Polynomial{数据对象:D={ai|ai∈TermSet,i=1,2…,m,m>=0TermSet中的每一个元素包含一个表示系数的实数和表示指数的整数}数据关系:R1={<ai-1,ai>|ai-1,ai∈D, 且ai-1中的指数值<ai中的指数值,i=2,…,n} 基本操作:CreatPolyn(&P,m)操作结果:输入m项的系数和指数,建立一元多项式P.DesteoyPolyn(&P)初始条件:一元多项式P已存在。

操作结果:销毁一元多项式P。

PrintfPolyn(P)初始条件:一元多项式P已存在。

操作结果:打印输出一元多项式P。

PolynLength(P)初始条件:一元多项式P已存在。

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现Word

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现Word

山东理工大学计算机学院课程设计(数据结构)班级姓名学号指导教师二○一二年一月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求:1. 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○一二年一月十日目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (17)第六章总结与心得 (19)参考文献 (20)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现。

数据结构课程设计报告顺序结构动态链表结构下的一元多项式的加法减法乘法的实现。

山东理工大学计算机学院课程设计(数据结构)级班名姓号学指导教师二○一二年一月十日课程设计任务书及成绩评定顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的课题名称实现。

Ⅰ、题目的目的和要求:1. 巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;结果M(x)3)中无重复阶项和无零系数项;要求输出结果的升幂和降幂两种排列情况; 4)Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏数据结构(C语言版)清华大学出版社 1999[2] 严蔚敏数据结构题集(C语言版)清华大学出版社 1999[3] 谭浩强 C语言程序设计清华大学出版社[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定:设计成绩:(教师填写)(签字)指导老师:日十月一年二○一二目录第一章概述 (1)第二章系统分析 (2)第三章概要设计 (3)第四章详细设计 (4)第五章运行与测试 (17)第六章总结与心得 (19)20参考文献……………………………………………………………….第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

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

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

《数据结构》课程设计多项式计算班级:学号:姓名:指导老师:多项式计算1、问题描述能够按照指数降序排列建立多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出。

2、设计思路这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和指数相加、相加时相同指数的系数相加、相减时相同指数的系数相减。

由于多项式拥有指数和系数(假设基数已定),所以可以定义一个包含指数系数的结构体,用单链表存储多项式的数据,所以结构体包含next指针。

数据插入时比较两数的指数,按照降序排序,从表头的next开始,直至找到合适的位置,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。

输入完数据后选择计算方式(相乘、相加、相减),多项式运算时要循环遍历整个多项式,多项式的每一组数据都要和另一个多项式整组数据相运算(每一个运算值都存储到新建的“多项式”链表中),直到两个多项式都遍历完结束。

3、数据结构设计在模拟多项式对象时,为了简化处理,只取最核心的两个数据:多项式的系数和指数。

前面提到,要用单链表操作,所以要加上个next指针,再由该结构体定义一个结点类型和指针类型。

具体数据结构定义如下:typedef struct node{int xs; /*系数*/int zs; /*指数*/struct node * next; /*next指针*/}Dnode,* Dnodelist;4、功能函数设计(1)链表初始化函数Creat_node()带有头结点的头指针指向空(NULL)。

(2)多项式数据的创建函数Creat_Dmeth()当链表初始化成功后,开始创建多项式。

分别循环输入两个多项式的系数和指数,其中要用到插入函数。

(3)数据的插入函数Insert_node()当创建多项式时,要用到此函数,即利用插入的方式将多项式的数据连接起来。

再输入一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的next开始,一一比较指数大小,直到大于或等于当前指向的数据或遍历完所有数据时停止,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。

数据结构课程设计——一元多项式加法、减法、乘法运算的实现

数据结构课程设计——一元多项式加法、减法、乘法运算的实现

1.一元多项式加法、减法、乘法运算的实现 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 //定义线性表最大容量//定义多项式项数据类型typedef struct{float coef; //系数int expn; //指数}term,elemType;typedef struct{term terms[MAXSIZE]; //线性表中数组元素int last; //指向线性表中最后一个元素位置}SeqList;typedef SeqList polynomial;1.3基本操作函数说明polynomial*Init_Polynomial();//初始化空的多项式int PloynStatus(polynomial*p)//判断多项式的状态int Location_Element(polynomial*p,term x)在多项式p中查找与x项指数相同的项是否存在int Insert_ElementByOrder(polynomial*p,term x)//在多项式p中插入一个指数项xint CreatePolyn(polynomial*P,int m)//输入m项系数和指数,建立表示一元多项式的有序表pchar compare(term term1,term term2)//比较指数项term1和指数项term2polynomial*addPloyn(polynomial*p1,polynomial*p2)//将多项式p1和多项式p2相加,生成一个新的多项式polynomial*subStractPloyn(polynomial*p1,polynomial*p2) //多项式p1和多项式p2相减,生成一个新的多项式polynomial*mulitPloyn(polynomial*p1,polynomial*p2)//多项式p1和多项式p2相乘,生成一个新的多项式void printPloyn(polynomial*p)//输出在顺序存储结构的多项式p1.4程序源代码#include<stdlib.h>#include<stdio.h>#include<iostream.h>#define NULL 0#define MAXSIZE 20typedef struct{float coef;int expn;}term,elemType;typedef struct{term terms[MAXSIZE];int last;}SeqList;typedef SeqList polynomial;void printPloyn(polynomial*p);int PloynStatus(polynomial*p){if(p==NULL){return -1;}else if(p->last==-1){return 0;}else{return 1;}}polynomial*Init_Polynomial(){polynomial*P;P=new polynomial;if(P!=NULL){P->last=-1;return P;}else{return NULL;}}void Reset_Polynomial(polynomial*p){if(PloynStatus(p)==1){p->last=-1;}}int Location_Element(polynomial*p,term x){int i=0;if(PloynStatus(p)==-1)return 0;while(i<=p->last && p->terms[i].expn!=x.expn) {i++;}if(i>p->last){return 0;}else{return 1;}}int Insert_ElementByOrder(polynomial*p,term x) {int j;if(PloynStatus(p)==-1)return 0;if(p->last==MAXSIZE-1){cout<<"The polym is full!"<<endl;return 0;}j=p->last;while(p->terms[j].expn<x.expn && j>=0){p->terms[j+1]=p->terms[j];j--;}p->terms[j+1]=x;p->last++;return 1;}int CreatePolyn(polynomial*P,int m){float coef;int expn;term x;if(PloynStatus(P)==-1)return 0;if(m>MAXSIZE){printf("顺序表溢出\n");return 0;}else{printf("请依次输入%d对系数和指数...\n",m);for(int i=0;i<m;i++){scanf("%f%d",&coef,&expn);x.coef=coef;x.expn=expn;if(!Location_Element(P,x)){Insert_ElementByOrder(P,x);}}}return 1;}char compare(term term1,term term2){if(term1.expn>term2.expn){return'>';}else if(term1.expn<term2.expn){return'<';}else{return'=';}}polynomial*addPloyn(polynomial*p1,polynomial*p2){int i,j,k;i=0;j=0;k=0;if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1)){return NULL;}polynomial*p3=Init_Polynomial();while(i<=p1->last && j<=p2->last){switch(compare(p1->terms[i],p2->terms[j])){case'>':p3->terms[k++]=p1->terms[i++];p3->last++;break;case'<':p3->terms[k++]=p2->terms[j++];p3->last++;break;case'=':if(p1->terms[i].coef+p2->terms[j].coef!=0){p3->terms[k].coef=p1->terms[i].coef+p2->terms[j].coef;p3->terms[k].expn=p1->terms[i].expn;k++;p3->last++;}i++;j++;}}while(i<=p1->last){p3->terms[k++]=p1->terms[i++];p3->last++;}return p3;}polynomial*subStractPloyn(polynomial*p1,polynomial*p2){int i;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){return NULL;}polynomial*p3=Init_Polynomial();p3->last=p2->last;for(i=0;i<=p2->last;i++){p3->terms[i].coef=-p2->terms[i].coef;p3->terms[i].expn=p2->terms[i].expn;}p3=addPloyn(p1,p3);return p3;}polynomial*mulitPloyn(polynomial*p1,polynomial*p2){int i;int j;int k;i=0;if((PloynStatus(p1)!=1)||(PloynStatus(p2)!=1)){return NULL;}polynomial*p3=Init_Polynomial();polynomial**p=new polynomial*[p2->last+1];for(i=0;i<=p2->last;i++){for(k=0;k<=p2->last;k++){p[k]=Init_Polynomial();p[k]->last=p1->last;for(j=0;j<=p1->last;j++){p[k]->terms[j].coef=p1->terms[j].coef*p2->terms[k].coef;p[k]->terms[j].expn=p1->terms[j].expn+p2->terms[k].expn;}p3=addPloyn(p3,p[k]);}}return p3;}void printPloyn(polynomial*p){int i;for(i=0;i<=p->last;i++){if(p->terms[i].coef>0 && i>0)cout<<"+"<<p->terms[i].coef;elsecout<<p->terms[i].coef;cout<<"x^"<<p->terms[i].expn;}cout<<endl;}void menu(){cout<<"\t\t*******数据结构综合性实验*********"<<endl;cout<<"\t\t***一、多项式的加、减、乘法运算***"<<endl;cout<<"\t\t******* 1.多项式创建 *********"<<endl;cout<<"\t\t******* 2.多项式相加 *********"<<endl;cout<<"\t\t******* 3.多项式相减 *********"<<endl;cout<<"\t\t******* 4.多项式相乘 *********"<<endl;cout<<"\t\t******* 5.清空多项式 *********"<<endl;cout<<"\t\t******* 0.退出系统 *********"<<endl;cout<<"\t\t****** 请选择(0-5) ********"<<endl;cout<<"\t\t***********************************"<<endl; }void main(){int sel;polynomial*p1=NULL;polynomial*p2=NULL;polynomial*p3=NULL;while(1){menu();cout<<"\t\t*请选择(0-5):";cin>>sel;switch(sel){case 1:p1=Init_Polynomial();p2=Init_Polynomial();int m;printf("请输入第一个多项式的项数:\n");scanf("%d",&m);CreatePolyn(p1,m);printf("第一个多项式的表达式为p1=");printPloyn(p1);printf("请输入第二个多项式的项数:\n");scanf("%d",&m);CreatePolyn(p2,m);printf("第二个多项式的表达式为p2=");printPloyn(p2);break;case 2:printf("p1+p2=");if((p3=subStractPloyn(p1,p2))!=NULL)printPloyn(p3);break;case 3:printf("\np1-p2=");if((p3=subStractPloyn(p1,p2))!=NULL)printPloyn(p3);break;case 4:printf("\np1*p2=");if((p3=mulitPloyn(p1,p2))!=NULL)printPloyn(p3);case 5:Reset_Polynomial(p1);Reset_Polynomial(p2);Reset_Polynomial(p3);break;case 0:return;}}return;}1.5程序执行结果2.迷宫问题实现2.1设计内容及要求1)设计内容以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

课程设计(数据结构)班级姓名学号指导教师二○一○年七月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求(给出你所选择的题目的要求描述)1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏.数据结构(C语言版).清华大学出版社,2007[2] 严蔚敏.数据结构题集(C语言版).清华大学出版社,2007[3] 谭浩强.C语言程序设计.清华大学出版社,2005[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定设计成绩:(教师填写)指导老师:(签字)二○一○年七月十日目录第一章概述 (1)第二章系统分析 (1)第三章概要设计 (2)第四章详细设计 (3)第五章运行与测试 (13)第六章总结与心得 (16)参考文献 (17)本目录是根据正文文档自动生成的,请在报告完成后,更新目录的页码,更新方法如下:1.鼠标单击目录任意部分选中目录;2.单击鼠标右键选择“更新域”;3.在出现的“更新目录”的对话框中选择“只更新页码”,见图1-3,单击“确定”按钮,目录页码将被更新。

更新完成后,最好再核对一下。

图1-3 更新目录页码示意图第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

数据结构课程设计,一元多项式的加法、减法、乘法的实现

数据结构课程设计,一元多项式的加法、减法、乘法的实现

HUNAN CITY UNIVERSITY 数据结构课程设计报告设计题目:一元多项式的加法、减法、乘法的实现专业:计算机科学与技术(嵌入式)学生姓名:班级学号:分组成员:指导教师:陈强老师2012 年 6月 8日1006402《数据结构》课程设计报告一、设计时间2011年6月4日——6月8日二、设计地点湖南城市学院实验楼计算机房407三、设计目的《数据结构》主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论,是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

该课程的特点是实践性较强,为了学好这门课程,需要在掌握理论知识的同时,加强上机实践。

本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

具体要求如下:1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开发过程的问题分析、系统设计、程序编码测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

四、设计小组成员五、指导教师:六、设计课题:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+…+A m x mBn(x)=B0+B1x1+B2x2+B3x3+…+B n x n请实现求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。

一元多项式的加法减法乘法的实现

一元多项式的加法减法乘法的实现

福建农林大学计算机与信息学院课程设计报告课程名称:数据结构课程设计题目:一元多项式的加法减法乘法的实现姓名:系:软件工程系专业:软件工程专业年级:2014学号:指导教师:***职称:副教授完成起止日期:2016.6.5 - 2016.7.12016年07月1日福建农林大学计算机与信息学院课程设计结果评定目录一、问题分析和任务定义 (1)二、程序设计内容 (1)三、程序调试与测试 (7)四、实验心得 (9)五、程序编码 (9)一、问题分析及任务定义顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

【问题描述和基本要求】设有一元多项式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+… +AmxmBn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn请实现求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。

要求:1) 首先判定多项式是否稀疏2) 分别采用顺序和动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;4) 要求输出结果的升幂和降幂两种排列情况二、课程设计的内容2.1函数多项式创建函数PolyNode *Creatpoly()多项式输出函数void Prin_poly(PolyNode *h)多项式升序排列函数void Insortup(PolyNode *h)多项式降序排列函数void Insortdown(PolyNode *h)多项式合并函数void UnitePoly(PolyNode *h)多项式相乘函数PolyNode *polymuti(PolyNode *h1,PolyNode *h2)多项式相加函数PolyNode *addition(PolyNode *ha, PolyNode *hb)多项式相减函数PolyNode *subduction (PolyNode *ha, PolyNode *hb)2.2设计各个模块的流程图(1)main()(3)void Insortdown(PolyNode *h)(4) PolyNode *polymuti(PolyNode *h1,PolyNode *h2)(5)void UnitePoly(PolyNode *h)(6) PolyNode *addition(PolyNode *ha, PolyNode *hb)开始三、程序调试与测试相加结果相减结果相乘结果四、实验心得在本次课程设计中,我明白了理论应与实际相结合,上机练习是提高编程能力最有效的办法,这次实验提高了我编写大型程序的能力以及查阅资料并从中获得有效资料的能力。

题目一元多项式的加法减法乘法的实现

题目一元多项式的加法减法乘法的实现

理学院课程设计说明书课程名称: 数据结构与算法A设计实践课程代码: 6015059 题目一:一元多项式加法、减法、乘法年级/专业/班: 2013/信科/2班学生姓名: 冯金慧学号: 3120130902209 开始时间:2015 年12月28日完成时间:2016 年01 月10 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书撰写质量(45)总分(100)指导教师签名:年月日数据结构与算法A 设计实践任务书 学院名称: 理学院 课程代码:_6015059________专业: 信科 年级: 2012一、 设计题目一元多项式的加法、减法、乘法的实现(限最多1人完成)二、 主要内容完成一无多项式的基本运算功能。

三、具体要求及提交的材料设有一元多项式A m (x)和B n (x).A m (x)=A 0+A 1x 1+A 2x 2+A 3x 3+… +A m x mB n (x)=B 0+B 1x 1+B 2x 2+B 3x 3+… +B n x n 请实现求M(x)= A m (x)+B n (x)、M(x)= A m (x)-B n (x)和M(x)= A m (x)×B n (x)。

要求: 1) 首先判定多项式是否稀疏2) 分别采用顺序和动态存储结构实现;3) 结果M(x)中无重复阶项和无零系数项;要求输出结果的升幂和降幂两种排列情况测试数据及测试结果请在上交的资料中写明;必须上机调试通过按《数据结构课程设计大纲》中的要求完成课程设计报告格式。

设计结束后,每个学生必须上交的材料有:1 《课程设计报告》打印稿一份 2.课程设计的源代码电子文档一份四、主要技术路线提示稀疏的多项式最好采用链式存储结构;两式相减与相加的算法是一致的,只是减式的数据项反号;两式相乘是两式相加的变形。

五、进度安排共计两周时间,建议进度安排如下:1. 选题,应该在上机实验之前完成 2. 需求分析、概要设计可分配4学时完成2. 详细设计可分配4学时 4. 调试和分析可分配10学时。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

课程设计(数据结构)班级姓名学号指导教师二○一○年七月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求(给出你所选择的题目的要求描述)1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏.数据结构(C语言版).清华大学出版社,2007[2] 严蔚敏.数据结构题集(C语言版).清华大学出版社,2007[3] 谭浩强.C语言程序设计.清华大学出版社,2005[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定设计成绩:(教师填写)指导老师:(签字)二○一○年七月十日目录第一章概述 (1)第二章系统分析 (1)第三章概要设计 (2)第四章详细设计 (3)第五章运行与测试 (13)第六章总结与心得 (16)参考文献 (17)本目录是根据正文文档自动生成的,请在报告完成后,更新目录的页码,更新方法如下:1.鼠标单击目录任意部分选中目录;2.单击鼠标右键选择“更新域”;3.在出现的“更新目录”的对话框中选择“只更新页码”,见图1-3,单击“确定”按钮,目录页码将被更新。

更新完成后,最好再核对一下。

图1-3 更新目录页码示意图第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

课程设计(数据结构)班级姓名学号指导教师二○一○年七月十日课程设计任务书及成绩评定课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。

Ⅰ、题目的目的和要求1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2、设计题目要求(给出你所选择的题目的要求描述)1)首先判定多项式是否稀疏2)分别采用顺序和动态存储结构实现;3)结果M(x)中无重复阶项和无零系数项;4)要求输出结果的升幂和降幂两种排列情况;Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 严蔚敏.数据结构(C语言版).清华大学出版社,2007[2] 严蔚敏.数据结构题集(C语言版).清华大学出版社,2007[3] 谭浩强.C语言程序设计.清华大学出版社,2005[4] 与所用编程环境相配套的C语言或C++相关的资料Ⅳ、成绩评定设计成绩:(教师填写)指导老师:(签字)二○一○年七月十日目录第一章概述............................... 错误!未定义书签。

第二章系统分析........................... 错误!未定义书签。

第三章概要设计........................... 错误!未定义书签。

第四章详细设计........................... 错误!未定义书签。

第五章运行与测试......................... 错误!未定义书签。

第六章总结与心得......................... 错误!未定义书签。

参考文献.................................. 错误!未定义书签。

一元多项式的计算,数据结构程序设计图形界面

一元多项式的计算,数据结构程序设计图形界面

一元多项式的计算,数据结构程序设计图形界面
对于一元多项式的计算,可以使用链表来存储每一项的系数和指数,然后进行加减乘除等运算。

具体实现的步骤如下:
1. 定义一个多项式节点的结构体,包含两个成员:系数和指数。

2. 定义一个链表结构体,包含两个成员:头节点和尾节点。

3. 实现链表的初始化函数、插入节点函数、删除节点函数、遍历链表函数等基本操作。

4. 实现多项式加法、减法、乘法、除法等运算函数。

对于加减法,可以遍历两个链表,依次将相同指数的项相加或相减;对于乘法,可以使用两个for循环遍历两个链表,将每一项相乘并按照指数相加;对于除法,可以使用辗转相除法,将被除数一部分一部分地减去除数,直到余数小于除数为止,每一部分的商可视为一项。

对于数据结构程序设计图形界面,可以使用Qt等UI框架来实现。

可以使用布局管理器来设计UI界面,使用信号与槽机制来处理用户的操作输入,将用户输入的参数传递给多项式计算函数,最终将计算结果显示在UI界面上。

数据结构课程设计《一元多项式的四则运算》

数据结构课程设计《一元多项式的四则运算》

数据结构课程设计《一元多项式的四则运算》一元多项式的四则运算学生姓名:XX 指导老师:XX摘要本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建、录入、存储、打印、以及之间的运算。

在本课程设计中,程序设计语言为C++语言,程序运行平台为Windows/98/2000/XP,程序采用了链表存储方法以及结构化和模块化的设计方法,通过调试运行,可以进行多项式的加、减、乘运算,勉强实现了设计目标,并且经过适当完善后,将可应用到实际中解决某些问题。

关键词程序设计;C++ ;一元多项式;运算1 引言一般来说,我们只知道数学上的一元多项式的运算,这一般都是用笔来进行运算的,然而此课程设计将一元多项式的运算用电脑来进行,只需要将多项式输入,然后就可以出结果,速度快,省去了认为计算的环节,在现实中带来不少方便。

1.1 课题背景一元多项式的运算,虽然无法直接在除数学外的其他领域作出贡献,但是在数学上,它可以为人们解决一些自己动笔动手很难解决的问题,比如说那些很长很长的多项式,用笔算可能要算半天,但是用该程序,只需短短的几秒钟,所以它给人们带来了不少方便,同时相信它也能间接地为其他领域做出贡献。

1.2 课程设计目的个人觉得,该数据结构课程设计一方面可以让自己更加熟悉那些些常用的数据结构,掌握数据结构内在的逻辑关系,以及它们在计算机中的存储表示,和对它们实行的各种运算;另一方面,可以让自己对于整体和局部,以及结构化和模块化编程有一个更深层次的了解。

作为网络工程的学生,虽然之前有过一次C语言课程设计,但是深知自己编程能力尚为欠缺,所以这一次数据结构课程设计是对我的编程能力和组织能力的又一次考验。

1.3课程设计内容本课程设计是用链表实现一元多项式的存储及运算,其中包括多项式系数及指数的录入(即一元多项式的录入),以及储存、一元多项式的显示、一元多项式之间的加、减、乘法运算。

2 设计思路与方案2.1设计思路该系统使用C++语言进行开发和实现,程序中的各个功能分别由不同的的函数实现,然后在main 函数中调用实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计(论文)题目名称一元多项式的加法、减法、乘法的实现课程名称数据结构课程设计学生姓名学号系、专业信息工程系、通信工程指导教师设有一元多项式Am(x)和Bn(x):Am(x)=A0+A1x+A2x2+A3x3+… +Amx mBn(x)=B0+B1x1+B2x2+B3x3+… +Bnx n分别采用顺序和链式存储结构实现:M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。

并要结果M(x)中无重复阶项和无零系数项,且输出结果用升幂和降幂两种排列情况。

关键词:一元多项式;顺序存储;链式存储;升幂;降幂目录1 问题描述 (1)2 需求分析 (1)3 概要设计 (1)3.1抽象数据类型定义 (1)3.2模块划分 (2)4 详细设计 (3)4.1数据类型的定义 (3)4.2主要模块的算法描述 (3)5 测试分析 (7)6 课程设计总结 (10)参考文献 (10)附录(源程序清单) (11)1 问题描述设有一元多项式Am(x)和Bn(x):Am(x)=A0+A1x+A2x2+A3x3+… +Amx mBn(x)=B0+B1x1+B2x2+B3x3+… +Bnx n实现M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)、M(x)=Am(x)×Bn(x)。

要求:(1)分别采用顺序和链式存储结构实现;(2)结果M(x)中无重复阶项和无零系数项;(3)要求输出结果用升幂和降幂两种排列情况。

2 需求分析(1)用一维数组cp1[n1]和cp2[n2]存储一元多项式Am(x)和Bn(x)的系数,用for循环来计算顺序结构中的加法、减法、乘法的结果。

(2)用指针*d,*q来存储一元多项式的内容,再利用指针计算动态链表下一元多项式的加法、减法、乘法的结果。

(3)在用降幂升幂两种排列输出结果时,用expn和coef表示一元多项式的系数和指数,输出两种排列结果。

3 概要设计3.1抽象数据类型定义(1)顺序存储结构的抽象数据类型定义int n1,n2;利用一维数组cp1[n1]和cp2[n2]存储多项式的系数基本操作:void creatpoly1(double *a,int pt)操作结果:建立顺序结构void addpoly(double *a,double *b,double *c)初始条件:一维数组cp1[n1]和cp2[n2]已建立操作结果:顺序结构相加void subpoly(double *a,double *b,double *c)初始条件:一维数组cp1[n1]和cp2[n2]已建立操作结果:顺序结构相减void mulpoly(double *a,double *b,double *c)初始条件:一维数组cp1[n1]和cp2[n2]已建立操作结果:顺序结构相乘void ansprint(double *a,int n)初始条件: 一维数组cp1[n1]和cp2[n2]已建立操作结果:选用升幂或降幂排列打印出结果(2)动态链表结构的抽象数据类型定义typedef struct p_pol{ double coef; int expn; p_pol *next;}MPP;基本操作:MPP * creatlink(MPP *p,int n,int pt)初始条件:动态链表已定义操作结果:构造动态链表结构void addlink(MPP *p1,MPP *p2,MPP *p3)初始条件:动态链表已定义操作结果:动态链表相加void sublink(MPP *p1,MPP *p2,MPP *p3)初始条件:动态链表已定义操作结果:动态链表相减void mullink(MPP *p1,MPP *p2,MPP *p3)初始条件:动态链表已定义操作结果:动态链表相乘void printlink(MPP * p)初始条件:动态链表已定义操作结果:选用升幂或降幂排列打印结果void deletelink(MPP *p)初始条件:动态链表已定义操作结果:删除结点释放内存3.2模块划分本程序包括三个模块:(1)主程序模块void main(){输入第一个多项式的项数;分别输入各项的系数和指数;输入第二个多项式的项数;分别输入各项的系数和指数;请选择实现结构:1 顺序结构 2 动态链表结构选择操作方式:1 相加 2 相减 3 相乘}(2)顺序存储结构模块——实现顺序存储结构的抽象数据类型(3)动态链表结构模块——实现动态链表结构的抽象数据类型4 详细设计4.1数据类型的定义(1)顺序存储结构类型int n1,n2;int cp1[n1]; intcp2[n2](2)动态链表结构类型#define INFEX 10000#define INFCO 10000double coef;int expn;p_pol *next;4.2主要模块的算法描述该题可画三个流程图:(1)一元多项式的计算主流程图;(2)顺序存储结构流程图;(3)动态链表结构流程图。

流程图如下:(1)一元多项式的计算主流程图:如图4.1所示图4.1一元多项式的计算主流程图如图4.2所示图4.2顺序存储结构流程图如图4.3所示图4.3动态链表结构流程图5 测试分析测试数据及结果如下:6 课程设计总结通过这次课程设计使我了解到编写的程序不但要拿来使用,还要让人看得懂。

所以,代码编写的风格要尽量规范,清晰。

变量要尽量少定义,结构体采用简单的。

另外,对指针的使用要小心,尽量在定义的时候就进行初始化,避免出现没有被定义的指针。

该程序主要实现了顺序结构、动态链表结构下的一元多项式的加法、减法、乘法等运算功能。

同时,也应用了升幂和降幂的输出方法,输出程序的结果。

虽然此次的程序不是很完备,但是总体还是一个比较能体现数据结构知识点的程序了,当然只是相对于我这个初学者来说。

这次设计中我发现了自己的许多不足,如对指针的机制掌握的还不是很透彻,有的时候会出现指针指向错误以及空指针的错误,还有不能很好地分析自己算法地复杂度以及不能很好地使用控制机制使自己的程序流畅地运行。

因此,在今后我会更加努力地。

在此我要非常感谢的是我的指导老师黄同成老师,感谢老师的细心认真的辅导,让我对数据结构这门课程有了更多的了解,也让我对这门课程产生了浓厚的兴趣。

在这次课程设计中我又进一步地了解了数据结构中算法的核心思想的重要性,懂得了一个程序地好坏关键在于算法是否优秀,一个好的优秀的算法可以使我们的程序更加完善,安全性更高以及有更高的效率。

参考文献[1] 黄同成,黄俊民,董建寅.数据结构[M].北京:中国电力出版社,2008[2] 董建寅,黄俊民,黄同成.数据结构实验指导与题解[M].北京:中国电力出版社,2008[3] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,2002[4] 刘振鹏,张晓莉,郝杰.数据结构[M].北京:中国铁道出版社,2003附录(源程序清单)#include<stdio.h>#include<math.h>#include<stdlib.h>#define INFEX 10000#define INFCO 10000typedef struct pol{double coef;int expn;}MPOL;MPOL *cp1,*cp2;//-----顺序结构部分-----int n1,n2;void ansprint(double *a,int n) //打印出结果{int choose;puts("请选择输出顺序:1升幂2降幂:");scanf("%d",&choose);int i,num;if(choose!=2) //升幂打印{if(choose!=1)printf("没有%d选项,系统将默认输出升序:\nM(X)=",choose);elseprintf("M(X)=");num=0;for(i=0;i<=n;i++)if(fabs(a[i])>1e-8){if(num++)putchar('+');printf("%lfX^%d",a[i],i);}}else //降幂打印{printf("M(X)=");num=0;for(i=n;i>=0;i--)if(fabs(a[i])>1e-8){if(num++)putchar('+');printf("%lfX^%d",a[i],i);}}putchar(10);}void addpoly(double *a,double *b,double *c) //顺序结构相加{intmin=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);intmax=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);int i;for(i=0;i<=min;i++)c[i]=a[i]+b[i];for(;i<=max;i++)if(cp1[n1-1].expn>cp2[n2-1].expn)c[i]=a[i];elsec[i]=b[i];puts("相加结果为:");ansprint(c,max);}void subpoly(double *a,double *b,double *c) //顺序结构相减{intmin=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);intmax=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);int i;for(i=0;i<=min;i++)c[i]=a[i]-b[i];for(;i<=max;i++)if(cp1[n1-1].expn>cp2[n2-1].expn)c[i]=a[i];elsec[i]=-b[i];puts("相减结果为:");ansprint(c,max);}void mulpoly(double *a,double *b,double *c) //顺序结构相乘{int max=cp1[n1-1].expn+cp2[n2-1].expn+2;int i,j;for(i=0;i<max;i++)c[i]=0;for(i=0;i<=cp1[n1-1].expn;i++)for(j=0;j<=cp2[n2-1].expn;j++)c[i+j]+=a[i]*b[j];puts("相乘结果为:");ansprint(c,max-1);}void creatpoly1(double *a,int pt) //建立顺序结构{int i;if(pt==1){for(i=0;i<=cp1[n1-1].expn;i++)a[i]=0;for(i=0;i<n1;i++)a[cp1[i].expn]=cp1[i].coef;}else{for(i=0;i<=cp2[n2-1].expn;i++)a[i]=0;for(i=0;i<n2;i++)a[cp2[i].expn]=cp2[i].coef;}}//-----动态链式结构部分-----typedef struct p_pol //结点定义{double coef;int expn;p_pol *next;}MPP;MPP * creatlink(MPP *p,int n,int pt) //构造动态链表结构{MPP *d,*q;int i;q=(MPP *)malloc(sizeof(MPP));if(q==NULL)exit(0);q->next=NULL;q->coef=INFCO;q->expn=-INFEX;p=q;for(i=0;i<n;i++){d=(MPP *)malloc(sizeof(MPP));if(d==NULL)exit(0);d->next=NULL;if(pt==1){d->coef=cp1[i].coef;d->expn=cp1[i].expn;}else{d->coef=cp2[i].coef;d->expn=cp2[i].expn;}q->next=d;q=d;}return p;}void printlink1(MPP * p) //打印结果Am(x){int num=0,i=0,choose,count;puts("请选择输出顺序:1升幂2降幂:"); scanf("%d",&choose);MPP *tp=p;p=p->next;while(p!=NULL){num++;p=p->next;}MPOL *d=new MPOL[num];p=tp->next;while(p!=NULL){d[i].coef=p->coef;d[i].expn=p->expn;i++;p=p->next;}if(choose==2) //降幂打印{count=0;printf("Am(X)=");for(i=num-1;i>=0;i--){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}else //升幂打印{if(choose!=1)printf("没有%d选项,系统将默认输出升序:\nAm(X)=",choose);elseprintf("Am(X)=");for(i=0;i<num;i++){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}putchar(10);}void printlink2(MPP * p) //打印结果Bn(x){int num=0,i=0,choose,count;puts("请选择输出顺序:1升幂2降幂:");scanf("%d",&choose);MPP *tp=p;p=p->next;while(p!=NULL){num++;p=p->next;}MPOL *d=new MPOL[num];p=tp->next;while(p!=NULL){d[i].coef=p->coef;d[i].expn=p->expn;i++;p=p->next;}if(choose==2) //降幂打印{count=0;printf("Bn(X)=");for(i=num-1;i>=0;i--){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}else //升幂打印{if(choose!=1)printf("没有%d选项,系统将默认输出升序:\nBn(X)=",choose);elseprintf("Bn(X)=");for(i=0;i<num;i++){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}putchar(10);}void printlink(MPP * p) //打印结果M(x) {int num=0,i=0,choose,count;puts("请选择输出顺序:1升幂2降幂:"); scanf("%d",&choose);MPP *tp=p;p=p->next;while(p!=NULL){num++;p=p->next;}MPOL *d=new MPOL[num];p=tp->next;while(p!=NULL){d[i].coef=p->coef;d[i].expn=p->expn;i++;p=p->next;}if(choose==2) //降幂打印{count=0;printf("M(X)=");for(i=num-1;i>=0;i--){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}else //升幂打印{if(choose!=1)printf("没有%d选项,系统将默认输出升序:\nM(X)=",choose);elseprintf("M(X)=");for(i=0;i<num;i++){if(count++)putchar('+');printf("%lfX^%d",d[i].coef,d[i].expn);}}putchar(10);}void addlink(MPP *p1,MPP *p2,MPP *p3) //动态链表相加{MPP * p,*head;p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);p->coef=INFCO;p->expn=-INFEX;p->next=NULL;head=p3=p;p1=p1->next;p2=p2->next;while(p1!=NULL||p2!=NULL){if(fabs(head->coef)>1e-8){p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);head->next=p;head=p;head->next=NULL;}if(p1==NULL){head->coef=p2->coef;head->expn=p2->expn;p2=p2->next;continue;}if(p2==NULL){head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;continue;}if(p1->expn==p2->expn){head->coef=p1->coef+p2->coef;head->expn=p1->expn;p1=p1->next;p2=p2->next;}else if(p1->expn<p2->expn){head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;}else{head->coef=p2->coef;head->expn=p2->expn;p2=p2->next;}}puts("相加结果为:");printlink(p3);}void sublink(MPP *p1,MPP *p2,MPP *p3) //动态链表相减{MPP * p,*head;p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);p->coef=INFCO;p->expn=-INFEX;p->next=NULL;head=p3=p;p1=p1->next;p2=p2->next;while(p1!=NULL||p2!=NULL){if(fabs(head->coef)>1e-8){p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);head->next=p;head=p;head->next=NULL;}if(p1==NULL){head->coef=-p2->coef;head->expn=p2->expn;p2=p2->next;continue;}if(p2==NULL){head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;continue;}if(p1->expn==p2->expn){head->coef=p1->coef-p2->coef;head->expn=p1->expn;p1=p1->next;p2=p2->next;}else if(p1->expn<p2->expn){head->coef=p1->coef;head->expn=p1->expn;p1=p1->next;}else{head->coef=-p2->coef;head->expn=p2->expn;p2=p2->next;}}puts("相减结果为:");printlink(p3);}void mullink(MPP *p1,MPP *p2,MPP *p3) //动态链表相乘{MPP *p,*head,*d,*tp;int i,j;p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);p->coef=INFCO;p->expn=-INFEX;p->next=NULL;tp=head=p3=p;p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);p->coef=INFCO;p->expn=INFEX;p->next=NULL;tp->next=p;for(i=0;i<n1;i++){p1=p1->next;d=p2;for(j=0;j<n2;j++){d=d->next;p=(MPP *)malloc(sizeof(MPP));if(p==NULL)exit(0);p->next=NULL;p->coef=p1->coef*d->coef;p->expn=p1->expn+d->expn;tp=p3;while(tp->next!=NULL){if(tp->expn==p->expn){tp->coef+=p->coef;free(p);break;}if(tp->expn<p->expn&&tp->next->expn>p->expn){p->next=tp->next;tp->next=p;break;}tp=tp->next;}}}tp=p3;while(tp->next!=NULL){if(tp->next->expn==INFEX){free(tp->next);tp->next=NULL;break;}tp=tp->next;}puts("相乘结果为:");printlink(p3);}void deletelink(MPP *p) //删除结点释放内存{MPP *d;while(p!=NULL){d=p;p=p->next;free(d);}}int main(){int i,choose,choose2;puts("输入第一个多项式的项数:");scanf("%d",&n1);cp1=(MPOL *)malloc(n1*sizeof(MPOL)); puts("分别输入各项的系数和指数:");for(i=0;i<n1;i++)scanf("%lf%d",&cp1[i].coef,&cp1[i].expn);puts("输入第二个多项式的项数:");scanf("%d",&n2);cp2=(MPOL *)malloc(n2*sizeof(MPOL));puts("分别输入各项的系数和指数:");for(i=0;i<n2;i++)scanf("%lf%d",&cp2[i].coef,&cp2[i].expn);puts("请选择实现结构:1顺序结构2动态链表结构");scanf("%d",&choose);double *c1,*c2,*c3;MPP *p1=NULL,*p2=NULL,*p3=NULL;switch(choose){case 1:c1=(double *)malloc((cp1[n1-1].expn+1)*sizeof(double));c2=(double *)malloc((cp1[n2-1].expn+1)*sizeof(double));creatpoly1(c1,1);creatpoly1(c2,2);break;case 2:p1=creatlink(p1,n1,1);p2=creatlink(p2,n2,2);printlink1(p1);printlink2(p2);break;default:printf("没有%d选项系统将自动调用默认结构(动态链表)!\n",choose);choose=2;p1=creatlink(p1,n1,1);p2=creatlink(p2,n2,2);}puts("选择操作方式:1相加2相减3相乘");scanf("%d",&choose2);c3=(double*)malloc((cp1[n1-1].expn+cp2[n2-1].expn+2)*sizeof( double));if(choose==1){switch(choose2){case 1:addpoly(c1,c2,c3);break;case 2:subpoly(c1,c2,c3);break;case 3:mulpoly(c1,c2,c3);break;default:printf("没有%d选项系统将自动调用默认操作(相加)!\n",choose);addpoly(c1,c2,c3);}}else{switch(choose2){case 1:addlink(p1,p2,p3);28break;case 2:sublink(p1,p2,p3);break;case 3:mullink(p1,p2,p3);break;default:printf("没有%d选项系统将自动调用默认操作(相加)!\n",choose);choose2=1;addlink(p1,p2,p3);}deletelink(p1);deletelink(p2);deletelink(p3);}free(cp1);free(cp2);if(choose!=2){free(c1);free(c2);free(c3);}system("pause");system("cls");main();return 0;}29。

相关文档
最新文档