欢迎来到天天文库
浏览记录
ID:37909867
大小:97.00 KB
页数:7页
时间:2019-06-02
《C++数据结构课程设计报告计算表达式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、题目:计算表达式的值1、问题描述对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值。基本要求:从键盘输入一个正确的中缀表达式,将中缀表达式转换为对应的后缀表达式,计算后缀表达式的值。提高要求:(1)对于表达式中的简单错误,能够给出提示;(2)不仅提示错误,也能给出错误信息(3)表达式中可以包括单个字母表示的变量(4)能够处理多种操作符(5)实现包含简单运算的计算器(6)实现一个包含简单运算和函数运算的计算器。2.需求分析软件的基本功能:由键盘输入中缀表达式,程序可以将输入的中缀表达式转换成对应的后缀表达式
2、,并计算后缀表达式的值。对于在输入时发生的简单错误,程序可以给出提示。本程序支持整数、小数、多种操作数的处理,可以计算含加、减、乘、除、运算符的表达式,并能判断表达式括号是否匹配。输入/输出形式:用户可以通过控制台,根据输入提示。输入形式:①正确的不含字母变量的中缀表达式;②含有简单错误的中缀表达式。输出形式:①对于正确的中缀表达式,可以输出其转化后的后缀表达式及表达式的计算结果;②对于含有简单错误的中缀表达式,程序将自动输出错误提示,并给出错误信息。测试数据要求:用户可以输入一个符合要求的中缀表达式,也可以输入一个包含简单错误的表达式。表达式中可以包括各种类型的常数以及
3、小数等,操作符包括(+、-、*、/),同时表达式还可以包括各种括号。73.概要设计(1)抽象数据类型:根据题目的要求,考虑用栈类型比较适合。ADTSeqStackData栈中元素具有相同类型及后进先出特性,相邻元素具有前驱和后继关系OperationSeqStack前置条件:栈不存在输入:无功能:栈的初始化输出:无后置条件:构造一个空栈~SeqStack前置条件:栈已存在输入:无功能:销毁栈输出:无后置条件:释放栈所占用的存储空间Push前置条件:栈已存在输入:元素值x功能:在栈顶插入一个元素x输出:如果插入不成功,抛出异常后置条件:如果插入成功,栈顶增加了一个元素Pop
4、前置条件:栈已存在输入:无功能:删除栈顶元素7输出:如果删除成功,返回被删元素值,否则,抛出异常后置条件:如果删除成功,栈顶减少了一个元素GetTop前置条件:栈已存在输入:无功能:读取当前的栈顶元素输出:若栈不空,返回当前的栈顶元素值后置条件:栈不变Empty前置条件:栈已存在输入:无功能:判断栈是否为空输出:如果栈为空,返回1;否则,返回0后置条件:栈不变EndADT4.详细设计(1)实现概要设计的数据类型:采用顺序栈constintStackSize=50;template//定义模板类SeqStackclassSeqStack{pub
5、lic:SeqStack();//构造函数,栈的初始化~SeqStack();//析构函数voidPush(Tx);//将元素x入栈DataTypePop();//将栈顶元素弹出DataTypeGetTop();//取栈顶元素(并不删除)intEmpty();//判断栈是否为空7private:DataTypedata[StackSize];//存放栈元素的数组inttop;//栈顶元素};(2)主程序以及其它模块的算法描述:这个函数主要调用了实现功能的各个函数。其步骤为:在用户没有选择退出时,先调用输入函数,输入中缀表达式;然后调用判断表达式,如果中缀表达式错误,则根据
6、返回的值来输出错误提示,不再往下运算;如果中缀表达式正确,则将中缀表达式转换为后缀表达式,然后输出中缀表达式和转换后的后缀表达式;接着,再调用计算函数,计算后缀表达式的结果输出。最后是清屏函数。直至用户选择退出。5、编码与调试分析编码与调试过程中遇到的问题及解决办法:【问题1】程序在判断表达式输入形式有误时,考虑情况不周全。解决办法:尽可能多的将表达式有误的情况考虑在内。以下为现已考虑到并解决的问题:①表达式中出现非数字或非运算符的其他字符;②表达式中括号不匹配。【问题2】给变量赋值时出现重定义问题。解决办法:在定义暂存栈顶元素的变量t时,应该在函数外面定义,在函数里面给
7、变量赋值时不能定义。【问题3】无法处理多位数和小数。解决办法:在连续的操作数结束之后插入空格到后缀表达式中,以分隔操作数。解决此问题的核心代码:inti,t=0;floatsum=0;for(i=0;i
此文档下载收益归作者所有