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 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。