C++ 数据结构 课程设计报告 计算表达式_c计算器课程设计报告

其他范文 时间:2020-02-27 12:44:35 收藏本文下载本文
【www.daodoc.com - 其他范文】

C++ 数据结构 课程设计报告 计算表达式由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c计算器课程设计报告”。

题目:计算表达式的值

1、问题描述

对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值。

基本要求:从键盘输入一个正确的中缀表达式,将中缀表达式转换为对应的后缀表达式,计算后缀表达式的值。

提高要求:(1)对于表达式中的简单错误,能够给出提示;

(2)不仅提示错误,也能给出错误信息(3)表达式中可以包括单个字母表示的变量(4)能够处理多种操作符(5)实现包含简单运算的计算器

(6)实现一个包含简单运算和函数运算的计算器。

2.需求分析

软件的基本功能:由键盘输入中缀表达式,程序可以将输入的中缀表达式转换成对应的后缀表达式,并计算后缀表达式的值。对于在输入时发生的简单错误,程序可以给出提示。本程序支持整数、小数、多种操作数的处理,可以计算含加、减、乘、除、运算符的表达式,并能判断表达式括号是否匹配。输入/输出形式:用户可以通过控制台,根据输入提示。输入形式:

①正确的不含字母变量的中缀表达式; ②含有简单错误的中缀表达式。

输出形式:

①对于正确的中缀表达式,可以输出其转化后的后缀表达式及表达式的计算结果;

②对于含有简单错误的中缀表达式,程序将自动输出错误提示,并给出错误信息。

测试数据要求:用户可以输入一个符合要求的中缀表达式,也可以输入一个包含简单错误的表达式。表达式中可以包括各种类型的常数以及小数等,操作符包括(+、-、*、/),同时表达式还可以包括各种括号。

3.概要设计

(1)抽象数据类型:

根据题目的要求,考虑用栈类型比较适合。ADT SeqStack Data 栈中元素具有相同类型及后进先出特性,相邻元素具有前驱和后继关系 Operation SeqStack 前置条件:栈不存在 输入:无

功能:栈的初始化

输出:无

后置条件:构造一个空栈 ~ SeqStack 前置条件:栈已存在输入:无

功能:销毁栈 输出:无

后置条件:释放栈所占用的存储空间

Push 前置条件:栈已存在 输入:元素值x 功能:在栈顶插入一个元素x 输出:如果插入不成功,抛出异常

后置条件:如果插入成功,栈顶增加了一个元素 Pop 前置条件:栈已存在输入:无

功能:删除栈顶元素

输出:如果删除成功,返回被删元素值,否则,抛出异常

后置条件:如果删除成功,栈顶减少了一个元素 GetTop 前置条件:栈已存在 输入:无

功能:读取当前的栈顶元素

输出:若栈不空,返回当前的栈顶元素值 后置条件:栈不变

Empty 前置条件:栈已存在输入:无

功能:判断栈是否为空

输出:如果栈为空,返回1;否则,返回0 后置条件:栈不变

End ADT 4.详细设计

(1)实现概要设计的数据类型:

采用顺序栈

const int StackSize = 50;template //定义模板类SeqStack cla SeqStack { public: SeqStack();//构造函数,栈的初始化

~SeqStack();//析构函数

void Push(T x);//将元素x入栈

DataType Pop();

//将栈顶元素弹出

DataType GetTop();//取栈顶元素(并不删除)

int Empty();//判断栈是否为空

private:

DataType data[StackSize];//存放栈元素的数组

int top;//栈顶元素 };(2)主程序以及其它模块的算法描述:

这个函数主要调用了实现功能的各个函数。其步骤为:在用户没有选择退出时,先调用输入函数,输入中缀表达式;然后调用判断表达式,如果中缀表达式错误,则根据返回的值来输出错误提示,不再往下运算;如果中缀表达式正确,则将中缀表达式转换为后缀表达式,然后输出中缀表达式和转换后的后缀表达式;接着,再调用计算函数,计算后缀表达式的结果输出。最后是清屏函数。直至用户选择退出。

5、编码与调试分析

编码与调试过程中遇到的问题及解决办法:

【问题1】程序在判断表达式输入形式有误时,考虑情况不周全。解决办法:尽可能多的将表达式有误的情况考虑在内。以下为现已考虑到并解决的问题:①表达式中出现非数字或非运算符的其他字符; ②表达式中括号不匹配。

【问题2】给变量赋值时出现重定义问题。

解决办法:在定义暂存栈顶元素的变量t时,应该在函数外面定义,在函数里面给变量赋值时不能定义。【问题3】无法处理多位数和小数。

解决办法:在连续的操作数结束之后插入空格到后缀表达式中,以分隔操作数。

解决此问题的核心代码: int i,t=0;float sum=0;for(i=0;i

if(a[i]=='.'){

}

} t=i;break;if(t!=0){

} else {

} return sum;

2.待解决问题: for(i=0;i

} i++;for(;i

} sum=(a[i]-'0')*pow(0.1,i-t)+sum;if(a[i]=='.')break;sum=(a[i]-'0')*pow(10,n-(n-t)-1-i)+sum;for(i=0;i

6、使用说明

进入菜单,根据提示进行选择。

7、测试结果

(1)含小数、多位数及括号的表达式显示结果:

8、自学知识

在课程设计过程中,特别是在代码编写和调试的过程中,自学了很多新的知识。例如atof()函数,包含于表头文件 #include。其功能是: 把字符串转换成浮点数。具体的函数说明是: atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('')才结束转换,并将结果返回。参数字符串可包含正负号、小数点或E(e)来表示指数部分。返回值是转换后的浮点型数。

自学MFC。还有一个知识点是清屏函数,它也是包含于头文件中的,使用形式为system(“CLS”)。主要功能就是清空屏幕。

9、课程设计心得体会

通过这次课程设计,增强了我的自信心。因为在这次课程设计中,我遇到了一些问题,但是都逐个得解决了,虽然有些问题请教了同学,但是从中学了很多东西,也学到了一些处理问题的方法。在能力上得到了一些提升。同时也养成了独立思考问题,以及和同学一起探索问题的良好习惯。当然,在课程设计过程中,有些细节的处理还是不够完美,需要完善的地方还有很多,还需要继续努力,尽量将程序完善。

在编写程序过程中,得到了部分同学的帮助,如:数据间的分隔问题,得到了***同学的帮助,将中缀表达式转换为后缀表达式的算法思想参考了《数据结构课程设计》(机械工业出版社),然后根据自己的理解,完成基本算法和细节处理,最后完成了转换函数的代码编写。

在将字符串转换为浮点型数字进行运算的思想主要参考了《程序设计引导及在线实践》这本书里面的一道程序,然后加以灵活运用,转换为自己的代码。当然,为此也掌握了一些新的知识。

清屏函数是在百度百科上获取的知识,也属于自学的新知识。

参考书 [1]《c++面向对象程序设计》 清华大学出版社 谭浩强著 [2]《数据结构(C++版)》清华大学出版社 王红梅、胡明、王涛著

下载C++ 数据结构 课程设计报告 计算表达式word格式文档
下载C++ 数据结构 课程设计报告 计算表达式.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文