C++实现计算器

一.实验目的(Objects)

1.掌握栈的运算及应用;

2.了解算法的健壮性;

二.实验内容(Contents)

1.实现计算器类中 lp、rp和 operate函数;

2.完善计算器类 evaluate函数,增加对输入的合法性检查,包括滤掉所有非法输入及处理左 右括号不配对的输入;

3.编制应用程序测试这个计算器;

4.用如下表达式进行测试:

(56-23)/8-4# 期望结果:0.125 
34+p(u89-12.3)k/3# 期望结果:59.5667 
89.5*749+25)# 期望结果:输入有误 
(8*(7-4)# 期望结果:输入有误 
65*(72+98)(70-45)# 期望结果:输入有误 
6*# 期望结果:输入有误 
)5+3(# 期望结果:输入有误

5.验证计算结果。

三.实验步骤(Yourstepsorcodes)

1st.整体设计(Overalldesign)

本次实验整体设计是由两个类(class)作为主要框架。一个是 Stack类;一个是 Calculator类。其中, 对 Stack类使用了泛型(Generic)。 其整体设计如下:

/********************************************栈的构建*********************************************/ 
template<typenameT> 
classStack{
   //栈模板类的创建与其数据变量 
private:
	T* n;//栈中存储数据的数组; 
	Stac_Int Nlen;//栈当前长度; 
	Stac_Int capacity;//栈的最长长度; 
	Stac_Int top_;//存储当前栈顶元素的下标; 
public:
	Stack();//构造函数 
	~Stack();//析构函数 
	void push(Tx);//栈的 push函数,向栈顶添加元素 
	T top();//栈的 top函数,返回栈顶元素 
	bool isEmpty();//栈的为空判断 
	bool isFull();//栈的为满判断 
	Stac_Int backNlen();//返回栈的长度 
	void pop();//栈的 pop函数,弹出栈顶元素 
	void to_empty();//清空栈 
	};
	//****************************************计算器类的构建*******************************************// 
classCalculator{
    
private:
	Stack<char> optr;//运算符栈; 
	Stack<double> opnd;//运算数栈; 
	char* at;//计算器类的运算式字符串的头指针; 
	int n; 
	int lp(chara);//返回字符栈头部字符的优先级命令; 
	int rp(chara);//返回录入读取字符的优先级命令; 
	double char_to_double(char*a,intn);
	//该函数进行字符串的小数转换成 double类型的小数(但只对有一个点 的小数有作用) 
	double operate_double(chara,doublex1,doublex2);//该函数计算两数的四则运算 
public:
	Calculator();//无参构造函数; 
	Calculator(char*a,intnn);//含参构造函数; 
	~Calculator();//析构函数; 
	void operate();对输入的一串算术字符串式的处理(核心处理函数); 
	bool rr(chara)const;//辅助函数; 
	bool evaluate()const;//判断输入的一串算术字符串是否合法; 
	double result();//返回运算结果; 
	};

有关于 Stack类和 Calculator类的核心函数定义,我会在算法框架那一栏里详细说明。

2nd.算法框架(Algorithm Framework)

1. 关于 Stack类核心函数的算法框架:

核心函数为:

void push(T x);//栈的 push函数,向栈顶添加元素 
T top();//栈的 top函数,返回栈顶元素 
void pop();//栈的 pop函数,弹出栈顶元素 
void to_empty();//清空栈
1>.关于 push函数:
//栈的 push函数,向栈顶添加元素 
template<typename T> 
void Stack<T>::push(T x)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值