首页 > C/C++语言 > C/C++数据结构 > 简易的四则运算
2006
09-27

简易的四则运算

这个程序自己写的有些局限,可惜只能对0~9的四则运算起作用,我正在对它进行改进,希望各位能提出好的意见,谢谢!!
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#define maxism 15
typedef struct stack
{
char stack[maxism];
int top;
}stack;
stack *L;
char after[maxism];
void initialstack(stack *T)
{
T->top=0;
}
void push(stack *T,int x)
{
T->top++;
T->stack[L->top]=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 ‘#’):\n”);
gets(str);
i++;
ch=str;
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!\n”);
               exit(1);
           }
     }
     i++;
     ch=str;
  }
while(L->stack[L->top]!=0)
{
after[m]=L->stack[L->top];
m++;
L->top–;
}
printf(“the changed expression is:\n”);
for(j=0;j<m;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;
while(ch!=’#')
{
    while(ch>=’0′&&ch<=’9′)
    {
       d=ch-’0′;
       push(L,d);
       i++;
       ch=after;
    }
    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!\n”);
               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;
     }
printf(“\n the final result is:%d”,L->stack[L->top]);
}
main()
{int result;
clrscr();
change();
compute(L);
}


留下一个回复