C、C++语言实现的数据结构课程设计的计算器(堆栈)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

// 我真诚地保证:

// 我自己独立地完成了整个程序从分析、设计到编码的所有工作。

// 如果在上述过程中,我遇到了什么困难而求教于人,那么,我将在程序实习报告中// 详细地列举我所遇到的问题,以及别人给我的提示。

// 我的程序里中凡是引用到其他程序或文档之处,

// 例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段,

// 我都已经在程序的注释里很清楚地注明了引用的出处。

// 我从未没抄袭过别人的程序,也没有盗用别人的程序,

// 不管是修改式的抄袭还是原封不动的抄袭。

// 我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转。

// <李雷阳>

*/

/********************************************************************

用堆栈做的计算器程序 *

创建者:李雷阳*

创建时间:2011.03.12 *

最后修改时间:2011.03.15 *

/********************************************************************

/********************************************************************

本程序功能:实现用堆栈处理计算表达式

具体内容:

I: 如果算式里面有计算式不应该出现的字符,则将其智能略去

如:将(1.4a54+2f.6)*3.09s+4ff看成(1.454+2.6)*3.09+4

II: 检查括号是否匹配,如果匹配,再检查是否出现在合法位置

如:(8*(7-4)不匹配,以及65*(72+98)(70-45)匹配但是不合法

III: 检查计算数与计算符号的数量是否合格

如:+23-4* 、23-4*、+23-4 等等

IV: 检查输入小数的时候小数点是否输入过多以及智能改正

如:将3....2*10+8 看成3.2*10+8

V: 检查连续输入大于两个符号时候是否能智能修改,“不能”

则-> 对于3+-2 给出判断结果:输入有误

VI: 接V:如果判断能够改正,则------------------------------->

将4++++++++++++5看成4+5并计算

VII:检测“0”是否出现在分母上

【下边是检测数据,检测结果与期望结果吻合】

【注:输入数据结尾没有“#”,以为在我的程序里面要它没用】

()*2+3# 期望结果:输入有误

(3+3)*3+1*(1+3)-3/2+3*3# 期望结果:29.5

1+2*(4-5)+45# 期望结果:44.000000

(1.454+2.6)*3.09+4# 期望结果:16.5269

(1.4a54+2f.6)*3.09s+4ff# 期望结果:16.5269

(56-23)/8-4# 期望结果:0.125

34+p(u89-12.3)k/3# 期望结果:59.5667

89.5*749+25)# 期望结果:输入有误

89.5*749+25# 期望结果:67060.500000

(8*(7-4)# 期望结果:输入有误

65*(72+98)(70-45) # 期望结果:输入有误

6*# 期望结果:输入有误

)5+3(# 期望结果:输入有误

(3+)(4)# 期望结果:输入有误

3....2*10+8# 期望结果:40

+23-4*# 期

望结果:输入有误

23-4*# 期望结果:输入有误

+23-4# 期望结果:输入有误

3+-2# 期望结果:输入有误

4+++++++++++++++5# 期望结果:9

********************************************************************/

/******************************************************************** * 程序中所用到的头文件 *

********************************************************************/

#include<iostream>

#include<cstring>

using namespace std;

/********************************************************************

* 宏定义*

********************************************************************/

#define MAX_LENGHT 50

//预先假设计算字符串最多有500个字符

#define MAX 10

//一般情况下输入要计算的数不会超过10位

/********************************************************************

* 自定义函数*

********************************************************************/

bool isOperand(char ch);

//检查是否为操作数

int priority( char op);

//设置操作等级并返回操作符op的等级

template <class Stack_type>

//用计算符号op计算数字number_1 和 number_2

Stack_type caculate( char op, const Stack_type number_1, const Stack_type number_2 );

char *mark(char string[]);

//将符号和数字放在同一个堆栈里面时,两个数字可能会连在一起,导致无法区分

//哪个是第一个数哪个是第二个数,这里我用了小方法,就是在每个数字后边加个

//字母a来将两个连着的数字区分开

char *parsing(char A_string[]);

//将将传入的中缀计算字符串A_string转化成后缀计算字符串并返回一个指针

float result(char A_string[]);

//计算用函数“char *parsing(char A_string[]);”转化过的后缀计算字符串的值

相关文档
最新文档