




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计课程名称: C语言、数据结构 课题名称:一元稀疏多项式相加 班 级: 南湖07级电信1班 姓 名: 陈 理 指导教师: 吴岳芬 2010年 6月26日湖南理工学院信息与通信工程系一、 实验目的本课程设计是为了配合数据结构课程的开设,通过数据结构的应用、算法的编写、类C语言的算法转换成C程序并用TC上机调试的基本方法,设计出一个对两个一元稀疏多项式进行相加,然后输入结果的程序。程序所能达到的功能:输入两个一元稀疏多项式,能够输出相加后的值。二、 实验任务及要求实验任务:设计一元稀疏多项式加法器。实验要求:一元稀疏多项式加法器的基本功能是: (1)输入并建立多项式; (2)输出多项式:n, c1, e1, c2, e2, cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列。(3)两个多项式相加; (4)输出加法结果。三、需求设计3.1主程序的流程(1)输入第一个一元稀疏多项式.(2)输入第二个一元稀疏多项式.(3)对两个一元稀疏多项式进行相加.(4)输出两个一元稀疏多项式相加后的结果.3.2程序模块(1)项数的结构体Term(2)建立一元稀疏多项式函数 CreatPloy(void).(3)对两个一元稀疏多项式相加函数AddPolyn(&Pa,&Pb).(4)输出相加后值的函数PrintPloyn(P).3.3各模块之间的调用关系(1)主函数调用Term结构体(2)调用两次GreatPloy函数建立一元稀疏多项式(2)调用AddPolyn函数,对两个多项式进行相加(3)调用PrintPloyn函数,输出结果四、概要设计程序流程图(1)主函数流程图输入第一个一元稀疏多项式. CreatPloy(void)输入第二个一元稀疏多项式. CreatPloy(void)对两个一元稀疏多项式进行相加. AddPolyn(&Pa,&Pb)输出两个一元稀疏多项式相加后的结果. PrintPloyn(P)(2)GreatPloy函数流程图 输入项数n head=p1=p2=(struct term*)malloc(LEN); 输入第一项的系数和指数 coef expni=2 to i=n ;i+ p1=(struct term*)malloc(LEN);scanf(%d,%d,&p1-coef,&p1-expn);p1-next=NULL;p2-next=p1;p2=p2-next;return head(3) PrintPloyn函数流程图int m=0;while(p!=NULL)m+;printf(c%d=%d,e%d=%dn,m,p-coef,m,p-expn);p=p-next;printf(number=%dn,m);(4) AddPolyn函数流程图int n=0;struct term *p3,*head;while(p1!=NULL&p2!=NULL)n=n+1;n=1真假比较p1和p2所指结点指数建立头结点 head比较p1和p2所指结点指数把指数大的结点连入head把p1或p2剩下的结点连入head中返回head五、详细设计5.1抽象数据类型定义ADT Polynomial数据对象:D=ai|aiTermSet,i=1,2,m,m0TermSet中的每个元素包含一个表示系数的实数和表示指数的整数数据关系:R1=|ai-1,aiD,且ai-1中的指数值ai中的指数值,i=2,nCreatPloy(void)107数据结构课程设计_两个一元稀疏多项式相加操作结果:输入M项的系数和指数,建立一元多项式P。PrintPloyn(P)初始条件:一元二项式P存在。操作结果:输出一元二项式P。AddPolyn(&Pa,&Pb)初始条件:一元二项式Pa和Pb已存在。操作结果:完成多项式相加运算,即:Pa=Pa+Pb。ADT Polynomial5.2基本操作的算法描述(1)项数的结构体typedef struct/项的表示,多项式作为LinkList的数据元素 int coef;/系数 int expn;/指数Term;(2)输入M项的系数和指数,建立一元多项式Pstatus CreatPolyn(void) scanf(n); head=p1=p2=(elemtype*)malloc(LEN); scanf(p1-coef,p1-expn); for(i=2;icoef,p1-expn); p1-next=NULL; p2-next=p1; p2=p2-next; /for return(head); /CreatPolyn(3)完成多项式相加运算,即:Pa=Pa+Pbstatus AddPolyn(Term p1,Term p2) n=0; if(n=1) if(p1-expnp2-expn) head=p3=p1;p1=p1-next; /*if*/ else if(p1-expn=p2-expn) p1-coef=p1-coef+p2-coef; if(p1-coef=0)n=0;p1=p1-next;p2=p2-next; if(!p1)head=p2; if(!p2)head=p1; if(!p1&!p2) printf(answer is 0n); head=NULL;/*if*/ /*if*/else head=p3=p1;p1=p1-next;p2=p2-next; /*else*/ /*else if*/ elsehead=p3=p2;p2=p2-next; /*else*/ /*if*/else if(p1-expnp2-expn) p3-next=p1;p1=p1-next;p3=p3-next; /*if*/ else if(p1-expn=p2-expn) p1-coef=p1-coef+p2-coef; if(p1-coef=0) p1=p1-next;p2=p2-next; /*if*/else p3-next=p1;p1=p1-next;p2=p2-next;p3=p3-next; /*else*/ /*else if*/ else p3-next=p2;p2=p2-next;p3=p3-next;/*else*/ /*else*/ /*while*/ while(p1!=NULL) return(head);/*daapolyn*/(4)输出一元二项式Pstatus PrintPolyn(p) while(p) m+;printf(cm=p-coef,em=p-expn)/输出c1,e1,c2,e2cm,em,c为系数,e为指数 /while print(m);/输出项数/PrintPolyn六、调试分析运行方法如下1.根据提示输入第一个一元稀疏多项式的项数和各项数的系数和指数。如图1图1输入显示图2.根据提示输入第二个一元稀疏多项式的项数和各项数的系数和指数。如图23.输出两个一元二项式的相加后的结构,如图3七、测试结果第一组:输入2x+5x8-3.1x11 和7-5x8+11x9输出结果为。如图4第二组:输入6x-3-x+4.4x2-1.2x9和-6x-3+5.4x2-x2+7.8x1输出结果为。如图5第三组:输入1+x+ x2+x3 +x4+x5和- x3 -x4输出结果为。如图6通过上述3组实验证明该程序,在正确输入数据的前提条件下,能够按要求输出正确的结果,并按指定的输出格式输出。八、课程设计总结一元稀疏多项式相加是我选择的课程设计题目,在这次设计中我学到了很多实际应用的知识。 当得到课程设计指导书时,我认真分析了这一题目及相关要求,然后根据数据结构课所学写出相映算法,再后运用C 语言的知识将算法写成程序,进行修改,最后在Turbo C环境下进行运用,修改。 这次设计让我真切地感受到往往一个细节会决定整个程序的命运。所以在编程过程中理论与实践的结合是十分重要的,细节问题也是不容忽视的。九、参考文献1.晋良颍.数据结构M.人民邮电出版社,2002.05 34-412.徐孝凯,魏荣.数据结构M.机械工业出版社,1996.07 56-623.徐孝凯.数据结构简明教程.M.清华大学出版社,1995.04 106-1134.陈文博,朱青.数据结构与算法M,机械工业出版社,1996.09 125-127十、源代码#include#include#include#define LEN sizeof(node)typedef struct polynode /*用单链表存储多项式的结点结构*/ int coef; /*多项式的系数*/ int exp; /*指数*/ struct polynode *next; /*next是struct polynode类型中的一个成员,它又指向 struct polynode类型的数据,以此建立链表*/node;/*若定为node,*list;,意即node*与list同为结构指针类型*/node * create(void) /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/ node *h,*r,*s; int c,e; h=(node *)malloc(LEN); /*建立多项式的头结点,为头结点分配存储空间*/ r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ printf(coef:); scanf(%d,&c); /*输入系数*/ printf(exp: ); scanf(%d,&e); /*输入指针*/ while(c!=0) /*输入系数为0时,表示多项式的输入结束*/ s=(node *)malloc(LEN); /*申请新结点*/ s-coef=c; /*申请新结点后赋值*/ s-exp=e; /*申请新结点后赋值*/ r-next=s; /*做尾插,插入新结点*/ r=s; /*r始终指向单链表的表尾*/ printf(coef:); scanf(%d,&c); printf(exp: ); scanf(%d,&e); r-next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/ return(h);void polyadd(node *polya, node *polyb)/*一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除*/ node *p,*q,*pre,*temp; int sum; p=polya-next;/*令p和q分别指向polya和polyb多项式链表中的第一个结点*/ q=polyb-next; pre=polya; /*位置指针,指向和多项式polya*/ while(p!=NULL&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/ if(p-expexp) /*若p指向的多项式指数小于q指的指数*/ pre-next=p; /*将p结点加入到和多项式中*/ pre=pre-next; p=p-next; else if(p-exp=q-exp) /*若指数相等,则相应的系数相加*/ sum=p-coef+q-coef; if(sum!=0) p-coef=sum; pre-next=p;pre=pre-next;p=p-next; temp=q;q=q-next;free(temp); else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/ temp=p-next;free(p);p=temp; temp=q-next;free(q);q=temp; else /*若p指数大于q指数*/ pre-next=q; /*p结点不动,将q结点加入到和多项式中*/ pre=pre-next; q=q-next; if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/ pre-next=p; else /*否则将B的结点加入到和多项式中*/ pre-next=q; void print(node * p) /*输出函数,打印出一元多项式*/ while(p-next!=NULL) p=p-next; printf( %d*x%d,p-coef,p-exp); main() /*主函数*/ node * polya,* polyb; printf(Welcome to use!n); printf(nPlease input the ploya include coef & exp:n); polya=create(); /*调用建立链表函数,创建多项式A*/ print(polya); printf(nPlease input the ployb include coef & exp:n); polyb=create(); /*同理,创建B*/ print(polyb); printf(nSum of the poly is:n); polyadd(polya,polyb); /*调用一元多项式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药师详细试题及答案
- 卫生资格考试重要考点试题及答案
- 行政管理专科语文应变能力试题及答案
- 行政法学中的分权与集中研究试题与答案
- 主管护师考试课程识别与试题及答案
- 2025年卫生资格考试专用复习试题及答案
- 冀教版(三起)三年级上册英语全册课时练习含答案
- 2025年执业医师考试电子病历处理试题及答案
- 中国古典文学的时代特色幻灯片
- 主管护师考试备考路线图与试题及答案
- 2025年中考英语高频词汇变形归纳《背诵版+默写版》
- 《儿童常见病预防》课件
- 护士招考三基试题及答案
- 2024年湖南省城步苗族自治县事业单位公开招聘医疗卫生岗笔试题带答案
- 第32届全国中学生物理竞赛复赛试题
- 《采煤学》教材笔记
- 汉字介绍课件
- 2025年度继续教育公需科目(AI工具学习与运用)考试试题(满分版含答案)
- 广东广东省青少年发展基金会招聘笔试历年参考题库附带答案详解
- 跨学科实践“制作‘水火箭’”(教学设计)-2024-2025学年八年级物理下学期项目化课程案例
- 2025新生儿高胆红素血症诊治指南解读课件
评论
0/150
提交评论