• 大小: 284KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签: C++计算器  

资源简介

设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。

资源截图

代码片段和文件信息

#include
#include
#include 
#include
//运算符栈数组长度
#define STACK_OPERATOR_LENGTH 100
//操作数栈数组长度
#define STACK_DATE_LENGTH 100
//定义运算符栈
typedef struct OPStack
{
//定义运算符数组
char opStack[STACK_OPERATOR_LENGTH];
//栈顶
int top;
}OPStack*pOPStack;
//定义运算数栈
typedef struct DATAStack
{
//定义操作数数组;
double stack[STACK_DATE_LENGTH];
int top;
}DATAStack*pDATAStack;

//初始化运算符栈
void InitpOPStack(pOPStack &OPStack)
{
//为运算符栈分配空间
if(!(OPStack = ( pOPStack)malloc( sizeof(OPStack ))))
{
printf(“分配内存空间失败!\n“);
exit(-1);
}
OPStack->top=-1;
}

//初始化运算数栈
void InitpDATAStack(pDATAStack &pDStack)
{
//为运算数栈分配空间
if(!(pDStack = ( pDATAStack)malloc(sizeof(DATAStack))))
{
printf(“分配内存空间失败!\n“);
exit(-1);
}
pDStack->top=-1;
}

//运算符进栈
void PushOPStack(pOPStack &pOPStack char ch)
{
pOPStack->opStack[++(pOPStack->top)]=ch;
}

//运算符出栈
void PopOPStack(pOPStack &pOStack char &ch)
{
 ch = pOStack->opStack[pOStack->top];
 pOStack->top--;
}

//运算数进栈
void PushDATAStack(pDATAStack &pDStack double d)
{
 ++(pDStack->top);
 pDStack->stack[pDStack->top] = d;
}

//运算数出栈
void PopDATAStack(pDATAStack &pDStack double &d)
{
 d = pDStack->stack[pDStack->top];
 pDStack->top--; 
}

//清空运算符栈
void ClearpOPStack(pOPStack &pOStack)
{
 pOStack->top = -1;
}

//清空运算数栈
void ClearpDATAStack(pDATAStack &pDStack)
{
 pDStack->top = -1;
}

//获取运算符栈顶元素
char GetToppOPStack(pOPStack &pOStack)
{
 return pOStack->opStack[pOStack->top];
}

 //获取运算数栈顶元素
double GetToppDATAStack(pDATAStack &pDStack)
{
 return pDStack->stack[pDStack->top];
}

//区分 运算符 和 运算数 的函数,是运算符时返回true否则返回false
bool IsOP(char &ch)
{ //判断是否为符号
 if ( (ch == ‘+‘) || (ch == ‘-‘) || (ch == ‘*‘) || (ch == ‘/‘) || (ch == ‘=‘) || (ch == ‘A‘) || (ch == ‘S‘) || (ch == ‘a‘) || (ch == ‘s‘) || (ch == ‘(‘) || (ch == ‘)‘) )
  return true;
 else
  return false;
}

//参考《数据结构》(C语言版)第53页 3.2.5表达式求值 表 3.1
char Precede(char op1 char op2)
{
 char tab[9][10];  //定义字符串的二维数组来存放运算符优先级的关系
 strcpy( tab[0] “>><<<><<>“ );
 strcpy( tab[1] “>><<<><<>“ );
 strcpy( tab[2] “>>>><><<>“ );
 strcpy( tab[3] “>>>><><<>“ );
 strcpy( tab[4] “<<<<<=< strcpy( tab[5] “>>>>E>>>>“ );
 strcpy( tab[6] “>>>><>>>>“ );
 strcpy( tab[7] “>>>><>>>>“ );
 strcpy( tab[8] “<<<< char op[10];  //定义一维字符串数组来按优先级从低到高存放运算符
 strcpy(op “+-*/()AS=“);
 int i j;

 for( i = 0; i < 9; i++)
  if( op[i] == op1)
   break;
 for( j = 0; j < 9; j++)
  if( op[j] == op2)
   break;
 return tab[i][j];  //返回比较结果
}
void exit_E()
{
  printf(“\n |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n“);
  printf(“\n | ***欢迎您的下次使用!谢谢!!!***   | \n\n“);  //退出使用
  printf(“ |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n\n“);
}

  //对出栈的运算符和运算数进行计算
double Operate(double a char theta double b)
{
 double s;
 switch(theta)
 {
 case ‘+‘:
  s = a + b;
  break;
 case ‘-‘:
  s = a - b;
  b

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-08-29 22:21  Debug\
     文件      217217  2014-07-11 13:36  Debug\jisuanqi.exe
     文件      307760  2014-07-11 13:36  Debug\jisuanqi.ilk
     文件       25175  2014-07-11 13:36  Debug\jisuanqi.obj
     文件      235928  2014-07-11 12:58  Debug\jisuanqi.pch
     文件      500736  2014-07-11 13:36  Debug\jisuanqi.pdb
     文件       41984  2014-07-11 13:43  Debug\vc60.idb
     文件       53248  2014-07-11 13:36  Debug\vc60.pdb
     文件        7893  2014-07-11 13:36  jisuanqi.cpp
     文件        3425  2014-07-11 13:43  jisuanqi.dsp
     文件         524  2014-07-11 13:43  jisuanqi.dsw
     文件       41984  2014-07-11 13:43  jisuanqi.ncb
     文件       48640  2014-07-11 13:43  jisuanqi.opt
     文件         250  2014-07-11 13:43  jisuanqi.plg

评论

共有 条评论

相关资源