xiaoxiaojinglinger 2020-02-06 18:56 采纳率: 0%
浏览 350

用的DEV C++,运行出的答案是错误的,答案中有乱码

用的DEV C++,运行出的答案是错误的,答案中有乱码

#include<iostream>
#include <stdlib.h>
using namespace std;
typedef int SElemType;
#define STACK_INIT_SIZE 100  
#define STACKINCREMENT 10 
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
int InitStack(SqStack &s){
    s.base=new SElemType(STACK_INIT_SIZE);
    if(!s.base) exit(0);
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return 1;
}
int Push(SqStack &s,SElemType e){
    if(s.top-s.base==s.stacksize)
        return 0;
        *s.top++=e;
        return 1;
}
int Pop(SqStack &s,SElemType &e){
    if(s.top==s.base)
        return 0;
        e=*--s.top;
        return 1;
}
SElemType GetTop(SqStack s){
    if(s.top!=s.base)
        return *(s.top-1);
    else
        return 0;
}
SElemType Precede(SElemType t1,SElemType t2){
    SElemType f;
    switch(t2)
    {
    case '+':
    case '-':
        if(t1=='('||t1=='#')
            f='<';
        else
            f='>';
        break;
    case '*':
    case '/':
        if(t1=='*'||t1=='/'||t1==')')
            f='>';
        else
            f='<';
        break;
    case '(':
        if(t1==')')
        {
            printf("ERROR1\n");
            exit(0);
        }
        else
            f='<';
        break;
    case ')':
        switch(t1)
        {
        case '(':
            f='=';
            break;
        case '#':
            printf("ERROR2\n");
            exit(0);
        default:
            f='>';
        }
        break;
    case '#':
        switch(t1)
        {
        case '#':
            f='=';
            break;
        case '(':
            printf("ERROR3\n");
            exit(0);
        default: 
            f='>';
        }
    }
    return f;
}
int In(SElemType c){
    switch(c){
        case'+':return true;
        case'-':return true;
        case'*':return true;
        case'/':return true;
        case'(':return true;
        case')':return true;
        case'#':return true;
        default:return false;
    }
}
SElemType Operate(SElemType a,SElemType theta,SElemType b){
    SElemType c;
    a=a-48;
    b=b-48;
    switch(theta){
        case'+':c=a+b+48;
            case'-':
        c=a-b+48;
        break;
        case'*':
        c=a*b+48;
        break;
        case'/':c=a/b+48;
    }
    return c;
}
char EValuateExpress(){
    SqStack OPTR,OPND;
    SElemType a,b,c,ch,theta;
    InitStack(OPND);
    InitStack(OPTR);
    Push(OPTR,'#');
    cin>>ch;
    cout<<ch; 
    while(c!='#'||GetTop(OPTR)!='#'){
        if(!In(c)) 
        {
            Push(OPND,ch);
            cin>>ch;
        }
        else
        switch(Precede(GetTop(OPTR),ch)){
            case'<':
                Push(OPTR,ch);
                cin>>ch;
                break;
            case'>':
                Pop(OPTR,theta);
                Pop(OPND,b);
                Pop(OPND,a);
                Push(OPND,Operate(a,theta,b));
                break;
            case'=':
                Pop(OPTR,ch);
                cin>>ch;
                break;
        }
        return GetTop(OPND);
    }
}
int main(){
        cout<<"请输入算术表达式,并以#结束"<<endl;
        cout<<EValuateExpress()<<endl; 
    }

  • 写回答

2条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮