资源简介
设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及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
- 上一篇:fastKICA快速核ICA
- 下一篇:excel 2007版批量添加字符串插件
评论
共有 条评论