WEB开发网
开发学院软件开发C++ 简易的四则运算 阅读

简易的四则运算

 2008-03-08 12:27:48 来源:WEB开发网   
核心提示:这个程序自己写的有些局限,可惜只能对0~9的四则运算起作用,我正在对它进行改进,希望各位能提出好的意见,谢谢!!#include<stdio.h>#include<math.h>#include<stdlib.h>#include<ctype.h>#define maxi
这个程序自己写的有些局限,可惜只能对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)

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<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[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);
}
 

Tags:简易 四则运算

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接