posts - 195, comments - 34, trackbacks - 0, articles - 1

          C語言編一個簡單的計算器

          Posted on 2009-10-30 00:36 小強摩羯座 閱讀(265) 評論(0)  編輯  收藏 所屬分類: 算法編程
          #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();
              }
          }


          主站蜘蛛池模板: 久治县| 互助| 奉节县| 平利县| 永康市| 平顶山市| 通州市| 泗水县| 重庆市| 普兰县| 惠州市| 湖州市| 元江| 延长县| 乐安县| 延寿县| 康保县| 华蓥市| 高青县| 高尔夫| 莱西市| 玉树县| 南宫市| 中牟县| 屏边| 广灵县| 玉环县| 河南省| 光山县| 桂东县| 科技| 奈曼旗| 抚远县| 丰镇市| 彰化县| 夏河县| 长寿区| 双城市| 湟源县| 金堂县| 阿尔山市|