西安文理学院软件学院课程设计报告设计名称:数据结构课程设计设计题目:123456789中插入+-号学生学号:1402120101专业班级:12级1班学生姓名:曹宝学生成绩:指导教师(职称):韩利凯(教授)课题工作时间:2014.6.16至2014.6.27软件学院课程设计任务书学生姓名曹宝学号1402120101专业班级12级1班设计题目在表达式123456789中插入适当的+、-使算式等于100内容概要:设计所用软件及运行环境:VisualC++6.0,开发软件“C与C++程序设计学习与实验系统2010.3”,采用关键技术为递归调用方法。设计的基本功能是在表达式“123456789=100”中左边的适当位置插入运算符“+”或“-”,以使等式成立。如123+45-67+8-9=100。文献资料:[1]陈维兴,林小茶.C++面向对象程序设计教程(第三版)[M]清华大学出版社,2009.6[2]韩利凯,李军.数据结构浙江大学出版社[M]2013.8[3]C++PrimerPlus(第六版)中文版人民邮电出版社[M]2012.1设计要求:设计的基本功能要求是在表达式“123456789=100”中的左边的适当位置插入运算符“+”或“-”,以使等式成立。例如123+45-67+8-9=100.工作期限:设计工作自2014年6月16日至2014年6月27日止。指导教师:院长:日期:2014年6月16日软件学院课程设计进度安排表学生姓名:曹宝学号:1402120101专业:软件工程班级:12级1班起止日期内容备注6月16日~6月17日下任务书;收集、阅读、整理相关参考文献,并进行归纳和概括总结,完成项目/任务背景介绍部分文字内容。6月18日~11月20日系统功能设计和模块设计、系统体系结构构建。6月21日~6月24日各功能模块编码实现,系统各功能模块调试与维护。6月25日~6月26日系统功能集成、系统调试与测试,按照模板要求撰写课程设计/项目设计报告。6月27日课程设计/项目设计分组答辩,提交课程设计/项目设计报告以及相关文档,进行成绩评定。指导教师签名:2014年6月16日成绩评定表学生姓名:曹宝学号:1402120101专业:软件工程班级:12级1班类别合计分值各项分值评分标准实际得分合计得分平时表现1010按时参加设计指导,无违反纪律情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。10能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。报告质量3510报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合规范要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。5参考文献数量在2篇以上,格式符合要求,在正文中正确引用。答辩情况2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩:分指导教师:(签字)日期:2014年6月27日摘要摘要:该程序主要依据是通过递归算法用计算机来实现快速计算,然后再结合字符串知识,反复思考最终得出结论。方法是通过画流程图来不断完善算法,然后通过伪代码来表示算法,最后用C++语言来实现,循环来实现对程序的控制,通过递归,来检测每个数是否等于100,如果等于100则输出。通过不断地修改代码和调试最终能达到设计的要求。在DOS窗口中输出171组数据。关键词:递归;数值与字符转换西安文理学院计算机科学系课程设计报告-I-目录第一章课题背景(或绪论、概述)..........................................21.1课题背景..........................................................21.1.1课题背景知识................................................21.2课题目的与意义....................................................21.2.1课题的目的..................................................21.2.2课题意义....................................................2第二章设计简介及设计方案论述............................................32.1设计简介..........................................................32.1.1设计思想....................................................32.1.2输出方法....................................................32.2设计方案..........................................................32.2.1设计原理....................................................32.3设计代码..........................................................3第三章详细设计..........................................................53.1程序结构分析......................................................53.1.1图示........................................................53.1.2程序模块设计................................................5第四章设计结果及分析....................................................74.1程序运行结果......................................................74.1.1截图........................................................74.2运行结果分析..................................................8总结......................................................................9文献资料................................................................10西安文理学院软件学院课程设计报告-2-第一章课题背景(或绪论、概述)1.1课题背景1.1.1课题背景知识在软件业快速发展的今天,各种各样的编程技巧与优秀的题目涌现出来,来激发学生的编程兴趣与学习能力。在123456789中插入+、-,这个题目让人很感兴趣。1.2课题目的与意义1.2.1课题的目的课题的目的是让学生深入的理解编程,加强对数据结构知识的运用与理解,熟练运用学习过的知识。本程序要利用递归。递归出口即满足表达式的运算结果为100并且完成了一遍从1到9的过程,满足条件则输出结果,并且记录满足的记录个数。否则,对三种可能情况写对应的三个递归函数,一直到满足条件为止。1.2.2课题意义良好的算法可以让你事半功倍,提高解决问题的效率。同时能加强对编程的兴趣。西安文理学院软件学院课程设计报告-3-第二章设计简介及设计方案论述2.1设计简介2.1.1设计思想123456789中间有8个“空”,每个“空”有“+”“-”“空格”三种选择,故一共有3^8种可能。又需要所得到的表达式满足结果为100,即类似于有约束条件的进行深度优先遍历。2.1.2输出方法输出表达式时应作为字符串输出,方便得到结果,因此应该定义一个函数实现把int变量转化为string型。(用string类是为了便于表达,即可直接用cout,+等。2.2设计方案2.2.1设计原理要利用递归。递归出口即满足表达式的运算结果为100并且完成了一遍从1到9的过程,满足条件则输出结果,并且记录满足的记录个数。否则,对三种可能情况写对应的三个递归函数,一直到满足条件为止。2.3设计代码#includeiostream#includestringusingnamespacestd;inttotal=1;voidprint(stringstr){couttotal++:;inti=0,length=str.length();while(ilength&&str[i]!='1')i++;for(;ilength;i++)coutstr[i];cout=100endl;}stringnumberTOstring(intn){if(n==0)return0;stringstr=;西安文理学院软件学院课程设计报告-4-intN=1000000000;while(n/N==0)N=N/10;while(n0){str+=char('0'+n/N);n=n%N;N=N/10;}returnstr;}voidrecurrence(intcur,intpre,stringstr,intresult){if(result==100&&cur10)print(str);elseif(cur10)return;else{recurrence(cur+1,pre*10+cur,str,result);recurrence(cur+1,cur,str+++numberTOstring(),result+pre);recurrence(cur+1,cur,str+-+numberTOstring(pre),result-pre);}}main(){recurrence(0,0,,0);return0;}程序代码比较简短,主要是算法的精简,同时对代码进行优化。西安文理学院软件学院课程设计报告-5-第三章详细设计3.1程序结构分析3.1.1图示1)程序流程图如下3-13-1函数流程图3.1.2程序模块设计1)recurrence函数的功能是通过递归调用,直到满足条件才输出。voidrecurrence(intcur,intpre,stringstr,intresult){if(result==100&&cur10)//搜索到最后一个数是9print(str);//符合条件输出的表达式elseif(cur10)return;else{voidprint(stringstr)numberTOstring(intn)recurrence(intcur,intpre,stringstr,intresult)Main()西安文理学院软件学院课程设计报告-6-recurrence(cur+1,pre*10+cur,str,result);//与前一个数合并recurrence(cur+1,cur,str+++numberTOstring(pre),result+pre);//与前一个数做加法,str+++numberTOstring(pre)表示表达式。recurrence(cur+1,cur,str+-+numberTOstring(pre),result-pre);//与前一个数做减法,同上。}}2)numberTOstring函数的功