简易的四则运算
这个程序自己写的有些局限,可惜只能对0~9的四则运算起作用,我正在对它进行改进,希望各位能提出好的意见,谢谢!!
  #include
  #include
  #include
  #include
#define maxism 15
typedef strUCt stack
{
char stack[maxism];
int top;
}stack;
stack *L;
char after[maxism];
void initialstack(stack *T)
void push(stack *T,int x)
void change()
{
int i=0,j,m=0;
char str[maxism],ch;
printf("please enter the compute eXPression(only contained +,-,*,/,(,),begin and end with '#'): ");
gets(str);
i++;
ch=str[i];
initialstack(L);
while(ch!='#')
{
switch(ch)
{
case'(':
L->top++;
L->stack[L->top]=ch;
break;
case')':
while(L->stack[L->top]!='(')
{
after[m]=L->stack[L->top];
L->top--;
m++;
}
L->top--;
break;
case'+':
case'-':
while(L->top!=0&&L->stack[L->top]!='(')
{
after[m]=L->stack[L->top];
L->top--;
m++;
}
L->top++;
L->stack[L->top]=ch;
break;
case'*':
case'/':
while(L->stack[L->top]=='*'L->stack[L->top]=='/')
{
after[m]=L->stack[L->top];
L->top--;
m++;
}
L->top++;
L->stack[L->top]=ch;
break;
case' ':
break;
default:
if(ch>='0'&&ch<='9')
{
after[m]=ch;
m++;
}
else
{
printf("error! ");
exit(1);
}
}
i++;
ch=str[i];
}
while(L->stack[L->top]!=0)
printf("the changed expression is: ");
  for(j=0;j   printf("%c",after[j]);   after[m]='#';   printf("%c",after[m]);   }   void  compute(stack *L)   {   int i=0,result,d;   char ch;   initialstack(L);   ch=after[i];   while(ch!='#')   {       while(ch>='0'&&ch<='9')       {          d=ch-'0';          push(L,d);          i++;          ch=after[i];       }       switch(ch)       {          case'+':             L->stack[L->top-1]=L->stack[L->top]+L->stack[L->top-1];             L->top--;             break;             case'-':             L->stack[L->top-1]=L->stack[L->top-1]-L->stack[L->top];             L->top--;             break;         case'*':             L->stack[L->top-1]=L->stack[L->top]*L->stack[L->top-1];             L->top--;             break;         case'/':             if(L->stack[L->top-1]==0)             {                 printf("error due to the wrong input format! ");                 exit(0);             }             else                L->stack[L->top-1]=L->stack[L->top-1]/L->stack[L->top];             L->top--;             break;                                       default:                                                         break;                                        }               i++;               ch=after[i];        }   printf(" the final result is:%d",L->stack[L->top]);   }   main()   {int result;   clrscr();   change();   compute(L);   }         
- 上一篇:简单图形模拟吃豆游戏
 - 下一篇:简单的画笔
 





