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 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler