qq_24302097 2016-04-24 11:18 采纳率: 0%
浏览 1377

C编译出错,求大神解答

#include
#include
#define MaxSize 10000
#define Maxop 1
using namespace std;
struct
{
char ch;
int pri;
}lpri[] = { {'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6} },
rpri[] = { { '=',0 },{ '(',6 },{ '*',4 },{ '/',4 },{ '+',2 },{ '-',2 },{ ')',1 } };
int leftpri(char op)
{
int i;
for (i = 0;i < Maxop;i++)
if (lpri[i].ch == op)
return lpri[i].pri;
}
int rightpri(char op)
{
int i;
for (i = 0;i < Maxop;i++)
if (rpri[i].ch == op)
return rpri[i].pri;
}
bool InOp(char ch)
{
if (ch == '(' || ch == ')' || ch == '+' || ch == '-' || ch == '*' || ch == '/')
return true;
else
return false;
}
int Precede(char op1, char op2)
{
if (leftpri(op1) == rightpri(op2))
return 0;
else if (leftpri(op1) < rightpri(op2))
return -1;
else
return 1;
}
void trans(char * exp, char postexp[])
{
struct
{
char data[MaxSize];
int top;
}op;
int i = 0;
op.top = -1;
op.top++;
op.data[op.top] = '=';
while (* exp != '\0')
{
if (!InOp(* exp))
{
while (* exp >= '0'&& * exp <= '9')
{
postexp[i++] = * exp;
exp++;
}
postexp[i++] = '#' ;
}
else
switch (Precede(op.data[op.top], * exp))
{
case -1:
op.top++;
op.data[op.top] = * exp;
exp++;
break;

        case 1:
            postexp[i++] = op.data[op.top];
            op.top--;
            break;
        case 0:
            op.top--;
            exp++;
            break;
        }
}
while (op.data[op.top] != '=')
{
    postexp[i++] = op.data[op.top];
    op.top--;
}
postexp[i] = '\0';

}
float compvalue(char * postexp)
{
struct
{
float data[MaxSize];
int top;
}st;
float d, a, b, c;
st.top = -1;
while (* postexp != '\0')
{
switch (* postexp)
{
case '+':
a = st.data[st.top];
st.top--;
b = st.data[st.top];
st.top--;
c = a + b;
st.top++;
st.data[st.top] = c;
break;
case '-':
a = st.data[st.top];
st.top--;
b = st.data[st.top];
st.top--;
c = b - a;
st.top++;
st.data[st.top] = c;
break;
case '*':
a = st.data[st.top];
st.top--;
b = st.data[st.top];
st.top--;
c = a * b;
st.top++;
st.data[st.top] = c;
break;
case '/':
a = st.data[st.top];
st.top--;
b = st.data[st.top];
st.top--;
if (a != 0)
{
c = b / a;
st.top++;
st.data[st.top] = c;
}
else
{
cout<<"\n\t除零错误"< exit(0);
}
break;
default:
d = 0;
while (* postexp >= '0'&& * postexp <= '9')
{
d = 10 * d + * postexp - '0';
postexp++;
}
st.top++;
st.data[st.top] = d;
break;
}
postexp++;
}
return (st.data[st.top]);
}
int main()
{
char exp[]="(56-20)/(4+2)";
char postexp[MaxSize];
trans(exp, postexp);
cout << "中缀表达式:\n" << exp<<endl;
cout << "后缀表达式:\n" << postexp<<endl;
cout<<"表达式的值:\n"<< compvalue(postexp)<<endl;
system("pause");
return 0;

}

  • 写回答

3条回答

  • threenewbee 2016-04-24 15:47
    关注

    程序编译没有错,但是结果不对,你的运算符没有出来

    这是运行结果
    中缀表达式:
    (56-20)/(4+2)
    后缀表达式:
    56#20#4#2#)
    表达式的值:
    0
    Press any key to continue . . .

    在VC++ 6.0上编译的。

    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决