| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 394 人关注过本帖
标题:自己写的程序有错误找不出
取消只看楼主 加入收藏
andyhu1a
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-1-2
结帖率:100%
收藏
 问题点数:0 回复次数:0 
自己写的程序有错误找不出
#include<stdio.h>
#include<conio.h>
#include<math.h>
int is_operation(char op)/*判断操作符*/
{
   switch(op)
      {case '+':
       case '-':
       case '*':
       case '/':return 1;
       default:return 0;
      }
}
int priority(char op) /*求优先级*/
{
    switch(op)
    {
     case '=':return -1;
     case '(':return 0;
     case '+':
     case '-':return 1;
     case '*':
     case '/':return 2;
     default:return -1;
    }
}
void postfix(char e[],char f[])/*中缀转后缀*/
{
   int i=0,j=0;
   char opst[100];
   int top,t;
   top=0;
   opst[top]='=';top++;
   while(e[i]!='=')
   {
       if ((e[i]>='0'&&e[i]<='9')||e[i]=='.')
       f[j++]=e[i];
       else if (e[i]=='(')
           {opst[top]=e[i];top++;}
        else if (e[i]==')')
            {t=top-1;
             while (opst[t]!='(') {f[j++]=opst[--top];t=top-1;}
             top--;
            }
             else if (is_operation(e[i]))
                 {f[j++]=' ';
                  while (priority(opst[top-1])>=priority(e[i]))
                  f[j++]=opst[--top];
                  opst[top]=e[i];top++;
                 }
        i++;
   }while (top) f[j++]=opst[--top];
}
double readnumber(char f[],int *i)/*字符转变成相应数*/
{
   double x=0.0;
   int k=0;
   while(f[*i]>='0'&&f[*i]<='9')
   { x=x*10+(f[*i]-'0');
     (*i)++;
   }
   if (f[*i]=='.')
      { (*i)++;
        while (f[*i]>='0'&&f[*i]<='9')
            { x=x*10+(f[*i]-'0');
              (*i)++;
              k++;
            }
      }
   while (k!=0)
   { x=x/10.0;
     k=k-1;
   }
   return(x);
}

double evalpost(char f[])/*后缀求值*/
{
   double obst[100];
   int top=0;
   int i=0;
   double x1,x2;
   while (f[i]!='=')
       { if (f[i]>='0'&&f[i]<='9')
         {obst[top]=readnumber(f,&i);top++;}
         else if (f[i]==' ') i++;
            else if (f[i]=='+')
               { x2=obst[--top];
                 x1=obst[--top];
                 obst[top]=x1+x2;top++;
                 i++;
               }
            else if (f[i]=='-')
               { x2=obst[--top];
                 x1=obst[--top];
                 obst[top]=x1-x2;top++;
                 i++;
               }
            else if (f[i]=='*')
               { x2=obst[--top];
                 x1=obst[--top];
                 obst[top]=x1*x2;top++;
                 i++;
               }
            else if (f[i]=='/')
               { x2=obst[--top];
                 x1=obst[--top];
                 obst[top]=x1/x2;top++;
                 i++;
               }
        }
   return obst[0];
}
void fuhao(char a[])/*处理负号*/
{
    int i=0,j,k,z,n=0;
     while(a[i]!='=')
     {i++;}
     while(a[n]!='=')
     {
        if (a[n]=='(' && a[n+1]=='-')
        {  z=n+2;
            while(a[z]>='0'&&a[z]<='9')
            {z++;}
           for(k=i;z<=k;k--)
           {  
             a[k+3]=a[k];
             a[z]=')';
           }
         
           for(k=z;k>n;k--)
           {
             a[k+2]=a[k];
           }
           a[n+1]='(';   
           a[n+2]='0';
        }
           n++;
     }
    if(a[0]=='-')
    {   z=1;
        while(a[z]>='0'&&a[z]<='9')
            {z++;}
       for(j=i;j>=z;j--)
       {
            a[j+3]=a[j];
       }
       a[j+3]=')';
       for(;j>=0;j--)
       {a[j+2]=a[j];}
       a[1]='0';
      a[0]='(';
    }
}
void main()
{  char e[100];
  char f[100];
  int i=0;
  double s;
  printf("*********************欢迎使用计算器********************\n");
  printf("请输入需计算的(以“=”结尾):\n");
  scanf("%c",&e[i]);
  while(e[i]!='=')
  {  i++;
    scanf("%c",&e[i]);
   }   
  fuhao(e);
  postfix(e,f);
  s=evalpost(f);
  printf("%f",s);
  getch();

}
搜索更多相关主题的帖子: return include default void 
2012-06-17 19:55
快速回复:自己写的程序有错误找不出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022641 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved