




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1软件开发平台12软件功能说明12.1功能分析说明图12.2各项功能说明33软件设计详细内容53.1采用的主要数据结构类型53.2流程图54软件测试84.1软件测试用例84.2软件测试报告85总结和致谢136附录136.1软件使用说明136.2源码166.3参考文献261.软件开发平台配置环境 Windows XP 系统 或Windows 7 系统 运行环境 Windows XP 系统 或 Windows 7 系统开发工具 VC+6.0 程序语言 C 语言2.软件功能说明一元多项式简单的计算器该计算器具有以下功能:1 能够按照多项式变量的指数降序创建一个多项式;2 能够对已创建的多项式进行
2、显示;3 能够对已创建的多项式之间的加法运算;4 能够对已创建的多项式之间的减法运算;5 能够对已创建的多项式进行删除;6 能够实现计算器退出操作;2.1功能分析说明图退出菜单多项式的删除多项式的相减多项式的相加多项式的显示多项式的建立一元多项式简单的计算器2.2各项功能说明要求对分别上面的每个功能模块进行详细的文字说明主函数模块main() 建立一个可供选择的菜单,通过switch语句,选择1则是去建立多项式,选择2则是去显示出多项式,选择3则是去进行两个多项式的相加,选择4则是进行两个多项式的相减,选择5则是去进行多项式的删除,选择6则是退出菜单。多项式的建立模块Creatpol() 建立
3、一个链表,头指针均用结构体指针数组中的元素表示,且头指针所指的结构体的指数是表示该链表表示的多项式的项数,而后以指数递减的次序依次输入各项,链表中的第二个节点表示的是多项式中的第一项,依次类推,不断把多项式各项的指数,系数的值输入链表的节点中,并使链尾指针为空。多项式的输出模块Outp_pol() 首先用一个指针指向需要输出的多项式对应的链表的头指针,头指针的指数成员表示项数,接着通过链表依次输出各项,从第二项开始,系数不小于的项与系数小于0的项输出是不一样的,判断后依次输出。多项式的相加模块Addpol() 需要用到两个指针指向相加的两个多项式,用一个链表表示两个多项式相加后形成的新的多项式
4、,首先确定两指针是否已到达链尾来作为循环条件,其次以两指针所指的节点的结构体的指数成员值的大小比较分成三种情况进行计算,指数偏大者指针向下一个移动,指数相同的两者系数相加,直到两者都到达链尾,从而伴随着新链表的形成,及相加后新的多项式的形成。多项式的相减模块Decpol() 需要用到两个指针指向相减的两个多项式,用一个链表表示两个多项式相减后形成的新的多项式,首先确定两指针是否已到达链尾来作为循环条件,其次以两指针所指的节点的结构体的指数成员值的大小比较分成三种情况进行计算,指数偏大者指针向下一个移动,指数相同的两者系数相减,直到两者都到达链尾,从而伴随着新链表的形成,及相减后新的多项式的形成
5、。多项式的删除模块 Delpol() 用一个指针指向要删除的多项式,运用free()函数,依次删除该链表的各个节点。3.软件设计详细内容3.1采用的主要数据结构类型#include<stdio.h> /标准输入、输出头文件#include<stdlib.h> /包含动态存储与释放函数头文件结构体:struct ponode float xishu; /系数 int zhishu; /指数 struct ponode *next; /自引用结构*polhead; /定义指针p_pol polhead26=0; / 定义结构体指针数组char menu,name,name1
6、,name2;int tuichu=0,j=0,n; 3.2 流程图1) .主菜单流程图int tuichu=0,j=0tuichu=0?j=0?printf(“ ”)READ(menu) menu=1?menu=2?menu=3?menu=4?menu=5?j+menu=6?Creatpol()Creatpol()Outp_pol()Addpol()Decpol()Delpol()tuichu=1breakbreakbreakbreakbreakbreakNYNNNNNNYYYYYYprintf(“再次选择”)Y2) Creatpol()函数流程图:p_pol p,t;int i;*p_po
7、lhead=(pol*)malloc(sizeof(pol)(*p_polhead)->zhishu=nt=*p_polheadprintf(“ ”)i<np=(pol*)malloc(sizeof(pol)printf(“ ”)scanf("%f%d")t->next=pt=pi+t->next=NULLreturn 1YN3) Outp_pol()函数流程图:int i=0; p_pol p;p=p_polhead->nextprintf(“”)printf("%f*x%d",)i<p_polhead->zh
8、ishui=0printf("%f*x%d",)p->xishu>=0printf("+%f*x%d",)p=p->nexti+printf("n")4) Addpol()函数流程图:p1=polhead1->nextp2=polhead2->next*p_polhead=(pol*)malloc(sizeof(pol)p=t=*p_polheadp1&&p2=0e1=p1->zhishue2=p2->zhishue1>e2e1=e2e1<e2p1=p1->n
9、extsum=p1->xishu+p2->xishup1=p1->next; p2=p2->nextp2=p2->nextp1=0i+p1=p1->nexti+p2=0i+p2=p2->nextt->next=NULL(*p_polhead)->zhishu=iYYYYYYNNNNNN5) Decpol()函数流程图:p1=polhead1->nextp2=polhead2->next*p_polhead=(pol*)malloc(sizeof(pol)p=t=*p_polheadp1&&p2=0e1=p1-&g
10、t;zhishue2=p2->zhishue1>e2e1=e2e1<e2p1=p1->nextdif=p1->xishu-p2->xishup1=p1->next; p2=p2->nextp2=p2->nextp1=0i+p1=p1->nexti+p2=0i+p2=p2->nextt->next=NULL(*p_polhead)->zhishu=iYYYYYYNNNNNN6) Delpol()函数流程图:p_pol p,tp=t=*p_polheadp->next=0p=p->nextfree(t)t=p
11、NY4.软件测试4.1 软件测试用例打开软件,进入系统主界面:多项式创建功能测试:选择指令1,进入建立多项式的模块,先创建多项式a:再次选择指令1,创建多项式b:多项式输出功能测试选择指令2,进入多项式输出的模块,先输出多项式a:再次选择指令2,输出多项式b:多项式相加功能测试选择指令3,进入多项式相加的模块,并输出相加后的多项式c:多项式相减功能测试然后选择指令4,进入多项式相减的模块,并输入相减后的多项式d:多项式删除功能测试接着选择指令5,进入多项式删除的模块,删除多项式d,及释放多项式d对应的链表所占用的内存:多项式删除功能测试最后选择指令6,退出菜单:所有测试完毕,功能全部正常。4.
12、2软件测试报告将4.1 测试过程中能完成的功能和不能完成的功能以及不能完全完成的功能进行列表分析,指出测试结果和出错原因,例如:标号项目预期结果实际结果出错原因出错次数01主函数菜单美观的菜单得到美观的菜单无无02多项式的创建正确输入数据完成无无03多项式的显示正确显示数据完成无无04多项式的相加正确处理数据完成无无05多项式的相减正确处理数据完成无无06多项式的删除正确删除数据完成无无5.总结和致谢开始选这个程序的时候,我以为这个程序很简单,可当选完以后,自己开始着手做这个程序的时候,查阅了相关资料,发现做这个程序还要用到链表,而链表在课本上算是一个比较难的知识点,我做这个程序发了很久的时间
13、,单单就把书上的关于链表部分的知识看懂就发了比较多的时间,而自己把整个程序做出来的时候,一上机检测,发现错误到处都是,自己于是细心地想办法一个一个去改,最后运行到没问题时,才放了一大口气。我感觉自己通过做这个实验收获的挺多的,而自己完成了这个程序也产生了一种自豪感。通过这次课程设计,我发现了自己在学习中的诸多不足,我想我会积极改正的。无论是在课堂学习,还是在课外的相关知识的拓展,我均通过这次课程设计认识到了不足,很感谢能有这样一次课程设计的机会。另外,在我自己写完程序上机检测的时候,真的是很多错误,我要感谢我的同学,他们帮我指出了不少错误。然而帮助我改正绝大部分错误的还是网络资料,因为很多莫名
14、的错误根本看不懂,只是在网上一查才知道到底错误实质上是出在哪里了。最后还是感谢老师和许多同学,我在这次课程设计中的收获离不开他们的帮助。6.附录6.1软件使用说明运行条件:本软件可以在Visual C+ 里运行,其他编程软件没有测试。进入主菜单以后, 选择你要执行模块,在初次使用时,应先选择指令1 输入两个多项式后才能使用其他模块,在输入多项式时应注意多项式的名称要用小写字母表示,而且输入多项式的项数时,要注意多项式的输入应不含同类项,且指数单调递减,创建了两个多项式后,可选择指令2对其进行输出,只需输入需输出的多项式即可,可输出多项式的项数,而且显示出多项式,接着可在再次选择中选择指令3,并
15、输入两个相加多项式的名称和和式的名称,即可输出和式的项数以及显示出相加后的多项式,接着可在再次选择中选择指令4,并输入两个相减多项式的名称和差式的名称,即可输出差式的项数以及显示出相减后的多项式,然后选择指令5,可以删除想要删除的多项式,以腾出更多的内存空间,当使用完之后,可以选择指令6来退出主菜单,6.2源码#include<stdio.h>#include<stdlib.h> /*头文件的包含*/#define READ(I) doI=getchar();while(I='n') /*宏定义,读取不是回车符的字符*/typedef struct po
16、node float xishu;int zhishu;struct ponode *next;pol,*p_pol; /*结构体类型的定义及其类型别名*/ int Creatpol(p_pol *p_polhead,int n); /*创建多项式的函数声明*/void Outp_pol(p_pol p_polhead); /*输出多项式的函数声明*/void Addpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2); /*求多项式之和的函数声明*/void Decpol(p_pol *p_polhead,p_pol polhead1,p_p
17、ol polhead2); /*求多项式之差的函数声明*/void Delpol(p_pol *p_polhead); /*删除多项式的函数声明*/void main()p_pol polhead26=0; /* 定义结构体指针数组*/char menu,name,name1,name2;int tuichu=0,j=0,n; /*数据类型声明*/printf(" * 一元多项式的简单计算器*nnn");printf(" (为确保函数正常运行,多项式要求不含同类项,指数递减)n");while(tuichu=0) if(j!=0)printf("
18、;nnnnn再次选择:n");printf(" *1.建立多项式 *n");printf(" *2.输出多项式 *n");printf(" *3.求两个多项式之和,建立和式并输出*n");printf(" *4.求两个多项式之差,建立和式并输出*n");printf(" *5.删除多项式 *n");printf(" *6.退出 *n");printf(" *请选择指令:");READ(menu); /*输入指令*/printf("n&q
19、uot;);switch(menu) /*根据不同指令选择不同的菜单*/case '1': /*建立多项式*/printf(" *请输入要创建的多项式的名称,用单个小写字母表示:");READ(name); /*输入多项式的名称*/printf("n"); printf(" *请输入项数:");scanf("%d",&n); /*输入多项式的项数*/if(Creatpol(&polheadname-'a',n) /*调用函数并判断是否成功创建了多项式*/printf(
20、" *多项式%c创建完毕!n",name);break;case '2': /*输出多项式*/printf("请输入要输出的多项式的名称:");READ(name); /*输入需输出的多项式的名称*/printf("n");Outp_pol(polheadname-'a'); /*调用多项式输出函数*/break;case '3': /*求两多项式的和*/printf("请输入加式1的名称:");READ(name1);printf("n");pr
21、intf("请输入加式2的名称:");READ(name2);printf("n");printf("请输入要创建的和式的名称:");READ(name);printf("n");Addpol(&polheadname-'a',polheadname1-'a',polheadname2-'a'); /*调用多项式求和函数*/Outp_pol(polheadname-'a'); /*调用多项式输出函数*/break;case '4'
22、;: /*求两多项式的差*/ printf("请输入被减式的名称:");READ(name1);printf("n");printf("请输入减式的名称:");READ(name2);printf("n");printf("请输入要创建的差式的名称:");READ(name);printf("n");Decpol(&polheadname-'a',polheadname1-'a',polheadname2-'a'); /
23、*调用多项式求差函数*/Outp_pol(polheadname-'a'); /*调用多项式输出函数*/break;case '5': /*删除多项式*/printf("请输入要删除的多项式名称:n");READ(name);Delpol(&polheadname-'a'); /*调用多项式删除函数*/ printf("多项式%c已删除!n",name);break;case '6': /*退出菜单*/tuichu=1;break;j+; /*统计选择指令的次数*/int Creat
24、pol(p_pol *p_polhead,int n)int i;p_pol p,t;*p_polhead=(pol*)malloc(sizeof(pol); /*申请一个空间*/(*p_polhead)->zhishu=n; /*头指针的指数成员值为多项式的项数*/t=*p_polhead; printf(" 请按指数递减序输入最简形式的多项式n");for(i=0;i<n;i+) /*循环输入多项式各项的系数与指数*/p=(pol*)malloc(sizeof(pol); printf(" 请输入第%d项(系数,指数):",i+1);sc
25、anf("%f%d",&(p->xishu),&(p->zhishu); /*输入该项的系数与指数*/printf("n");t->next=p; /*t的下一个节点为p*/t=p; /*将p的成员值赋给t*/t->next=NULL; /*确定链尾指针为空*/return 1; /*创建完毕后返回1*/void Outp_pol(p_pol p_polhead)int i;p_pol p;printf("总项数为:%dn",p_polhead->zhishu); /*链表的头指针的指数成
26、员值代表该多项式的项数*/p=p_polhead->next;for(i=0;i<p_polhead->zhishu;i+)if(i=0)printf("%f*x%d",p->xishu,p->zhishu); /*第一项的输出*/elseif(p->xishu>=0)printf("+%f*x%d",p->xishu,p->zhishu); /*系数不小于零的非第一项的输出*/elseprintf("%f*x%d",p->xishu,p->zhishu); /*系数小
27、于零的非第一项的输出*/p=p->next; /*p指针移向下一个节点*/printf("n");void Addpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2)int i=0,e1,e2; float sum;p_pol p1,p2,p,t;p1=polhead1->next;p2=polhead2->next;*p_polhead=(pol*)malloc(sizeof(pol); /*申请一个空间*/p=t=*p_polhead;while(p1&&p2) /*判断p1与p2均为非
28、空指针*/e1=p1->zhishu;e2=p2->zhishu;if(e1>e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p;*p=*p1; /*将p1的成员值赋给p*/p1=p1->next; /*p1移向下一个节点*/i+; /*统计多项式的项数*/else if(e1=e2) sum=p1->xishu+p2->xishu; /*将两个指数相同的项的系数相加*/if(sum!=0.0) /*当其不为零时*/p=(pol*)malloc(sizeof(pol);t->next=p;t=p;p->
29、;xishu=sum; /*系数为sum*/p->zhishu=e1; /*指数不变*/i+; /*统计多项式的项数*/p1=p1->next; p2=p2->next; /*p1与p2均移向下一个节点*/ else if(e1<e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p;*p=*p2; /*将p2的成员值赋给p*/p2=p2->next; /*p2移向下一个节点*/i+; /*统计多项式的项数*/while(p1) /*判断p1是否为空指针*/p=(pol*)malloc(sizeof(pol);*p=*p1
30、; /*将p1的成员值赋给p*/t->next=p; t=p;p1=p1->next; /*p1移向下一个节点*/i+; /*统计多项式的项数*/while(p2) /*判断p2是否为空指针*/p=(pol*)malloc(sizeof(pol);*p=*p2; /*将p2的成员值赋给p*/t->next=p; t=p; p2=p2->next; /*p2移向下一个节点*/i+; /*统计多项式的项数*/(*p_polhead)->zhishu=i; /*将多项式的项数保存在链表的头指针的指数成员值中*/t->next=NULL; /*确定链尾指针为空*/v
31、oid Decpol(p_pol *p_polhead,p_pol polhead1,p_pol polhead2)int i=0,e1,e2;float dif;p_pol p1,p2,p,t;p1=polhead1->next;p2=polhead2->next;*p_polhead=(pol*)malloc(sizeof(pol);p=t=*p_polhead; while(p1&&p2) /*判断p1与p2均为非空指针*/e1=p1->zhishu;e2=p2->zhishu;if(e1>e2) p=(pol*)malloc(sizeof(pol);t->next=p; t=p; *p=*p1; /*将p1的成员值赋给p*/p1=p1->next; /*p1移向下一个节点*/i+; /*统计多项式的项数*/else if(e1=e2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年陪诊师成长路径试题及答案
- 持续更新监理工程师试题及答案
- 物流与采购的协同效应试题及答案
- 基于数据的人事决策方法研究试题及答案
- 2024年监理工程师高效学习路径试题及答案
- 2024年银行从业资格考试考试试题及答案
- 2024年陪诊师行业变化与试题及答案
- 【初中科学】建构原子模型第1课时教案-2024-2025学年浙教版七年级下册科学
- 注册会计师考试绩效评估相关试题及答案
- 七年级英语上册 Unit 6 Do you like bananas SectionA (1a-2d)教学实录(新版)人教新目标版
- 幼儿园教学课件《半条棉被》课件
- 前庭阵发症VP讲稿
- DB37T 5157-2020 住宅工程质量常见问题防控技术标准
- 新石器时代考古课件
- 中俄技术创新合作的必要性和领域选择
- 连续梁挂篮施工控制要点(共130页)
- DB3501_T 001-2021工业(产业)园区绿色低碳建设导则(高清版)
- 邮差先生详细解析(小说复习用).ppt课件
- 螺杆设计说明书
- 常用螺电批扭力选用对照表
- run@rate表格实例
评论
0/150
提交评论