作业帮 > 综合 > 作业

(数据结构编程)求含有四则运算表达式的值

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 19:50:47
(数据结构编程)求含有四则运算表达式的值
用+ - × /() 和 0 1 2 3 4 5 6 7 8 9 组成像这样的表达式: 8-6/2-3×4+(1+9)/2 然后编程求值,要求能运算任何表达式的值一:写出编程思想或方法二:要有流程图三:两种方法四:请附上运行后的图
#include
#include
#include
#include
#define N 50
struct NumStack//定义栈结构体,用来存贮运算数字
{
int top;
double array[N];
};
struct OpStack//定义栈结构体,用来存贮运算符号
{
int top;
char array[N];
};
int Cint(char mychar)//函数,数符转化成数字
{
return (mychar-48);
}
void PushNum(NumStack *numstack,double num)
{
numstack->top++;//移动指针 numstack->array[numstack->top-1]=num;//插入元素
}
void PopNum(NumStack *numstack,double *num)//输出数
{
*num=numstack->array[numstack->top-1];
numstack->top--;//移动指针
}
void PushOp(OpStack*opstack,char op)//输入运算符
{
opstack->top++;
opstack->array[opstack->top-1]=op;
}
void PopOp(OpStack*opstack,char *op)//输出运算符
{
*op=opstack->array[opstack->top-1];
opstack->top--;
}
double Calc(double a,double b,char c)//两个数的四则运算
{
double result;
switch(c){
case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':result=a/b;break;
}
return result;
}
char Priority(char y,char x)//算术优先级的判定
{
char priority='';break;
case '*':
case '/':if(y=='('||y=='#'||y=='-'||y=='+')priority='>';break;
case '(':priority='>';break;
case ')':if(y=='(')priority='=';break;
case '#':if(y=='#')priority='=';break;
default:priority='E';
}
return priority;
}
void Process(NumStack *numstack,OpStack *opstack,char x)//主要实现函数
{
double a,b;char c;
static double tempnum=0.00000000;
static int len=10;
static int dot=0,flags=0;
if(isdigit(x) || x=='.')
{
if(x=='.')dot=1;
else
{
if(dot==0)//前趋数部分数值还原
tempnum=tempnum*10+Cint(x);
else{tempnum=tempnum+(double)Cint(x)/len; len*=10;}//else
}//else
}//if
else
{
if(flags==0 && x!='(')
{
PushNum(numstack,tempnum);
tempnum=0.00000000;
len=10;dot=0;
}
switch(Priority(opstack->array[opstack->top-1],x))
{
case '>':PushOp(opstack,x);flags=0;break;
case '