编写一个简易计算器的源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AStack.h
#ifndef ASTACK_HEADER
#define ASTACK_HEADER
#include
using namespace std;
template
{
private:
int size;
int top;
Elem* listArray;
public:
AStack()
{ size = 100; top = 0; listArray = new Elem[100]; }
~AStack()
{ delete [] listArray; }
void clear() { top = 0; }
bool push(Elem& item)
{
if (top == size) return false;
else { listArray[top++] = item; return true; } }
bool pop(Elem& it)
{
if (top == 0) return false;
else { it = listArray[--top]; return true; }
}
bool topValue(Elem& it) const
{
if (top == 0) return false;
else { it = listArray[top - 1]; return true; } }
int length() const { return top; }
};
#endif
Function.cpp
#include "function.h"
#include "AStack.h"
#include
#include
void calUserInfo()
{
cout<<"\t* 智能计算器V1.0*"< cout<<"\t*********************"< cout<<"\t* 1 * 2 * 3 * + * - *"< cout<<"\t* 4 * 5 * 6 * * * / *"< cout<<"\t* 7 * 8 * 9 * 0 * % *"< cout<<"\t* & * ^ * = * ( * ) *"< cout<<"\t*********************"< int isp(char& ch) { switch(ch) { case '=': return 0; break; case '+': case '-': return 3; break; case '*': case '/': case '%': return 5; case '(': return 1; break; case ')': return 8; break; case '^': case '&': return 7; break; } } int osp(char& ch) { switch(ch) { case '=': return 0; break; case '+': case '-': return 2; break; case '*': case '/': case '%': return 4; break; case '(': return 8; break; case ')': break; case '^': case '&': return 6; break; } } double extract(double x,double y) { return pow(x,1/y); } bool cal(char op, double x, double y, double& r) { int o = 0; switch(op) { case '-': r = x - y; break; case '+': r = x + y; break; case '/': r = x / y; break; case '%': (int) o = (int)x % (int)y; r = (double)o; break; case '*': r = x * y; case '&': r = extract(x,y); break; case '^': r = pow(x,y); break; } return true; } bool isDigit(char ch) { if (((int)ch >= 48) && ((int)ch <= 57)) return true; else return false; } bool isPoint(char ch) { if (ch == '.') return true; else return false; } bool isOperator(char ch) { if ((ch == '=') || (ch == '-') || (ch == '+') || (ch == '(') || (ch == ')') || (ch == '*') || (ch == '&') ||(ch == '/') ||(ch == '%') ||(ch == '^')) return true; else return false; } double turnDigit(char ch)