- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
加减数字游戏
《数据结构与算法》课程设计报告
【课程设计任务】:设计程序在表达式“123456789=a”中左边适当位置插入运算符“+”或“-”,以使等式成立。例如a=100时,123+45-67+8-9=100。
一、问题分析和任务定义
1、问题分析:
本课程设计任务是对一个表达式中左边适当位置插入运算符,使之等于右边的一个数,等式左边的数据以及等式右边的数据都是通过键盘输入的,如何在适当的位置插入运算符?这是解决本课程设计任务的首要问题。根据对课程设计任务的理解,可以将等式左边的数据分为若干段(如1、23、45、678、9),然后在相邻两段之间插入合适的运算符“+”或“-”,使划分出的若干个数据段经插入的运算符进行运算之后的值与等号右边的数(a=100)相等。
2、输入输出数据的形式以及输入的范围:
根据对问题的分析,为方便数据的存储及输出,故可以将等式左边的输入采用字符数组的形式存储;而等号右边的数据,直接采用整形(int)即可,在左边的数据经过插入运算符后参与运算时,又可以通过sscanf转化为整形数进行运算,这样可以很方便的将等式的左边与右边的目标数进行比较,而输入的范围为1~9之间的数字。输出的数据为一串满足等式要求的字符串,其中包含等号左边的所有信息(数字、运算符以及等号),因此,需要采用整型数组和字符数组相结合来进行存储。
3、算法所能实现的功能概述:
等式左边和右边的数据都可以由用户来进行指定,若找到左边的数据插入运算符后等于右边,则输出数据的形式是的所有满足上述要求的等式;若未找到,则输出为找到的信息。所以本程序的功能还是比较强的。
4、测试数据:
根据课程设计的思想,测试的数据选择要有针对性和代表性,故设计的测试数据如下:
①、开始‘Y/y’,退出‘N/n’;
②、左边=123456789、右边=100,查看测试结果;
③、左边=123、右边=-2,查看测试结果;
④、左边=123、右边=123,查看测试结果;
⑤、左边=999999999、右边=10000000000,查看对大数的处理情况;
⑥、左边=123a456789、右边=100,查看对错误数据的处理情况;
二、概要设计和数据结构的选择
1、本课程设计所涉及的数据结构分析:
本程序中采用的数组的形式来存储数据,其中等式左边的数据(包括数字和运算符)都是通过char型的数组进行存放的,在计算机中是线性的存储结构,在数据的运算方面,需要对该数组进行插入、删除和更新等运算。
2、算法描述:
首先,提示用户如何操作本程序。(输出本程序的功能及输入数据的方法);
其次,由用户指定等式两边的数;
最后,计算所求等式,通过调用判断函数judge(),检查输入的数据是否合法;然后循环计算所有组合,继而调用函数temp()过滤数组并计算,在temp()函数中又调用函数putout();计算当前等式左边的值,并将左边计算的结果与等式右边的a进行比较,若找到左边的数据插入运算符后等于右边,则输出数据的形式是的所有满足上述要求的等式;若为找到,则输出为找到的信息。
值得注意的是,为了方便的将等式的左边与右边的目标数进行比较,左边的数据经过插入运算符后参与运算时可以通过sscanf转化为整形数进行运算。
3、程序所涉及的数据类型说明:
int right=0; /*设置right为等号右边的数,初始为零*/
int flag=0; /*控制结果表示*/
char enter[20]; /*存放输入的等式左边的数*/
short enterl=0; /*存放输入的等式左边数的长度*/
int k,q=1,p1,p2; /*k插入符号的空位数,q组合次数,p1、p2所有的符号组合*/
int operl; /*运算符号的长度*/
int numl; /*运算数的长度*/
int i=0; /*循环控制变量*/
int ysf=0; /*ysf为运算符总数*/
char* left=new char[numl+opn];/*新建的数组(长度等于数与符号的长之和)*/
4、模块及模块之间的调用关系:
4.1、主函数main (){
调用输入函数putin ();
调用计算函数calculate();
}
4.2、输入函数putin (){
输入等式左边的数保存在字符数组enter[]中;
输入等式右边的数保存在整型数据right中;
}
4.3、计算函数calculate (){
调用判断函数judge ();
新建数组p存放运算符;
循环(次数为所有可能的插入情况){
循环{
为运算符数组附值;
调用过滤数组并计算函数temp();
}
}
}
4.4、 判断函数judge (){
判断输入是否为数字;
返回数字长度;
}
4.5
文档评论(0)