#include "stdafx.h"
#define STACK_INIT_SIZE 10
#define STACKINCRESIZE 5
typedef struct
{
SElemType *base;
SElemType *top;
int stack_size;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stack_size=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if((S.top-S.base)>=STACK_INIT_SIZE){
S.base=(ElemType*)realloc(S.base,(S.stack_size+STACKINCRESIZE)*(sizeof(SqStack)));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stack_size;
S.stack_size+=STACK_INIT_SIZE;
}
*(S.top)++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.top==S.base)
return TRUE;
else return FALSE;
}
int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
/*#include "stdafx.h"
#include "MyStack.h"
int InitStack(SqStack &S)
{
S.base =(ElemType *)malloc(STACKSIZE*sizeof(ElemType));
S.top =S.base ;
S.stacksize =STACKSIZE;
return OK;
}
int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
int Push(SqStack &S,Elemtype e)
{
if(S.top -S.base >=S.stacksize )
{
S.base=(ElemType *)realloc(S.base ,(S.stacksize +ADDSIZE)sizeof(ElemType));
S.top =S.stacksize +S.base ;
S.stacksize =S.stacksize +ADDSIZE;
}
*(S.top)++=e;
return OK;
}
int Pop(SqStack &S,ElemType &e)
{
if(S.base !=S.top )
{
e=*(--S.top );
return OK;
}
else return ERROR;
}*/
#include "stdafx.h"
#include "stdafx.h"
#include "MyStack.h"
//#include "MyStack.cpp"
ElemType Precede(ElemType t1,ElemType t2)
{
ElemType f='0';
switch(t2)
{
case '+':
case '-':
if(t1=='('||t1=='=')
f='<';
else f='>';
break;
case '*':
case '/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else f='<';
break;
case '(':
if(t1==')')
{
cout<<"ERROR"<<endl;
exit(ERROR);
}
else f='<';
break;
case ')':switch(t1)
{
case '(':f='=';
break;
case '=':printf("ERROR2\n");
exit(ERROR);
default: f='>';
}
break;
case'=':switch(t1)
{
case '=':f='=';
break;
case '(':cout<<"ERROR"<<endl;
default:f='>';
}
break;
}
return f;
}
int In(ElemType e)
{
switch(e)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'=':return TRUE;
default:return FALSE;
}
}
ElemType Operate(ElemType a,ElemType theta,ElemType b)
{
ElemType re=0;
switch(theta)
{
case'+':re=a+b;
break;
case'-':re=a-b;
break;
case'*':re=a*b;
break;
case'/':re=a/b;
break;
}
return re;
}
ElemType EvaluateExpression()
{
ElemType x,a,b,theta,d;
char c;
char z[6];
SqStack OPTR,OPND;
InitStack(OPTR);Push(OPTR,'=');
InitStack(OPND);
c=getchar();
GetTop(OPTR,x);
while(c!='='||x!='=')
{
if(In(c)) // 是7种运算符之一
switch(Precede(x,c))
{
case'<':Push(OPTR,c); // 栈顶元素优先权低
c=getchar();
break;
case'=':Pop(OPTR,x); // 脱括号并接收下一字符
c=getchar();
break;
case'>':Pop(OPTR,theta); // 退栈并将运算结果入栈
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
else if(c>='0'&&c<='9') // c是操作数
{
int i=0;
do
{
z[i]=c;
i++;
c=getchar();
}while(c>='0'&&c<='9');
z[i]=0;
d=atoi(z);
Push(OPND,d);
}
else // c是非法字符
{
printf("ERROR4\n");
exit(ERROR);
}
GetTop(OPTR,x);
}
GetTop(OPND,x);
return x;
}
// Calculator.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Calculator.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("请输入算术表达式,负数要用(0-正数)表示,并以=结束\n");
printf("%d\n",EvaluateExpression());
getchar();
system("pause");
return 0;
}
如果需要源码的话,827222866 ,
温馨提示:内容为网友见解,仅供参考
求用C语言编写一个可以进行 加减乘除 平方 开方 的程序,并且要考虑优 ...
include "stdafx.h"define STACK_INIT_SIZE 10 define STACKINCRESIZE 5 typedef struct { SElemType *base;SElemType *top;int stack_size;}SqStack;Status InitStack(SqStack &S){ S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S.base)exit(OVERFLOW);S.top=S.base;S....
...实现一个简单计算器的功能: + - * \/ 平方 开方,只能用到函数调用的...
&a,&d,&b); if('+' == d) c = a + b; if('-' == d) c = a - b; if('*' == d) c = a * b; if('\/' == d) c = a*1.0\/b; if('^' == d) c = a*a
用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等...
double
C语言能够实现简单的加、减、乘、除、乘方、开方运算等,界面美观
a,b,c;printf("请输入两个整数:");scanf("%d%d",&a,&b);c=a*b;printf("%d",c);return c;} int division(){int a,b,c;printf("请输入两个整数:");scanf("%d%d",&a,&b);c=a\/b;printf("%d",c);;return c;} int sqrt(){int a,b;printf("请输入一个整数:");scanf(...
怎样用c语言编一个简单的计算器?最简单的
cc*=minus;minus=1; Push(OPND,cc); }\/\/不是运算符则进OPND栈 else switch(Precede(GetTop(OPTR),c)){ case '<':Push(OPTR,c);prec=c;scanf("%c",&c);break;\/\/栈顶元素优先级低 case '=':Pop(OPTR,x);prec=c;scanf("%c",&c);break;\/\/脱括号并接收下一字符 case '>':\/\/退栈并将...
用C语言编写可以进行加减乘除整数运算混合运算的计算器,要求写思路,越...
用C语言编写可以进行加减乘除整数运算混合运算的计算器,要求写思路,越详细越好,初学者,不要很复杂的。200 实现整数的算术运算(加、减、乘、除)。程序只接受界面上显示的字符输入。用户每按一个数值或一个运算符后按回车键,最后用户按=键后输出运算结果。运算需先乘除后加减。输入时要检查... 实现整数的算术...
...加减乘除,三个数字两个运算符两个括号,考虑优先级
从左到右扫描,遇到数字直接输出,遇到符号比较优先级进栈或输出(优先级大的进栈,小的或相等的直接输出。其中左括号优先级大于乘除大于加减),遇到左括号则进栈,遇到右括号则将栈内左括号之内的符号都输出,遇到末尾就将栈内的所有符号都输出。例如5*(3+2)扫描5 直接输出扫描* 进栈(栈内:*...
用C语言编写简单的windos计算器能进行加减乘除即可不要界面的
double d1;int d2;}dd;typedef struct { dd data[50];int top;}zhan1;zhan1 shu;shu.top=0;while(a[i]!='\\0'){ if(a[i]>='0'&&a[i]<='9'){ z=0;j=i+1;while(a[j]>='0'&&a[j]<='9'){j++;} j--;for(k=i;k<=j;k++){ z=z*10+a[k]-'0';} j=j...
C语言编写加减计算程序
main (void){ int a,b,c;char op;scanf ("%d%c%d",&a,&op,&b);\/\/最好空格去掉,这样就可以直接写成a+b或者a-b。如果有空格的话要记得空格也要打a + b。要不会出现错误 ,而且输入的时候需要用地址符&···if(op=='+'){c=a+b;} if(op=='-'){c=a-b;} printf("%d%c...
用C语言编译数学运算
一、需求分析 1、 功能:疏如一行表达式,若表达式有误,则输出“表达式有错” ,否则计算出表达式的值并输出。 运算符包括加、减、乘、除、乘方、一目减。 括号均为小括号,但可以层层嵌套。操作数可以是浮点数,也包括有多个字母组成的变量。 2、 输入的形式为表达式,按回车结束。输入值的范围不超过浮点数的范围...