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


          主站蜘蛛池模板: 江孜县| 于田县| 德钦县| 邢台县| 堆龙德庆县| 巴东县| 锡林浩特市| 湖南省| 即墨市| 若尔盖县| 梁河县| 鄯善县| 手机| 凤阳县| 宁海县| 阿拉善盟| 溧阳市| 白城市| 昭苏县| 砚山县| 临邑县| 靖宇县| 疏附县| 田阳县| 海门市| 宾川县| 友谊县| 梓潼县| 苏州市| 惠州市| 河间市| 高青县| 威信县| 沁源县| 怀远县| 繁昌县| 启东市| 南昌县| 东至县| 绥棱县| 阿城市|