龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

简易的四则运算

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
这个程序自己写的有些局限,可惜只能对0~9的四则运算起作用,我正在对它进行改进,希望各位能提出好的意见,谢谢!! #include #include #include #include #define maxism 15 typedef strUCt stack { char stack[m

这个程序自己写的有些局限,可惜只能对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);

  }

  

  

  

精彩图集

赞助商链接