利用栈实现算术表达式的求值,表达式中可以包含加、减、乘、除、乘方、括号运算符,参加运算的操作数可以是实数.Input 输
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 07:18:57
利用栈实现算术表达式的求值,表达式中可以包含加、减、乘、除、乘方、括号运算符,参加运算的操作数可以是实数.Input 输入一个算术表达式,以‘#’结尾,Output 输出算术表达式的结果(保留两位小数).
#define Stack_init_size 100
#define Stack_add 10
#include
using namespace std;
#include
#include
#include
#include
typedef struct{
\x09char *base;
\x09char *top;
\x09int stacksize;
}SqStack1;
typedef struct{
\x09double *base;
\x09double *top;
\x09int stacksize;
}SqStack2;
void InitStack(SqStack1 &S)
{
\x09S.base=(char *)malloc(Stack_init_size*sizeof(char));
\x09if(!S.base)
\x09\x09exit(1);
\x09S.top=S.base;
\x09S.stacksize=Stack_init_size;
\x09return;
}
void InitStack(SqStack2 &S)
{
\x09S.base=(double *)malloc(Stack_init_size*sizeof(double));
\x09if(!S.base)
\x09\x09exit(1);
\x09S.top=S.base;
\x09S.stacksize=Stack_init_size;
\x09return;
}
void Push(SqStack1 &S,char e)
{
\x09if(S.top-S.base>=S.stacksize)
\x09{
\x09\x09S.base=(char *)realloc(S.base,(S.stacksize+Stack_add)*sizeof(char));
\x09\x09if(!S.base)
\x09\x09\x09exit(1);
\x09\x09S.stacksize+=Stack_add;
\x09}
\x09*S.top++=e;
\x09return;
}
void Push(SqStack2 &S,double e)
{
\x09if(S.top-S.base>=S.stacksize)
\x09{
\x09\x09S.base=(double *)realloc(S.base,(S.stacksize+Stack_add)*sizeof(double));
\x09\x09if(!S.base)
\x09\x09\x09exit(1);
\x09\x09S.top=S.base+S.stacksize;
\x09\x09S.stacksize+=Stack_add;
\x09}
\x09*S.top++=e;
\x09return;
}
bool Pop(SqStack1 &S,char &e)
{
\x09if(S.base==S.top)
\x09\x09return false;
\x09e=*(--S.top);
\x09return true;
}
bool Pop(SqStack2 &S,double &e)
{
\x09if(S.base==S.top)
\x09\x09return false;
\x09e=*(--S.top);
\x09return true;
}
char GetTop(SqStack1 &S)
{
\x09if(S.base==S.top)
\x09\x09return 0;
\x09return *(S.top-1);
}
double GetTop(SqStack2 &S)
{
\x09if(S.base==S.top)
\x09\x09return 0;
\x09return *(S.top-1);
}
bool In(char c)
{
\x09if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='^')
\x09\x09return true;
\x09return false;
}
double todouble(char s[])
{
double val,power;
int i=0,sign;
sign = (s[i] == '-')?-1 :1;
if(s[i] == '+' || s[i] == '-')
i++;
for(val = 0.0; isdigit(s[i]); i++)
{
val = val * 10 + (s[i] - '0');
}
if(s[i] == '.')
i++;
for(power = 1.0; isdigit(s[i]); i++)
{
val = 10.0 * val + (s[i] - '0');
power *= 10;
}
return sign * val / power;
}
double power(double a,double b)
{
\x09double s=1.0;
\x09for(int i=0;i
#define Stack_add 10
#include
using namespace std;
#include
#include
#include
#include
typedef struct{
\x09char *base;
\x09char *top;
\x09int stacksize;
}SqStack1;
typedef struct{
\x09double *base;
\x09double *top;
\x09int stacksize;
}SqStack2;
void InitStack(SqStack1 &S)
{
\x09S.base=(char *)malloc(Stack_init_size*sizeof(char));
\x09if(!S.base)
\x09\x09exit(1);
\x09S.top=S.base;
\x09S.stacksize=Stack_init_size;
\x09return;
}
void InitStack(SqStack2 &S)
{
\x09S.base=(double *)malloc(Stack_init_size*sizeof(double));
\x09if(!S.base)
\x09\x09exit(1);
\x09S.top=S.base;
\x09S.stacksize=Stack_init_size;
\x09return;
}
void Push(SqStack1 &S,char e)
{
\x09if(S.top-S.base>=S.stacksize)
\x09{
\x09\x09S.base=(char *)realloc(S.base,(S.stacksize+Stack_add)*sizeof(char));
\x09\x09if(!S.base)
\x09\x09\x09exit(1);
\x09\x09S.stacksize+=Stack_add;
\x09}
\x09*S.top++=e;
\x09return;
}
void Push(SqStack2 &S,double e)
{
\x09if(S.top-S.base>=S.stacksize)
\x09{
\x09\x09S.base=(double *)realloc(S.base,(S.stacksize+Stack_add)*sizeof(double));
\x09\x09if(!S.base)
\x09\x09\x09exit(1);
\x09\x09S.top=S.base+S.stacksize;
\x09\x09S.stacksize+=Stack_add;
\x09}
\x09*S.top++=e;
\x09return;
}
bool Pop(SqStack1 &S,char &e)
{
\x09if(S.base==S.top)
\x09\x09return false;
\x09e=*(--S.top);
\x09return true;
}
bool Pop(SqStack2 &S,double &e)
{
\x09if(S.base==S.top)
\x09\x09return false;
\x09e=*(--S.top);
\x09return true;
}
char GetTop(SqStack1 &S)
{
\x09if(S.base==S.top)
\x09\x09return 0;
\x09return *(S.top-1);
}
double GetTop(SqStack2 &S)
{
\x09if(S.base==S.top)
\x09\x09return 0;
\x09return *(S.top-1);
}
bool In(char c)
{
\x09if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='^')
\x09\x09return true;
\x09return false;
}
double todouble(char s[])
{
double val,power;
int i=0,sign;
sign = (s[i] == '-')?-1 :1;
if(s[i] == '+' || s[i] == '-')
i++;
for(val = 0.0; isdigit(s[i]); i++)
{
val = val * 10 + (s[i] - '0');
}
if(s[i] == '.')
i++;
for(power = 1.0; isdigit(s[i]); i++)
{
val = 10.0 * val + (s[i] - '0');
power *= 10;
}
return sign * val / power;
}
double power(double a,double b)
{
\x09double s=1.0;
\x09for(int i=0;i
利用栈实现算术表达式的求值,表达式中可以包含加、减、乘、除、乘方、括号运算符,参加运算的操作数可以是实数.Input 输
算术表达式求值设计一个程序,利用栈实现算术表达式的求值要求:(1)以字符串形式输入语法正确算术表达式,参与运算的操作数为
用c++设计一个计算器模拟程序,要求对包含加、减、乘、除、括号运算符及sqr和abs函数的任意整型表达式进行
利用加、减、乘、除、乘方运算,每个数用一次,尽可能写出不同的算式.
设设有一算术表达式,参与运算的数据均为1位数字、并且只使用加、减、乘、除四则运算和圆括号,编程实现该
按照四则运算优先关系的惯例,画出下列算术表达式求值时操作数栈和运算符栈的变化过程:3+5*7-4
C语言改错:从键盘读取一个表达式,该表达式由两个数和一个算术运算符构成(加、减、乘、除),例如:
在实数范围内,加、减、乘、除、乘方、开方运算总可以进行.
[问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的
用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;
有理数的混合运算是指在一个算式里,含有加、减、乘、除、乘方运算中的( )运算.
有道数学难题,-1 ,-12 ,12 ,3 列个有理数混合运算的式子,加,减,乘,除,乘方运算中至少有两种运算,是结果为