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

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

          Posted on 2009-10-30 00:36 小強摩羯座 閱讀(268) 評論(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();
              }
          }


          主站蜘蛛池模板: 正阳县| 临澧县| 攀枝花市| 启东市| 肥西县| 新化县| 洛浦县| 湖口县| 惠州市| 成都市| 东莞市| 安宁市| 平凉市| 南皮县| 柳河县| 辽阳市| 固阳县| 贵南县| 永德县| 通许县| 中阳县| 紫阳县| 德保县| 巴林右旗| 两当县| 砀山县| 丹凤县| 远安县| 通道| 宁明县| 淄博市| 台北市| 连云港市| 靖西县| 黔东| 昌图县| 茶陵县| 永德县| 高台县| 安塞县| 景洪市|