posts - 195, comments - 34, trackbacks - 0, articles - 1
          #include  <stdio.h>
          int add(int x,int y)  {return x+y;}
          int sub(int x,int y)  {return x-y;}
          int mul(int x,int y)  {return x*y;}
          int div(int x,int y)  {return x/y;}
          int (*func[])()={add,sub,mul,div};
          int num,curch;
          char chtbl[]="+-*/()=";
          char corch[]="+-*/()=0123456789";
          int getach()  {
              int i;
              while(1)  {
                  curch=getchar();
                  if(curch==EOF)  return -1;
                  for(i=0;corch[i]&&curch!=corch[i];i++);
                  if(i<strlen(corch))  break;
              }
              return curch;
          }

          int getid()  {
              int i;
              if(curch>='0'&&curch<='9')  {
                  for(num=0;curch>='0'&&curch<='9';getach())    num=10*num+curch-'0';
                  return -1;
              }
              else  {
                  for(i=0;chtbl[i];i++) if(chtbl[i]==curch)  break;
                      if(i<=5)  getach();
                      return i;
              }
          }

          int cal()  {
              int x1,x2,x3,op1,op2,i;
              i=getid();
              if(i==4)    x1=cal();    else  x1=num;
              op1=getid();
              if(op1>=5)  return x1;
              i=getid();
              if(i==4)  x2=cal();    else  x2=num;
              op2=getid();
              while(op2<=4)  {
                  i=getid();
                  if(i==4)  x3=cal();  else  x3=num;
                  if((op1/2==0)&&(op2/2==1))    x2=(*func[op2])(x2,x3);
                  else  {
                      x1=(*func[op1])(x1,x2);
                      x2=x3;
                      op1=op2;
                  }
                  op2=getid();
              }
              return (*func[op1])(x1,x2);
          }

          void main(void)  {
              int value;
              printf("Please input an expression:\n");
              getach();
              while(curch!='=')  {
                  value=cal();
                  printf("The result is:%d\n",value);
                  printf("Please input an expression:\n");
                  getach();
              }
          }


          主站蜘蛛池模板: 中阳县| 湘乡市| 奉节县| 西乌珠穆沁旗| 屏南县| 仪征市| 安康市| 光泽县| 万州区| 丹江口市| 塔城市| 齐河县| 元阳县| 铜山县| 新沂市| 全椒县| 邹城市| 南岸区| 中江县| 凭祥市| 沿河| 翼城县| 尖扎县| 平山县| 无极县| 江华| 屯门区| 普安县| 揭阳市| 凤翔县| 二连浩特市| 福安市| 武定县| 磐安县| 芮城县| 北海市| 黄龙县| 固安县| 凤台县| 建阳市| 安陆市|