回 帖 发 新 帖 刷新版面

主题:能帮偶看下这个表达式运算的程序么?

运行的时候好像一直停留在函数expred()中的循环里了

不知道是哪里写错了……

/*数据结构_栈和队列实验_表达式运算*/
#include "stdio.h"
#include "math.h"
#include "conio.h"
#define N 10

char proceed(char ch1,char ch2)
{
 char r;
 switch(ch1)
   {case '+':;
    case '-':switch(ch2)
              {case '*':;
               case '/':;
               case '(':r='<';
               break;
               default:r='>';
              }break;
    case '*':;
    case '/':switch(ch2)
              {case '(':r='<';
               break;
               default:r='>';
              }break;
    case '(':switch(ch2)
              {
               case ')':r='='; break;
               case '#':r='e';break;
               /*case '-':r='!';break;*/
               default:r='<';
              }break;
    case ')':switch(ch2)
              {
               case '(':r='e';break;
               default:r='>';
              }break;
    case '^':switch(ch2)
              {
               case '(':r='<';break;
               default:r='>';
              }break;
    case '#':switch(ch2)
              {
               case ')':r='e';break;
               case '#':r='=';break;
               default:r='<';
              }break;
   }
 return r;
}

double caculate(double a,char ch,double b)
  {
   double r;
   switch(ch)
     {
      case '+':r=a+b;break;
      case '-':r=a-b;break;
      case '*':r=a*b;break;
      case '/':r=a/b;break;
      case '^':r=pow(a,b);break;
     }
   return r;
  }

struct optp
  {
   char s[N+2];
   int top;
  }op;

struct datp
  {
   double s[N];
   int top;
  }da;

double expred(char str[])
  {
   double r,a,b,c;
   char ch,s[N+1];   /*s[]用于存放待转换为数字的字符串*/
   int i;
   da.top=0;
   op.top=0;
   op.s[++op.top]='#';
   i=0;
   strcat(str,'#'); /*给表达式前后加上'#'*/
   while(op.s[op.top]!='#'||str[i]!='#')
     if(str[i]>='0'&&str[i]<='9'||str[i]=='.')
       {
        int j=0;
        while(str[i]>='0'&&str[i]<='9'||str[i]=='.')
          s[j++]=str[i++];
        s[j]='\0';
        r=atof(s);
        da.s[++da.top]=r;
       }
     else switch (proceed(op.s[op.top],str[i]))
            {
             case '<':op.s[++op.top]=str[i++];break;
             case '=':op.top--;i++;break;
             case '>':ch=op.s[op.top--];
                      b=da.s[da.top--];
                      a=da.s[da.top--];
                      r=caculate(a,ch,b);
                      da.s[++da.top]=r;break;
             /*case '!':ch='-';
                      b=da.s[da.top--];
                      a=0;
                      r=caculate(a,ch,b);
                      da.s[++da.top]=r;break;*/
             case 'e':exit(0);
            }

   return da.s[da.top];
  }
main()
  {
   char str[N+2];
   gets(str);
   printf("%f\n",expred(str));
   getch();
  }

回复列表 (共2个回复)

沙发

兄弟们帮忙看下丫~
一直都不知道具体是哪里出错了

板凳

终于明白咯~
strcat函数是字符串拼接函数 连接的是两个字符串 偶写的代码里# 用''括了起来而没有用"" 出错了

但是为啥还可以编译过去,还可以在栈顶找到结果 我还是不知道呢……

还请大家赐教

我来回复

您尚未登录,请登录后再回复。点此登录或注册