2 qq 24302097 qq_24302097 于 2016.04.24 19:18 提问

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个回答

caozhy
caozhy   Ds   Rxr 2016.04.24 23:47

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

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

在VC++ 6.0上编译的。

qq_24302097
qq_24302097   2016.04.25 20:24

对就是这样,但是我不太清楚哪里错了

qq_24302097
qq_24302097   2016.04.25 20:24

对就是这样,但是我不太清楚哪里错了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!