C语言一般式转变为逆波兰式,乘除法无法正确实现

是打滴 2018-05-19 03:34:30

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 99
void translate(char str[],char exp[])
{
struct
{
char data[MaxSize];
int top; //top为栈顶
}op;
char ch;
int i = 0,t = 0;
op.top = -1;
ch = str[i]; //将str的每一个数转换成ch
i++;
while(ch != '\0') //ch对应不同的符号的时候对应的转换情况
{
switch(ch)
{
case '(': //当是(的时候,将此括号存入栈op
op.top++;
op.data[op.top]=ch;
break;
case ')':
while(op.data[op.top] != '(') //括号内的转换优先级最高,故先提取表达式
{
exp[t]=op.data[op.top];
op.top--;
t++;
}
op.top--; //把(出栈
break;
case '+':
case '-':
while(op.top != -1&&op.data[op.top] != '(')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++; //+ or -入栈
op.data[op.top] = ch;
break;
case '*':
case '/':
while(op.top == '*'||op.top == '/')
{
exp[t] = op.data[op.top];
op.top--;
t++;
}
op.top++;
op.data[op.top] = ch;
break;
default:
while(ch >= '0'&&ch <= '9')
{
exp[t] = ch;
t++;
ch = str[i];
i++;
}
i--; //把上面default多出的i减去
exp[t] = ' ';
t++;
}
ch = str[i];
i++;
}
while(op.top != -1)
{
exp[t] = op.data[op.top];
t++;
op.top--;
}
exp[t] = '\0';
}
float cal_value(char exp[])
{
struct
{
float data[MaxSize];
int top;
}st;
float d;
char ch;
int t = 0;
st.top = -1;
ch = exp[t];
t++;
while(ch != '\0')
{
switch(ch)
{
case '+':
st.data[st.top-1] = st.data[st.top-1]+st.data[st.top];
st.top--;
break;
case '-':
st.data[st.top-1] = st.data[st.top-1]-st.data[st.top];
st.top--;
break;
case '*':
st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];
st.top--;
break;
case '/':
if(st.data[st.top] != 0)
st.data[st.top-1]=st.data[st.top-1]/st.data[st.top];
else
{
printf("\n\t除0是错误的");
}
st.top--;
break;
default:
d=0;
while(ch >= '0'&&ch <= '9')
{
d = 10*d+ch-'0';
ch = exp[t];
t++;
}
st.top++;
st.data[st.top] = d;
}
ch = exp[t];
t++;
}
return st.data[st.top];
}
int main()
{
char str[MaxSize],exp[MaxSize];
printf("请输入一个求值表达式\n");
printf("表达式:");
gets(str);
printf("原表达式是:%s\n",str);
translate(str,exp);
printf("后缀表达式:%s\n",exp);
printf("计算结果:%g\n",cal_value(exp));
system("pause");
return 0;
}
...全文
1051 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-05-21
  • 打赏
  • 举报
回复
百度搜相关关键字。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧