《一元多项式数据结构课程设计报告》由会员分享,可在线阅读,更多相关《一元多项式数据结构课程设计报告(21页珍藏版)》请在金锄头文库上搜索。
1、一元多项式计算摘要一元多项式计算是用C语言设计一个一元多项式简单计算器。它能够实现按指数降序排列建立并输出多项式,并且能够完成两个多项式的相加,想减的运算和将其结果输入的功能。体会链式存存储结构的优缺点和适用性.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能 力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技提高综合运用所学的理论知识和方法独立分析和解决问题的能力;加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。关键词:C语言;一元多项式;链式存存储结构;指数降序排
2、列;目录1. 引言-32.需求分析-33.概要设计-33.1功能模块图 -33.2流程图 -44.详细设计-54.1一元多项式的建立-54.2显示一元多项式 -64.3一元多项式的加法运算-74.4一元多项式的减法运算-94.5 帮助-125测试结果-126.调试分析-137.设计体会-138.结束语-149.参考文献-1510.附录-151.引言 此程序的数据结构是选择用带头结点的单链表存储多项式。虽然一元多项式可以用顺序和链式两种存储结果表示,但顺序结构的最大长度很难确定。比如当多项式的系数较大时,此时就会浪费巨大的存储空间,所以应该选择用链式存储结构来存储一元多项式。单链表的结构体可以用
3、来存储多项式的系数,指数,下一个指针3个元素,这样便于实现任意多项式的加法,减法运算。2.需求分析能够按照多项式变量的指数降序创建一个多项式;能够对已创建的多项式进行显示;能够对已创建的多项式之间的加法运算;能够对已创建的多项式之间的减法运算;能够对已创建的多项式进行删除;能够实现计算器退出操作;3.概要设计3.1 功能模块图一元多项式计算一元多项式的输入显示一元多项式一元多项式加法运算一元多项式减法运算帮助3.2流程图开始Head=(pnode *)malloc(sizeof(pnode);Rear=head;Scanf(“%f”,&n);scanf(“%d”,&m);S=(pnode *)
4、malloc(sizeof(pnode);s-cofe=n;s-exp=m;s-next=NULLrear-next=s;rear=s;scanf(“%f,&n”);scanf(“%d”,&m)N!=ohead=head-next;Return headNY结束4.详细设计4.1 一元多项式的建立输入多项式采用头插入法的方式,插入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头结点指向他;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时久继续,当输入0时,就结束一个多项式的输入。算法:pnode * creat()int m;float n; pnode
5、*head,*rear,*s;head=(pnode *)malloc(sizeof(pnode);rear=head;printf(input coef:);scanf(%f,&n);printf(input exp:);scanf(%d,&m);while(n!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=n;s-exp=m;s-next=NULL;rear-next=s;rear=s;printf(input coef:);scanf(%f,&n);printf(input exp:);scanf(%d,&m);head=head-next;retu
6、rn head;4.2 显示一个多项式 如果系数是大于0的话就输出+系数x指数的形式;如果系数是小于0的话就输出系数x指数的形式;如果系数为0的话,就直接输出系数;如果系数是1的话就直接输出+x;如果系数是-1的话就直接输出-x。算法:void display(pnode *head)pnode *p;int one_time=1; p=head;while(p!=NULL)if(one_time=1)if(p-exp=0)printf(%f,p-coef);else if(p-coef=1|p-coef=-1)printf(x%d,p-exp);else if(p-coef0)printf(
7、%fx%d,p-coef,p-exp);else if(p-coefcoef,p-exp);one_time=0;elseif(p-exp=0)if(p-coef0)printf(+%f,p-coef);else if(p-coef=1)printf(+x%d,p-exp);else if(p-coef=-1)printf(x%d,p-exp);else if(p-coef0)printf(+%fx%d,p-coef,p-exp);else if(p-coefcoef,p-exp);p=p-next;printf(n);4.3 一元多项式加法运算 它从两个多项式的头部开始,两个多项式的某一项不
8、为空时,如果指数相等的话,系数就相加,相加的和不为0的话,用头插法建立一个新的节点。P的指数小于q的指数的话,就应该复制q节点到多项式中。P指数大于q指数的话,就应该复制p节点到多项式中。当第二个多项式空第一个不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个不为空时,将第二个多项式用新节点产生。算法:pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x; p=heada; q=headb; headc=(pnode *)malloc(sizeof(pnode); r=headc; while(
9、p!=NULL&q!=NULL) if(p-exp=q-exp) x=p-coef+q-coef; if(x!=0) s=(pnode *)malloc(sizeof(pnode); s-coef=x; s-exp=p-exp; r-next=s; r=s; q=q-next;p=p-next; else if(p-expexp)s=(pnode *)malloc(sizeof(pnode);s-coef=q-coef; s-exp=q-exp; r-next=s; r=s; q=q-next; else s=(pnode *)malloc(sizeof(pnode); s-coef=p-co
10、ef; s-exp=p-exp; r-next=s; r=s; p=p-next; while(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s-coef=p-coef;s-exp=p-exp; r-next=s; r=s; p=p-next; while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s-coef=q-coef; s-exp=q-exp; r-next=s; r=s; p=p-next; r-next=NULL; headc=headc-next; return headc; 4.4 一元多项式减法运
11、算它从两个多项式的头部开始,两个多项式的某一项不为空时,如果指数相等的话,系数就相减,相减的差不为0的话,用头插法建立一个新的节点。P的指数小于q的指数的话,就应该复制q节点到多项式中。P指数大于q指数的话,就应该复制p节点到多项式中,并且建立的节点的系数为原来的相反数。当第二个多项式空第一个不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。算法:pnode * sub(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x;p=heada;q=headb;headc=(pnode *)malloc(sizeof(pnode);r=headc;while(p!=NULL&q!=NULL)if(p-exp=q-exp)x=p-coef-q-coef;if(x!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=x;s-exp=p-exp;r-next=s;r=s;q=q-next;p=p-next;else if(p-expexp)s=(pnode *)malloc(sizeof(pnode);s-coef=-q-coef;s-exp=q-exp;r-ne