




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、I 数据结构数据结构 课程设计报告课程设计报告 题题目目:一元多项式计算一元多项式计算院(系):院(系): 计算机与信息科学学院 专专 业:业: 软件工程 班班 级:级: 软件1202班 学学 号:号: 02 05 40 姓姓 名:名: 陈潇潇 刘敏 易庆鹏 指导教师:指导教师: 彭代文 20132013 年年 1212 月月2目目 录录一、一、 课程设计介绍课程设计介绍 .1 11.1 课程设计目的.11.2 课程设计内容.11.2 课程设计要求.1二、二、 需求设计需求设计 .3 32.1 课设题目粗略分析.32.2 原理图介绍.42.2.1 功能模块图 .42.2.2 流程图分析 .4三
2、、需求分析三、需求分析 .6 63.1 存储结构.63.2 算法描述.6四、调试与分析四、调试与分析 .1010(1)调试过程.10(2) 程序执行过程.10参考文献参考文献 .1212总结总结 .1313附附 录(关键部分程序清单)录(关键部分程序清单) .14143一、一、课程设计介绍课程设计介绍1.11.1 课程设计目的课程设计目的熟悉使用 c 语言编码程序,解决实际问题;了解数据结构与算法的设计方法,具备初步的独立分析和设计能力。初步掌握软件开发过程的分析能力,系统设计,程序编码,测试等基本能力。提高综合运用的能力,运用所学理论知识与独立分析能力。1.21.2 课程设计内容课程设计内容
3、一元多项式计算任务:能够按照指数降序排列建立并输出多项式能够完成两个多项式的相加,并将结果输入在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法1.31.3 课程设计要求课程设计要求学生必须仔细阅读数据结构课程设计方案,认真主动完成课设的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。课程设计按照教学要求需要一周时间完成,一周中每天(按每周 5 天)至少要上 3-4 小时的机
4、来调试 C 语言设计的程序,总共至少要上机调试程序 30 小时。课程设计在期末考试之前交。最好一起上交。同班同学之间最好不要相同。源代码可以打印,但是下面模块要求的内容必须手写。二、二、 需求设计需求设计2.12.1 课设题目粗略分析课设题目粗略分析建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果42.22.2 流程图分析流程图分析1、输入输出(1)功能:将要进行运算的多项式输入输出。(2)数据流入:要输入的多项式的系数与指数。(3)数据流出:合并同类项后的多项式。(4)程序流程图:多项式输入流程图如图 1 所示。(5)测试要点
5、:输入的多项式是否正确,若输入错误则重新输入 图表图表 1 12、多项式的加法(1)功能:将两多项式相加。(2)数据流入:输入函数。(3)数据流出:多项式相加后的结果。(4)程序流程图:多项式的加法流程图如图 2 所示。(5)测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算。图表图表 1 1开始申请结点空间+num输入多项式的项数指针数组tempi中(i=1num)输入多项式各项的系数 x, 指数 y输出已输入的多项式 合并同类项结束否是是否输入正确5三、需求分析三、需求分析3.13.1 存储结构存储结构一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中
6、系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。开始定义存储结果的空链 r r是 否输出存储多项式的和的链 r结束是否同指数项系数相加后存入 r中直接把 p 中各项存入 r中直接把 q 中各项存入 r存储多项式 2 的空链 Q 是否为空存储多项式 1 的空链 P 是否为空合并同类项63.23.2 算法描述算法描述 #include#include#include#includetypedeftypedef st
7、ructstruct PolynomialPolynomial floatfloat coef;coef; intint expn;expn; structstruct PolynomialPolynomial *next;*next;*Polyn,Polynomial;*Polyn,Polynomial; /Polyn/Polyn 为结点指针类型为结点指针类型voidvoid Insert(PolynInsert(Polyn p,Polynp,Polyn h)h) if(p-coef=0)if(p-coef=0) free(p);free(p); /系数为系数为 0 0 的话释放结点的话释放
8、结点 elseelse PolynPolyn q1,q2;q1,q2; q1=h;q2=h-next;q1=h;q2=h-next; while(q2&p-expnexpn)while(q2&p-expnexpn) /查找插入位置查找插入位置 q1=q2;q1=q2; q2=q2-next;q2=q2-next; if(q2&p-expn=q2-expn)if(q2&p-expn=q2-expn) /将指数相同相合并将指数相同相合并 q2-coef+=p-coef;q2-coef+=p-coef; free(p);free(p); if(!q2-coef)if(
9、!q2-coef) /系数为系数为 0 0 的话释放结点的话释放结点 q1-next=q2-next;q1-next=q2-next; free(q2);free(q2); elseelse /指数为新时将结点插入指数为新时将结点插入 p-next=q2;p-next=q2; q1-next=p;q1-next=p; 7 /Insert/InsertPolynPolyn CreatePolyn(PolynCreatePolyn(Polyn head,inthead,int m)/m)/建立一个头指针为建立一个头指针为 headhead、项数、项数为为 m m 的一元多项式的一元多项式 inti
10、nt i;i; PolynPolyn p;p; p=head=(Polyn)malloc(sizeof(structp=head=(Polyn)malloc(sizeof(struct Polynomial);Polynomial); head-next=NULL;head-next=NULL; for(i=0;im;i+)for(i=0;icoef,&p-expn);%d,&p-coef,&p-expn); Insert(p,head);Insert(p,head); /调用调用 InsertInsert 函数插入结点函数插入结点 returnreturn head;
11、head;/CreatePolyn/CreatePolynvoidvoid DestroyPolyn(PolynDestroyPolyn(Polyn p)/p)/销毁多项式销毁多项式 p p PolynPolyn q1,q2;q1,q2; q1=p-next;q1=p-next; q2=q1-next;q2=q1-next; while(q1-next)while(q1-next) free(q1);free(q1); q1=q2;/q1=q2;/指针后移指针后移 q2=q2-next;q2=q2-next; voidvoid PrintPolyn(PolynPrintPolyn(Polyn
12、P)P) PolynPolyn q=P-next;q=P-next; 8 intint flag=1;/flag=1;/项数计数器项数计数器 if(!q)if(!q) /若多项式为空,输出若多项式为空,输出 0 0 putchar(0);putchar(0); printf(n);printf(n); return;return; whilewhile (q)(q) if(q-coef0&flag!=1)if(q-coef0&flag!=1) putchar(+);putchar(+); /系数大于系数大于 0 0 且不是第一项且不是第一项 if(q-coef!=1&q
13、-coef!=-1)/if(q-coef!=1&q-coef!=-1)/系数非系数非 1 1 或或-1-1 的普通情况的普通情况 printf(%g,q-coef);printf(%g,q-coef); if(q-expn=1)if(q-expn=1) putchar(X);putchar(X); elseelse if(q-expn)if(q-expn) printf(X%d,q-expn);printf(X%d,q-expn); elseelse if(q-coef=1)if(q-coef=1) if(!q-expn)if(!q-expn) putchar(1);putchar(1
14、); elseelse if(q-expn=1)if(q-expn=1) putchar(X);putchar(X); elseelse printf(X%d,q-expn);printf(X%d,q-expn); if(q-coef=-1)if(q-coef=-1) if(!q-expn)if(!q-expn) printf(-1);printf(-1); elseelse if(q-expn=1)if(q-expn=1) printf(-X);printf(-X); elseelse printf(-X%d,q-expn);printf(-X%d,q-expn); q=q-next;q=q
15、-next; flag+;flag+; /while/while printf(n);printf(n);9/PrintPolyn/PrintPolynintint compare(Polyncompare(Polyn a,Polyna,Polyn b)b) if(a&b)if(a&b) if(!b|a-expnb-expn)if(!b|a-expnb-expn) returnreturn 1;1; elseelse if(!a|a-expnexpn)if(!a|a-expnexpn) returnreturn -1;-1; elseelse returnreturn 0;0;
16、 elseelse if(!a&b)if(!a&b) returnreturn -1;/a-1;/a 多项式已空,但多项式已空,但 b b 多项式非空多项式非空 elseelse returnreturn 1;/b1;/b 多项式已空,但多项式已空,但 a a 多项式非空多项式非空/compare/comparePolynPolyn AddPolyn(PolynAddPolyn(Polyn pa,Polynpa,Polyn pb)/pb)/求解并建立多项式求解并建立多项式 a+ba+b,返回其,返回其头指针头指针 PolynPolyn qa=pa-next;qa=pa-next
17、; PolynPolyn qb=pb-next;qb=pb-next; PolynPolyn headc,hc,qc;headc,hc,qc; hc=(Polyn)malloc(sizeof(structhc=(Polyn)malloc(sizeof(struct Polynomial);/Polynomial);/建立头结点建立头结点 hc-next=NULL;hc-next=NULL; headc=hc;headc=hc; while(qa|qb)while(qa|qb) qc=(Polyn)malloc(sizeof(structqc=(Polyn)malloc(sizeof(struc
18、t Polynomial);Polynomial); switch(compare(qa,qb)switch(compare(qa,qb) casecase 1:1: qc-coef=qa-coef;qc-coef=qa-coef; qc-expn=qa-expn;qc-expn=qa-expn; qa=qa-next;qa=qa-next; break;break; casecase 0:0:10 qc-coef=qa-coef+qb-coef;qc-coef=qa-coef+qb-coef; qc-expn=qa-expn;qc-expn=qa-expn; qa=qa-next;qa=qa
19、-next; qb=qb-next;qb=qb-next; break;break; casecase -1:-1: qc-coef=qb-coef;qc-coef=qb-coef; qc-expn=qb-expn;qc-expn=qb-expn; qb=qb-next;qb=qb-next; break;break; /switch/switch if(qc-coef!=0)if(qc-coef!=0) qc-next=hc-next;qc-next=hc-next; hc-next=qc;hc-next=qc; hc=qc;hc=qc; elseelse free(qc);/free(qc
20、);/当相加系数为当相加系数为 0 0 时,释放该结点时,释放该结点 /while/while returnreturn headc;headc;/AddPolyn/AddPolynPolynPolyn SubtractPolyn(PolynSubtractPolyn(Polyn pa,Polynpa,Polyn pb)/pb)/求解并建立多项式求解并建立多项式 a+ba+b,返,返回其头指针回其头指针 PolynPolyn h=pb;h=pb; PolynPolyn p=pb-next;p=pb-next; PolynPolyn pd;pd;11 while(p)while(p) /将将 p
21、bpb 的系数取反的系数取反 p-coef*=-1;p-coef*=-1; p=p-next;p=p-next; pd=AddPolyn(pa,h);pd=AddPolyn(pa,h); for(p=h-next;p;p=p-next)for(p=h-next;p;p=p-next) /恢复恢复 pbpb 的系数的系数 p-coef*=-1;p-coef*=-1; returnreturn pd;pd;/SubtractPolyn/SubtractPolynintint main()main() intint m,n,flag=0;m,n,flag=0; floatfloat x;x; Pol
22、ynPolyn pa=0,pb=0,pc,pd,pe,pf;/pa=0,pb=0,pc,pd,pe,pf;/定义各式的头指针,定义各式的头指针,papa 与与 pbpb 在使用前在使用前付初值付初值 NULLNULL printf(printf(请输入请输入 a a 的项数的项数:);:); scanf(%d,&m);scanf(%d,&m); pa=CreatePolyn(pa,m);/pa=CreatePolyn(pa,m);/建立多项式建立多项式 a a printf(printf(请输入请输入 b b 的项数的项数:);:); scanf(%d,&n);scan
23、f(%d,&n); pb=CreatePolyn(pb,n);/pb=CreatePolyn(pb,n);/建立多项式建立多项式 a a /输出菜单输出菜单 printf(*n);printf(*n); printf(printf(操作提示:操作提示:nt1.nt1.输出多项式输出多项式 a a 和和 bnt2.bnt2.建立多项式建立多项式 a+bnt3.a+bnt3.建建立多项式立多项式 a-bn);a-bn); printf(t4.printf(t4.退出退出n*n);n*n); for(;flag=0)for(;flag=0) printf(printf(执行操作:执行操作:)
24、;); scanf(%d,&flag);scanf(%d,&flag);12 if(flag=1)if(flag=1) printf(printf(多项式多项式 a a:);PrintPolyn(pa););PrintPolyn(pa); printf(printf(多项式多项式 b b:);PrintPolyn(pb);continue;);PrintPolyn(pb);continue; if(flag=2)if(flag=2) pc=AddPolyn(pa,pb);pc=AddPolyn(pa,pb); printf(printf(多项式多项式 a+ba+b:);PrintPolyn(pc););PrintPolyn(pc); DestroyPolyn(pc);continue;DestroyPolyn(pc);continue; if(flag=3)if(flag=3) pd=SubtractPolyn(pa,pb);pd=SubtractPolyn(pa,pb); printf(printf(多项式多项式 a-ba-b:);PrintPolyn(pd);)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水利水电工程市场需求试题及答案
- 法学转业面试题及答案
- 工程项目管理实务试题及答案汇编
- 跨行业合作的探索计划
- 司机与乘客评分系统协议
- 2024年商业照明灯具项目资金申请报告代可行性研究报告
- 深入理解的经济学知识中级经济师试题及答案
- 食堂营业执照管理协议
- 2025年二级建造师之二建建筑工程实务题库检测试卷B卷附答案
- 2019-2025年中级银行从业资格之中级公司信贷题库练习试卷A卷附答案
- 国有投资公司项目跟投机制的实践与创新-以A国企为例
- 中国特色社会主义+综合练习(二)-2025届中职高考一轮复习高教版(2023版)
- 管理学基础-形考任务三-国开-参考资料
- 事业单位招聘人员体检表
- Visio图标-visio素材-网络拓扑图库
- 轨道交通建设工程施工现场消防安全管理课件
- 腾讯微博VS新浪微博
- 公共政策导论完整版课件全套ppt教学教程(最新)
- GA 1517-2018 金银珠宝营业场所安全防范要求
- 施工设计方案客土喷播
- 强对阵图模板(共1页)
评论
0/150
提交评论