您好,欢迎访问三七文档
第二次专题报告-简易计算器(栈)2014年4月17日专题报告——简易计算器(栈)一、问题描述:通过模拟一个简单的计算器来进行+、-、*、/、%、^(乘方)等运算,从键盘上输入一算术表达式(一般为中缀表达式),计算并输出表达式的值。二、设计要求:编写程序,要求可对一实数算术表达式进行简单的数学运算。可以识别带加减乘除等运算符及括号的中缀表达式。a.按照四则运算规则,求表达式的值。一般规则如下:1)先括号内,再括号外。2)先乘方,再乘除,后加减。b.同级运算从左到右顺序执行。c.如表达式有误,应给出相应的提示信息。三、数据结构:解决表达式求值问题,用到堆栈。建立两个堆栈,一个是操作符栈,用来存放加减乘除等运算符;另一个是操作数栈,用来存放操作数或是运算的中间结果。对于输入进来的一串算式,将其数字与运算符分开来处理,分别存储在两个堆栈中,不仅有利于调用操作符栈中的操作符,并比较他们的优先级,也有利于将操作数栈中的数字调用出来,并进行相应的加减乘除运算,以及存储运算过程中的中间结果。四、设计与实现:(源代码另附)对于输入的一串合法的算术表达式,按字符串存储的方式,按位进行操作,将操作符与操作数分开而存入两个不同的堆栈中,即先将操作数栈与操作符栈清空,并对操作符栈进行初始化,即栈底操作符为“1”,接着,进行输入,若输入的是操作数,那么直接压入操作数栈,若输入的是操作符,那么将其与当前操作符栈的栈顶元素按照优先级高低的原则进行比较,若输入的操作符优先级高,那么将其压入操作符栈,反之即输入的操作符优先级低,那么将操作数栈中的栈顶元素与栈顶下的元素依次弹出,并按照操作符栈中栈顶元素的运算规则来运算,把运算出来的中间结果压回到操作数栈中去,按照上述步骤不停进行,直至将一整串的算术表达式全部输入并进行操作而得到运算结果并输出。简易流程图五、测试与结论:测试环境:window7(64位)Cfree5.0程序主界面:图0-程序界面测试用例1算式:4.5+5+6.5*1.06预期结果:16.39图1-1测试用例1的输出结果测试用例2无输入时的非法警告进入程序后直接回车,得到错误提示;图1-2零输入下的输入非法警告测试用例3带乘方的运算算式:(1+2^3)/3+(-1*5-2)预期结果:-4图1-3带乘方运算的输出结果测试用例4带求余数的运算算式:3%4+5^2-4预期结果:24图1-4带求余运算的输出结果测试用例5乘/除/求余时的输入警告图1-5零输入下的输入非法警告六、总结与思考:针对本次简易计算器的设计要求,本算法给出的程序,具有如下的优点:1.本算法采用的是堆栈方式存储,这样的算法,在删除栈顶元素后,自动将栈顶指针置于下一个元素。一方面,不仅将操作符按照输入的顺序依次存储,也便于在存储的过程中加入了对于操作符之间的优先级进行比较;另一方面,对于操作数栈来说,保留了输入数据的顺序,而且有利于随时对栈顶操作数进行操作。2.基本满足了程序设计中要求的:按照四则运算规则,算出输入的一串算术表达式的结果,并在操作中设置了出错警告提示,有利于操作者发现输入的错误。3.本程序的主界面设计简介,便于使用者操作。同时也有值得改进的地方:1.本程序中所能处理的运算符有限,无法完成高级运算,如求对数以及三角函数,有待于改进。2.本程序中,还缺少对于括号的配对问题,即如若左括号的数量不等于右括号的数量,应提示出输入非法的警告,有待于将这一部分加入到程序中。同时也缺少非法字符检查(如1&9这样的输入可能会导致程序瘫痪,应该尽早避免);3.本算法比较多的操作函数,没有用到模板,派生等方法以使界面更加简洁。
本文标题:简易计算器专题报告
链接地址:https://www.777doc.com/doc-2173957 .html