| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:表达式求值,不知道哪里错了,可以执行但没结果,求高手帮忙啊!
取消只看楼主 加入收藏
pingweiqiang
Rank: 1
来 自:兴平
等 级:新手上路
帖 子:30
专家分:9
注 册:2010-3-15
结帖率:57.14%
收藏
已结贴  问题点数:20 回复次数:0 
表达式求值,不知道哪里错了,可以执行但没结果,求高手帮忙啊!
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define stackinitsize 100
struct sqstack
{  char *base;
  char *top;
   char stacksize;};
 initstack(struct sqstack &s)
{ s.base=(char*)malloc(stackinitsize*sizeof(char));
   s.top=s.base;
   s.stacksize=stackinitsize;return 1;
}

push1(struct sqstack &s,char c)
{*s.top=c;
s.top++;
 return c;}

 push2(struct sqstack &s,int p)
{*s.top=p;
s.top++;

 return p;}
gettop1(sqstack s,char c)
{if(s.top==s.base)return 0;
c=*(s.top-1);
return c;
}

gettop2(sqstack s,int p)
{if(s.top==s.base)return 0;
p=*(s.top-1);
return p;
}
pop1(struct sqstack &s,char c)
{if(s.base==s.top)return 0;
  else c=*--s.top;
  return c;}

pop2(struct sqstack &s,int p)
{if(s.base==s.top)return 0;
  else p=*--s.top;
  return p;}
char precede(char t1,char t2)
{ char f;
 switch(t2)
 {case'+':
      if(t1=='('||t1=='#')
          f='<';
       else f='>';
 case'-':
      if(t1=='('||t1=='#')
          f='<';
      else f='>';
      break;
 case'*':
     if(t1=='*'||t1=='/'||t1==')')
         f='>';
      else f='<';
 case'/':
    if(t1=='*'||t1=='/'||t1==')')
        f='>';
    else f='<';
 case'(':
    if(t1==')')
    {printf("error\n");}
 case')':
    if(t1=='#')
    {printf("error\n");};
     if(t1=='(')f='=';
    else f='>';
case'#':
    if(t1=='(')printf("error\n");
     else if(t1=='#')f='=';
     else f='>';
     }return f;
}
in(char c)
{
    switch(c){
    case '+':
    case '-':
    case '*':
    case '/':
    case '(':
    case ')':
    case '#':return 1;
    }
}

int operate(int a,char theta,int b)
{int c;
switch(theta)
{case'+':c=a+b;break;
case'-':c=a-b;break;
case'*':c=a*b;break;
case'/':c=a/b;break;}
return c;}

main()
{char c;
sqstack optr,opnd;
int p;
int a;
int b;
char theta;
char t1;
initstack(optr);
initstack(opnd);

printf("input expressions end with '#'\n");
push1(optr,'#');
c=getchar();
while(c!='#'||gettop1(optr,c)!='#')
{if(!in(c)){
    push2(opnd,p);
    c=getchar();}
else
switch(precede(t1,c))
{case'<':push1(optr,c);
        c=getchar();
        break;
case'=':pop1(optr,c);
    c=getchar();
    break;
case'>':pop1(optr,theta);
        pop2(opnd,b);
        pop2(opnd,a);
        push2(opnd,operate(a,theta,b));
        break;}
}
    gettop2(opnd,p);
  printf("%d",p);
}
搜索更多相关主题的帖子: 求值 结果 表达 
2010-06-26 20:39
快速回复:表达式求值,不知道哪里错了,可以执行但没结果,求高手帮忙啊!
数据加载中...
 
   



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

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