一元多项式地加法减法乘法地实现_第1页
一元多项式地加法减法乘法地实现_第2页
一元多项式地加法减法乘法地实现_第3页
一元多项式地加法减法乘法地实现_第4页
一元多项式地加法减法乘法地实现_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

实用标准文案福建农林大学计算机与信息学院课程设计报告课程名称:数据结构课程设计题目:一元多项式的加法减法乘法的实现姓名:系:软件工程系专业:软件工程专业年级:2014学号:指导教师:黄思先职称:副教授完成起止日期:2016.6.5-2016.7.12016年07月1日精彩文档实用标准文案福建农林大学计算机与信息学院课程设计结果评定评价评价指标评分评定内容权值成绩有扎实的基础理论知识和课程知识; 能正确设业务计实验方案;独立进行实验工作;能运用所学 0.2水平课程知识和技能去发现与解决实际问题实验正确,分析处理科学;设计结果有应用价设计 值;图纸绘制符合国家标准,质量符合要求;0.4质量 计算及测试结果准确;工作中有创新意识;对前人工作有改进或突破,或有独特见解;工作量、按期完成规定的任务,工作量饱满,难度较大;工作0.2工作努力,遵守纪律;工作作风严谨务实态度报告文字通顺,技术用语准确,符号统一,编号齐质量0.2全,书写工整规范,图表完备、整洁、正确;合 计 1.0指导教师签字: 评定日期:精彩文档实用标准文案目录一、 问题分析和任务定义⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯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)。要求:首先判定多项式是否稀疏分别采用顺序和动态存储结构实现;结果M(x)中无重复阶项和无零系数项;要求输出结果的升幂和降幂两种排列情况二、课程设计的内容2.1函数多项式创建函数 PolyNode*Creatpoly()多项式输出函数 voidPrin_poly(PolyNode*h)多项式升序排列函数 voidInsortup(PolyNode*h)多项式降序排列函数 voidInsortdown(PolyNode*h)多项式合并函数 voidUnitePoly(PolyNode*h)精彩文档实用标准文案多项式相乘函数 PolyNode*polymuti(PolyNode*h1,PolyNode*h2)多项式相加函数 PolyNode*addition(PolyNode*ha,PolyNode*hb)多项式相减函数 PolyNode*subduction(PolyNode*ha,PolyNode*hb)2.2设计各个模块的流程图1)main()开始定义*h1,*h2,*h创建多项式 A输出文字合并同类项排序输出多项式 A精彩文档实用标准文案创建多项式 B输出文字合并同类项排序输出多项式 BYa=1 additionNYa=2 subductionNYa=3精彩文档实用标准文案polymuti结束(2)voidInsortup(PolyNode*h)开始p=h—>next结束 NP!=NULLYs=h—>nexts—>next!=NULLYs—>exp>s—>next—exp

p=h—>nextNs—>exp与s—>next—>exp互换s—>coef与s—>next—coef互换—Ns=s—>next精彩文档实用标准文案(3)voidInsortdown(PolyNode*h)开始p=h—>next结束 NP!=NULLYs=h—>nexts—>next!=NULLYs—>exp>s—>next—exp—Ns=s—>next

p=h—>nextNs—>exp与s—>next—>exp互换s—>coef与s—>next—coef互换精彩文档实用标准文案PolyNode*polymuti(PolyNode*h1,PolyNode*h2)(5)voidUnitePoly(PolyNode*h)精彩文档实用标准文案PolyNode*addition(PolyNode*ha,PolyNode*hb)开始精彩文档实用标准文案三、程序调试与测试相加结果精彩文档实用标准文案相减结果相乘结果精彩文档实用标准文案四、实验心得在本次课程设计中,我明白了理论应与实际相结合, 上机练习是提高编程能力最有效的办法,这次实验提高了我编写大型程序的能力以及查阅资料并从中获得有效资料的能力。这次课程设计加深了我对数据结构的进一步理解。五、程序编码实验程序:#include<stdio.h>#include<stdlib.h>#include<conio.h>typedefstructNode{intcoef;// 系数intexp;// 指数精彩文档实用标准文案structNode*next;}PolyNode;PolyNode*Creatpoly()// 创建多项式的单链表{PolyNode*h,*p,*q;h=(PolyNode*)malloc(sizeof(PolyNode));p=h;p->next=NULL;printf(" 请输入多项式的系数及其指数 ab,当系数输入 0时停止输入\n");q=(PolyNode*)malloc(sizeof(PolyNode));scanf("%d%d",&q->coef,&q->exp);while(q->coef!=0){p->next=q;p=q;q=(PolyNode*)malloc(sizeof(PolyNode));scanf("%d%d",&q->coef,&q->exp);}p->next=NULL;return(h);}精彩文档实用标准文案voidPrin_poly(PolyNode*h)// 将多项式输出函数{PolyNode*p;p=h->next;while(p!=NULL){if(p->coef>0&&p!=h->next){if(p->exp>0)printf("+%dx^%d",p->coef,p->exp);elseif(p->exp<0)printf("+%dx^(%d)",p->coef,p->exp);elseprintf("+%d",p->coef);}elseif(p->coef<0&&p!=h->next){if(p->exp>0)printf("%dx^%d",p->coef,p->exp);elseif(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);else精彩文档实用标准文案printf("%d",p->coef);}else{if(p->exp>0)printf("%dx^%d",p->coef,p->exp);elseif(p->exp<0)printf("%dx^(%d)",p->coef,p->exp);else printf("%d",p->coef);}p=p->next;}}voidInsortup(PolyNode*h)// 排序函数,使多项式中的各项按 X的升幂排列{PolyNode*s,*p;intt,m;for(p=h->next;p!=NULL;p=p->next)// 类似于冒泡排序{for(s=h->next;s->next!=NULL;s=s->next)精彩文档实用标准文案{if(s->exp>s->next->exp){t=s->exp;m=s->coef;s->coef=s->next->coef;s->exp=s->next->exp;s->next->coef=m;s->next->exp=t;}}}}voidInsortdown(PolyNode*h)// 排序函数,使多项式中的各项按 X的降幂排列{PolyNode*s,*p;intt,m;for(p=h->next;p!=NULL;p=p->next)// 类似于冒泡排序{for(s=h->next;s->next!=NULL;s=s->next){精彩文档实用标准文案if(s->exp<s->next->exp){t=s->exp;m=s->coef;s->coef=s->next->coef;s->exp=s->next->exp;s->next->coef=m;s->next->exp=t;}}}}voidUnitePoly(PolyNode*h)// 合并同类项{PolyNode*p1,*p2,*q1,*q2,*temp;q1=h;p1=q1->next;while(p1!=NULL){p2=p1->next;q2=p1;while(p2!=NULL)精彩文档实用标准文案{if(p1->exp==p2->exp){p1->coef=p1->coef+p2->coef;if(p1->coef==0){temp=p2;q2->next=p2->next;free(temp);temp=p1;q1->next=p1->next;p1=q1;free(temp);break;}else{temp=p2;q2->next=p2->next;p2=p2->next;free(temp);}精彩文档实用标准文案}else{q2=p2;p2=p2->next;}}q1=p1;p1=p1->next;}}PolyNode*polymuti(PolyNode*h1,PolyNode*h2)// 多项式相乘{PolyNode*h,*p,*p1,*p2,*q;p1=h1->next;h=p=(PolyNode*)malloc(sizeof(PolyNode));p->next=NULL;while(p1){p2=h2->next;while(p2){精彩文档实用标准文案q=(PolyNode*)malloc(sizeof(PolyNode));q->coef=p1->coef*p2->coef;q->exp=p1->exp+p2->exp;p->next=q;p=q;p2=p2->next;}p1=p1->next;}p->next=NULL;return(h);}PolyNode*addition(PolyNode*ha,PolyNode*hb)// 一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式 ha中,并将多项式 hb删除{PolyNode*p,*q,*pre,*temp;intsum;p=ha->next;q=hb->next;pre=ha;while(p!=NULL&&q!=NULL){if(p->exp<q->exp){精彩文档实用标准文案pre->next=p;pre=pre->next;p=p->next;}elseif(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{pre->next=q;pre=pre->next;q=q->next;}}if(p!=NULL)// 将多项式A中剩余的结点加入到和多项式中pre->next=p;elsepre->next=q;returnha;}PolyNode*subduction(PolyNode*ha,PolyNode*hb)// 一元多项式相减函数,用于将两个多项式相减,然后将差多项式存放在多项式 ha中,并将多项式 hb删除{PolyNode*p,*q,*pre,*temp;intsum;p=ha->next;q=hb->next;pre=ha;while(p!=NULL&&q!=NULL){if(p->exp<q->exp){精彩文档实用标准文案pre->next=p;pre=pre->next;p=p->next;}elseif(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{pre->next=q;pre=pre->next;q=q->next;}}if(p!=NULL)// 将多项式A中剩余的结点加入到和多项式中pre->next=p;elsepre->next=q;returnha;}main(){inta=-1;PolyNode*h1,*h2,*h;h1=Creatpoly();printf(" 该多项式为 P1(x)=");UnitePoly(h1);Insortup(h1);Prin_poly(h1);printf("\n");精彩文档实用标准文案h2=Creatpoly();printf(" 该多项式为 P2(x)=");UnitePoly(h2);Insortup(h2);Prin_poly(h2);printf("\n");printf(" 输入1查看两多项式相加结果 \n输入2查看两多项式相减结果 \n输入3查看

温馨提示

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

评论

0/150

提交评论