当前位置: 代码迷 >> C语言 >> 求一个 C语言编写的计算器程序
  详细解决方案

求一个 C语言编写的计算器程序

热度:208   发布时间:2008-05-08 17:17:57.0
    |12+5*3 | Level
12     |+5*3   |[Push 12] NeedOpt,Level
12+    |5*3    | NeedVar,HasOpt(+,3),Level
12+5   |*3     |[Push 5] NeedOpt,HasOpt(+,3),Level
12+5*  |3      | NeedVar,HasOpt(*,2),HasOpt(+,3),Level
12+5*3 |       |[Push 3] NeedOpt,HasOpt(*,2),HasOpt(+,3),Level
       |       |[Mul] HasOpt(+,3),Level
       |       |[Add] Level


发一点天书上来………………

[[it] 本帖最后由 StarWing83 于 2008-5-8 17:19 编辑 [/it]]
----------------解决方案--------------------------------------------------------
归约的句柄和运算符的级别?有点汇编的味道
----------------解决方案--------------------------------------------------------
楼上的研几了?
----------------解决方案--------------------------------------------------------
你是问翅膀?
----------------解决方案--------------------------------------------------------
问你。。。
----------------解决方案--------------------------------------------------------
呵呵
还有女的
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int main( )
{
   int ri, repeat;
   int op1, op2, res;
   char operator;

   scanf("%d", &repeat);
   for(ri=1; ri<=repeat; ri++){
     scanf("%d", &op1);
     operator = getchar();
/*---------*/
     res=op1;
     while(operator!='='){
         scanf("%d",&op2);
         if(operator=='+')
             res=res+op2;
         if(operator=='-')
             res=res-op2;
         if(operator=='*')
             res=res*op2;
         if(operator=='/')
             res=res/op2;
         operator=getchar();}
     printf("%d\n", res);
   }
}
----------------解决方案--------------------------------------------------------
我估计他要的不是那么简单的.要不也不是课程设计了..至少要解四则运算的那种
----------------解决方案--------------------------------------------------------
char EvaluateExpression() {

SqStack *OPND,*OPTR;

char c,x,theta; char a,b;

InitStack(&OPTR); Push(OPTR,'#');

InitStack(&OPND);

c=getchar();

while(c!='#'||GetTop(*OPTR)!='#') {

if(!In(c,OP)) {Push(OPND,c);c=getchar();}

else

switch(Precede(GetTop(*OPTR),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;

}

}

c=GetTop(*OPND);

DestroyStack(OPTR);

DestroyStack(OPND);

return c;

}
----------------解决方案--------------------------------------------------------
使用栈来写
操作符压栈,操作数就把栈底数和操作符弹出做相应的运算再入栈!
----------------解决方案--------------------------------------------------------
  相关解决方案