课程设计(第二组)1一元多项式的加法和乘法 C语言.doc_第1页
课程设计(第二组)1一元多项式的加法和乘法 C语言.doc_第2页
课程设计(第二组)1一元多项式的加法和乘法 C语言.doc_第3页
课程设计(第二组)1一元多项式的加法和乘法 C语言.doc_第4页
课程设计(第二组)1一元多项式的加法和乘法 C语言.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

滁州学院课程设计报告课程名称: 数据结构 设计题目: 一元多项式的加法和乘法 系 别: 计算机科学与技术系 专 业: 网络工程 组 别: 第二组 起止日期: 2011年 5月10日2011年 6月20日 指导教师: 杨传健 计算机科学与技术系二九年制12课程设计题目用线性表实现一元多项式的加法和乘法组长程伟学号2010211166班级(一)班系别计算机系专业网络工程组员程伟,胡顺义,金心萍,吕建强,陈永祥指导教师 杨传健课程设计目的将理论用于实际,用动手总结经验课程设计所需环境vc6.0+课程设计任务要求能够自己创建线性表,熟练运用并掌握线性表来实现多项式的加法与乘法课程设计工作进度计划序号起止日期工 作 内 容分工情况15.105.15上网查阅有关一元多项式的信息程伟完成25.16-5.18对信息进行分析,讨论然后总结并归纳小组成员共同完成35.19-5.20小组分工,确定各成员所编写的函数模块程伟完成45.21-6.1小组成员完成各自所编写的函数模块小组成员完成56.26.10讨论如何写课程设计,并将各函数整理成完整代码小组成员共同完成66.11-6.20完成课程设计报告,并进行后期修改程伟完成 指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日目 录1 需求分析11.1课程设计题目11.2课程设计的任务及要求11.3课程设计思想11.4软件开发的环境12 概要设计13 详细设计23.1 main函数23.2 加法函数33.3 创建函数33.4 按幂排序函数33.5 乘法函数43.6 输出函数44 调试与操作说明55 课程设计总结与体会66 致谢67 参考文献78 附录7课程设计的主要内容 1 需求分析1.1课程设计题目 用线性表实现一元多项式的加法与乘法。1.2课程设计的任务及要求任务:利用所学线性表知识来完成计算器中一元多项式的加法与乘法的运算。要求:能自己创建线性表,能自主的进行线性表的有关插入删除操作,并且可以在此基础上实现线性表之间的加减乘除运算。1.3课程设计思想首先要定义一个结构体,其中定义一元多项式的两个参数,系数和指数和链表中的指针域,然后一一罗列每个在主程序中得到的函数,并一一实现,最后在主程序中主要完成用户的输入和相关程序的调用。1.4软件开发的环境vc+6.0.以及多媒体计算机。2 概要设计本课程设计主要流程图如下:主函数main 加法函数add输出函数print输入函数creat排序函数insert输入函数creat 输出函数 print 实现加法的主要数据结构:线性表的建立,插入以及遍历在链式基础上的实现。方法:在main函数中进行加法函数,同时在加法函数中进行调用输入函数与输出函数,在输入函数中在调用排序函数,而输入函数,输出函数,排序函数均在main函数之外编写,排序函数是整个加法实现的核心部分。 主函数main 乘法函数mul输出函数print输入函数creat排序函数insert输入函数creat 输出函数 print实现乘法的主要数据结构:线性表的建立,插入以及遍历在链式基础上的实现。方法:在main函数中进行乘法函数,同时在乘法函数中进行调用输入函数与输出函数,在输入函数中在调用排序函数,而输入函数,输出函数,排序函数均在main函数之外编写,排序函数也是整个乘法实现的核心部分。 3 详细设计 本课程设计从main函数开始均是通过函数的调用完成,是通过层层的调用来实现的,下面就个函数功能做一简要阐述 3.1 main函数 整个程序从main函数开始运行,从一开始就调用了start函数,实现的是用户界面的输入,注释若输入1则为加法,输入2为乘法,部分程序如下: start()/实现用户界面/printf( *n); printf( * 用户选择界面 * n); printf( *n); printf( * *n); printf( * 1.两个一元多项式相加 *n); printf( * 2.两个一元多项式相乘 *n); printf( * *n); printf( *n); printf( n); printf(输入1为加法:n输入2为乘法:n请选择您的输入:); 3.2 加法函数整个加法函数是通过调用creat函数,insert函数,print函数实现的,加法函数其实就是这三个函数的组合,其核心是insert函数,是在creat函数中完成。部分代码如下: printf( 请输入第一个多项式f(x):n); f=creat(f); printf( 第一个多项式为:f(x)=); print(f); 3.3 创建函数实现的是多项式的输入,创建多项式,把值分别赋给coef与expn中。部分代码如下: input-coef=x; input-expn=y; input-next=null; insert(head,input); /每输入一项就将其排序,是的链表中多项式呈降序排列 scanf(%f %d,&x,&y); 3.4 按幂排序函数 该函数是实现乘法与加法的核心函数,若是加法则将第二个多项式的每一项单独提出来创建结点,然后分别与 第一个多项式中的每一项进行比较,比较的是expn,根据expn比较的情况来确定是插入结点、删除结点,还是进行结点的叠加。乘法原理也相同。如下给出部分代码: pre=head; if(pre-next=null) pre-next=input; /如果只有一个头结点,则把新结点直接连在后面 else now=pre-next;/如果不是只有一个头结点,则设置now指针 while(signal=0) if(input-expn expn) if(now-next=null) now-next=input; signal=1; else pre=now; now=pre-next;/始终让新输入的数的指数与最后一个结点中的数的指数比较,小于则插在其后面 else if( input-expn now-expn ) input-next=now; pre-next=input; signal=1; /若新结点中指数比最后一个结点即now中的指数大,则插入now之前 else/若指数相等则需合并为一个结点,若相加后指数为0则释放该结点 now-coef=now-coef+input-coef; signal=1; free(input); if(now-coef=0) pre-next=now-next; free(now); 3.5 乘法函数分别将第一个多项式中的每个结点与第二个多项式中的每个结点相乘将其结果放在另一个新开辟的节点中,然后继续调用insert函数来实现乘法,给出部分代码如下: pf = ( ploylist *)malloc(sizeof(ploylist);pf - coef = qa - coef * qb - coef;pf - expn = qa - expn + qb - expn;pf - next = null;insert( hf,pf); 3.6 输出函数 对已经完成的函数进行输出,分别输出其coef与expn,给出的部分代码如下: if(printing-coef0&fun-next!=printing) printf(+%f,printing-coef); elseprintf(%f,printing-coef); if(printing-expn!=0) printf(x%d,printing-expn);4 调试与操作说明 用户界面的调试:加法的实现第一个多项式:2x1+3x2,第二个多项式:3x1+4x2,结果应为5x1+7x2, 调试过程如下:调试结果与预期结果相同。该程序正确。 乘法的实现:第一个多项式:2x3,第二个多项式:3x2+4x3,结果应为:6x5+8x6,调试过程如下:调试结果与预期结果相同,该程序正确。5 课程设计总结与体会本次的课程设计中遇到的最大的难点就是不知通过怎样的途径来实现加法与乘法,最后经过小组的讨论决定就通过函数的调用,只要是遇到独立未知的量都设为函数,然后再通过构造该函数来实现所要求达到的目的。通过本次课程设计我们都深刻体会到合作的必要性,在每人构造一个函数之后在一起总结起来构成的整个程序,这和每个人的努力都分不开,同时也然大家体会到了函数再编程时的重要性。6 致谢总结:本次课程设计共耗时5天完成,在这次课程设计中,首先要感谢指导教师杨老师的指导与提示,其次就是谢谢大家的密切配合以及积极的学风才是本次设计能在这么短的时间内完成。衷心为大家的所取得的成果感到自豪,谢谢。7 参考文献 1胡学刚.数据结构(c语言版)m.北京:清华大学出版社,2008,1. 2严蔚敏.数据结构(c语言版)m. 北京:清华大学出版社,2007,1.8 附录#include#include/动态申请空间的函数的头文件typedef struct node /定义节点类型float coef; /多项式的系数 int expn; /多项式的指数 struct node * next; /结点指针域ploylist;void insert(ploylist *head,ploylist *input) /查找位置插入新链节的函数,且让输入的多项式呈降序排列 ploylist *pre,*now; int signal=0; pre=head; if(pre-next=null) pre-next=input; /如果只有一个头结点,则把新结点直接连在后面 else now=pre-next;/如果不是只有一个头结点,则设置now指针 while(signal=0) if(input-expn expn) if(now-next=null) now-next=input; signal=1; else pre=now; now=pre-next;/始终让新输入的数的指数与最后一个结点中的数的指数比较,小于则插在其后面 else if( input-expn now-expn ) input-next=now; pre-next=input; signal=1; /若新结点中指数比最后一个结点即now中的指数大,则插入now之前 else/若指数相等则需合并为一个结点,若相加后指数为0则释放该结点 now-coef=now-coef+input-coef; signal=1; free(input); if(now-coef=0) pre-next=now-next; free(now); /else /while/else/voidploylist *creat(char ch) /输入多项式 ploylist *head,*input; float x; int y; head=(ploylist *)malloc(sizeof(ploylist); /创建链表头 head-next=null; scanf(%f %d,&x,&y);/实现用户输入的第一个项,包括其指数和系数 while(x!=0)/当用户没有输入结束标志0时可一直输入多项式的项,且输入一个创建一个结点 input=(ploylist *)malloc(sizeof(ploylist); /创建新链节 input-coef=x; input-expn=y; input-next=null; insert(head,input); /每输入一项就将其排序,是的链表中多项式呈降序排列 scanf(%f %d,&x,&y); return head;ploylist *add(ploylist *head,ploylist *pre) /多项式相加,head为第一个多项式建立的链表表头,pre为第二个多项式建立的链表表头 ploylist *input; int flag=0; while(flag=0) if(pre-next=null) flag=1; /若该链表为空,则无需进行加法运算,跳出循环 else pre=pre-next; input=(ploylist *)malloc(sizeof(ploylist);/申请空间 input-coef=pre-coef; input-expn=pre-expn; input-next=null; insert(head,input); / 把g(x)插入到f(x)中,相当于两者相加,结果保存于f(x) return head;ploylist *mul(ploylist *head,ploylist *pre)/多项式项乘ploylist *hf,*pf,*qa,*qb; qa = head - next; qb = pre - next;/定义指针指向表头后一个元素,即链表中第一个元素hf = ( ploylist * )malloc( sizeof(ploylist);/新创建一个结点,当做表头hf - next = null;for ( ;qa;qa = qa - next)for( qb = pre - next;qb;qb= qb - next)/用两个循环,实现两个多项式之间每个项相乘,结果用insert函数进行排序与合并pf = ( ploylist *)malloc(sizeof(ploylist);pf - coef = qa - coef * qb - coef;pf - expn = qa - expn + qb - expn;pf - next = null;insert( hf,pf);return hf;void print(ploylist *fun) /输出多项式,fun指要输出的多项式链表的表头 ploylist *printing; int flag=0; printing=fun-next; if(fun-next=null)/若为空表,则无需输出 printf(0n); return; while(flag=0) if(printing-coef0&fun-next!=printing) printf(+%f,printing-coef); elseprintf(%f,printing-coef); if(printing-expn!=0) printf(x%d,printing-expn); else if(printing-coef=1)|(printing-coef=-1) printf(1); if(printing-next=null) flag=1; else printing=printing-next; printf(n);void start() /用户选择界面printf( *n); printf( * 用户选择界面 * n); printf( *n); printf( * *n); printf( * 1.两个一元多项式相加 *n); printf( * 2.两个一元多项式相乘 *n); printf( * *n); printf( *n); printf( n); printf(输入1为加法:n输入2为乘法:n请选择您的输入:);void main()ploylist *f,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论