一元多项式简单的计算器_第1页
一元多项式简单的计算器_第2页
一元多项式简单的计算器_第3页
一元多项式简单的计算器_第4页
一元多项式简单的计算器_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

目录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 能够对已创建的多项式进行显示;3 能够对已创建的多项式之间的加法运算;4 能够对已创建的多项式之间的减法运算;5 能够对已创建的多项式进行删除;6 能够实现计算器退出操作;2.1 功能分析说明图2.2 各项功能说明要求对分别上面的每个功能模块进行详细的文字说明主函数模块 main() 建立一个可供选择的菜单,通过 switch 语句,选择 1 则是去建立多项式,选择 2 则是去显示出多项式,选择 3 则是去进行两个多项式的相加,选择 4 则是进行两个多项式的相减,选择 5 则是去进行多项式的删除,选择 6 则是退出菜单。多项式的建立模块 Creatpol() 建立一个链表,头指针均用结构体指针数组中的元素表示,一元多项式简单的计算器多项式的建立 多项式的显示 多项式的相减多项式的相加 退出菜单多项式的删除且头指针所指的结构体的指数是表示该链表表示的多项式的项数,而后以指数递减的次序依次输入各项,链表中的第二个节点表示的是多项式中的第一项,依次类推,不断把多项式各项的指数,系数的值输入链表的节点中,并使链尾指针为空。多项式的输出模块 Outp_pol() 首先用一个指针指向需要输出的多项式对应的链表的头指针,头指针的指数成员表示项数,接着通过链表依次输出各项,从第二项开始,系数不小于的项与系数小于 0 的项输出是不一样的,判断后依次输出。多项式的相加模块 Addpol() 需要用到两个指针指向相加的两个多项式,用一个链表表示两个多项式相加后形成的新的多项式,首先确定两指针是否已到达链尾来作为循环条件,其次以两指针所指的节点的结构体的指数成员值的大小比较分成三种情况进行计算,指数偏大者指针向下一个移动,指数相同的两者系数相加,直到两者都到达链尾,从而伴随着新链表的形成,及相加后新的多项式的形成。多项式的相减模块 Decpol() 需要用到两个指针指向相减的两个多项式,用一个链表表示两个多项式相减后形成的新的多项式,首先确定两指针是否已到达链尾来作为循环条件,其次以两指针所指的节点的结构体的指数成员值的大小比较分成三种情况进行计算,指数偏大者指针向下一个移动,指数相同的两者系数相减,直到两者都到达链尾,从而伴随着新链表的形成,及相减后新的多项式的形成。多项式的删除模块 Delpol() 用一个指针指向要删除的多项式,运用 free()函数,依次删除该链表的各个节点。3.软件设计详细内容3.1 采用的主要数据结构类型#include /标准输入、输出头文件#include /包含动态存储与释放函数头文件结构体:struct ponode float xishu; /系数int zhishu; /指数struct ponode *next; /自引用结构*polhead; /定义指针p_pol polhead26=0; / 定义结构体指针数组char menu,name,name1,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()Outp_pol()Addpol()Decpol()Delpol()tuichu=1breakbreakbreakbreakbreakbreakNYNNNNNNYYYYYYprintf(“再次选择”)Y2)Creatpol()函数流程图:p_pol p,t;int i;*p_polhead=(pol*)malloc(sizeof(pol)(*p_polhead)-zhishu=nt=*p_polheadprintf(“ ”)inext=pt=pi+t-next=NULLreturn 1YN3)Outp_pol()函数流程图:int i=0; p_pol p;p=p_polhead-nextprintf(“”)printf(“%f*x%d“,)izhishui=0 printf(“%f*x%d“,)p-xishu=0 printf(“+%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=p2-nextp2=p2-nextp1=0i+p1=p1-nexti+p2=0i+p2=p2-nextt-next=NULL (*p_polhead)-zhishu=iYYYYY YNNNNNN5) Decpol()函数流程图:p1=polhead1-nextp2=polhead2-next*p_polhead=(pol*)malloc(sizeof(pol)p=t=*p_polheadp1 p2=p2-nextp2=p2-nextp1=0i+p1=p1-nexti+p2=0i+p2=p2-nextt-next=NULL (*p_polhead)-zhishu=iYYYYY YNNNNNN6) Delpol()函数流程图:p_pol p,tp=t=*p_polheadp-next=0p=p-nextfree(t)t=pNY4.软件测试4.1 软件测试用例打开软件,进入系统主界面:多项式创建功能测试:选择指令 1,进入建立多项式的模块,先创建多项式 a:再次选择指令 1,创建多项式 b:多项式输出功能测试选择指令 2,进入多项式输出的模块,先输出多项式 a:再次选择指令 2,输出多项式 b:多项式相加功能测试选择指令 3,进入多项式相加的模块,并输出相加后的多项式 c:多项式相减功能测试然后选择指令 4,进入多项式相减的模块,并输入相减后的多项式 d:多项式删除功能测试接着选择指令 5,进入多项式删除的模块,删除多项式 d,及释放多项式 d 对应的链表所占用的内存:多项式删除功能测试最后选择指令 6,退出菜单:所有测试完毕,功能全部正常。4.2 软件测试报告将 4.1 测试过程中能完成的功能和不能完成的功能以及不能完全完成的功能进行列表分析,指出测试结果和出错原因,例如:标号 项目 预期结果 实际结果 出错原因 出错次数01 主函数菜单 美观的菜单 得到美观的菜单无 无02 多项式的创建 正确输入数据完成 无 无03 多项式的显示 正确显示数据完成 无 无04 多项式的相加 正确处理数据完成 无 无05 多项式的相减 正确处理数据完成 无 无06 多项式的删除 正确删除数据完成 无 无5.总结和致谢开始选这个程序的时候,我以为这个程序很简单,可当选完以后,自己开始着手做这个程序的时候,查阅了相关资料,发现做这个程序还要用到链表,而链表在课本上算是一个比较难的知识点,我做这个程序发了很久的时间,单单就把书上的关于链表部分的知识看懂就发了比较多的时间,而自己把整个程序做出来的时候,一上机检测,发现错误到处都是,自己于是细心地想办法一个一个去改,最后运行到没问题时,才放了一大口气。我感觉自己通过做这个实验收获的挺多的,而自己完成了这个程序也产生了一种自豪感。通过这次课程设计,我发现了自己在学习中的诸多不足,我想我会积极改正的。无论是在课堂学习,还是在课外的相关知识的拓展,我均通过这次课程设计认识到了不足,很感谢能有这样一次课程设计的机会。另外,在我自己写完程序上机检测的时候,真的是很多错误,我要感谢我的同学,他们帮我指出了不少错误。然而帮助我改正绝大部分错误的还是网络资料,因为很多莫名的错误根本看不懂,只是在网上一查才知道到底错误实质上是出在哪里了。最后还是感谢老师和许多同学,我在这次课程设计中的收获离不开他们的帮助。6.附录6.1 软件使用说明运行条件:本软件可以在 Visual C+ 里运行,其他编程软件没有测试。进入主菜单以后, 选择你要执行模块,在初次使用时,应先选择指令 1 输入两个多项式后才能使用其他模块,在输入多项式时应注意多项式的名称要用小写字母表示,而且输入多项式的项数时,要注意多项式的输入应不含同类项,且指数单调递减,创建了两个多项式后,可选择指令 2 对其进行输出,只需输入需输出的多项式即可,可输出多项式的项数,而且显示出多项式,接着可在再次选择中选择指令 3,并输入两个相加多项式的名称和和式的名称,即可输出和式的项数以及显示出相加后的多项式,接着可在再次选择中选择指令 4,并输入两个相减多项式的名称和差式的名称,即可输出差式的项数以及显示出相减后的多项式,然后选择指令 5,可以删除想要删除的多项式,以腾出更多的内存空间,当使用完之后,可以选择指令 6 来退出主菜单,6.2 源码#include#include /*头文件的包含 */#define READ(I) doI=getchar();while(I=n) /*宏定义,读取不是回车符的字符*/typedef struct ponode 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_pol 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(“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“);switch(menu) /*根据不同指令选择不同的菜单 */case 1: /*建立多项式*/printf(“ *请输入要创建的多项式的名称,用单个小写字母表示:“);READ(name); /*输入多项式的名称*/printf(“n“); printf(“ *请输入项数:“);scanf(“%d“, /*输入多项式的项数 */if(Creatpol(break;case 2: /*输出多项式*/printf(“请输入要输出的多项式的名称:“);READ(name); /*输入需输出的多项式的名称*/printf(“n“);Outp_pol(polheadname-a); /*调用多项式输出函数*/break;case 3: /*求两多项式的和*/printf(“请输入加式 1 的名称:“);READ(name1);printf(“n“);printf(“请输入加式 2 的名称:“);READ(name2);printf(“n“);printf(“请输入要创建的和式的名称:“);READ(name);printf(“n“);Addpol( /*调用多项式求和函数*/Outp_pol(polheadname-a); /*调用多项式输出函数*/break;case 4: /*求两多项式的差*/printf(“请输入被减式的名称:“);READ(name1);printf(“n“);printf(“请输入减式的名称:“);READ(name2);printf(“n“);printf(“请输入要创建的差式的名称:“);READ(name);printf(“n“);Decpol( /*调用多项式求差函数*/Outp_pol(polheadname-a); /*调用多项式输出函数*/break;case 5: /*删除多项式*/printf(“请输入要删除的多项式名称:n“);READ(name);Delpol( /*调用多项式删除函数*/ printf(“多项式%c 已删除!n“,name);break;case 6: /*退出菜单*/tuichu=1;break;j+; /*统计选择指令的次数*/int Creatpol(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;ixishu), /*输入该项的系数与指数*/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); /*链表的头指针的指数成员值代表该多项式的项数*/p=p_polhead-next;for(i=0;izhishu;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); /*系数小于零的非第一项的输出*/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(p1e2=p2-zhishu;if(e1e2) 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-xishu=sum; /*系数为 sum*/p-zhishu=e1; /*指数不变*/i+; /*统计多项式的项数*/p1=p1-next; p2=p2-next; /*p1 与 p2 均移向下一个节点*/ else if(e1next=p; t=p;*p=*p2; /*将 p2 的成员值赋给 p*/p2=p2-next; /*p2 移向下一个节点*/i+; /*统计多项式的项数*/while(p1) /*判断 p1 是否为空指针*/p=(pol*)malloc(sizeof(pol);*p=*p1; /*将 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; /*确定链尾指针为空*/void 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(p1e2=p2-zhishu;if(e1e2) p=(pol*)malloc(sizeof(pol);t-next=p; t=p; *p=*p1; /*将 p1 的成员值赋给 p*/p1=p1-next; /*p1 移向下一个节点*/i+; /*统计多项式的项数*/else if(e1=e2) dif=p1-xishu-p2-xishu; /*将两个指数相同的项的系数相减*/if(dif!=0.0) /*当其不为零时*/p=(

温馨提示

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

评论

0/150

提交评论