用C++求表达式求值

问题描述:从键盘上输入一个中缀表达式以#号结束,通过调用表达式求值算法求出表达式的值。提示:用两个栈实现:一个操作数栈,一个操作符栈。... 问题描述:从键盘上输入一个中缀表达式以#号结束,通过调用表达式求值算法求出表达式的值。
提示:用两个栈实现:一个操作数栈,一个操作符栈。
展开
 我来答
希声和寡
2008-12-16 · TA获得超过2.6万个赞
知道大有可为答主
回答量:6437
采纳率:0%
帮助的人:3467万
展开全部
以下代码已经编译运行通过:
#include<conio.h>

#include <stdlib.h>
#include<stdio.h>
#include<math.h>
#define max 100
char ex[max];
void trans()
{
char str[max];
char stack[max];
char ch;
int sum,j,t,top=0;
int i=0;/*?悢婍*/
printf("*****************************************\n");
printf("*?柧:埲 # 崋??恳?巙.\n");
printf("******************************************\n");
printf("昞?帵: ");
do
{
i++;
scanf("%c",&str[i]); /*拲: str[0]杤桳悢悩*/
if(i>=max) printf("昞?帏?搙??!");
}while(str[i]!='#' && i!=max);
sum=i; /*悢??搙,懄昞?帏?搙*/
t=1;
i=1;
ch=str[i];
i++;
while(ch!='#')
{
switch(ch)
{
case '(': top++;
stack[top]=ch;break;
case ')': while(stack[top]!='(')
{
ex[t]=stack[top];
top--;
t++;
}
top--;break;
case '+':
case '-': while(top!=0&&stack[top]!='(')
{
ex[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;break;
case '*':
case '/': while(stack[top]=='*'||stack[top]=='/')
{
ex[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;break;
case ' ': break;
default: while(ch>='0'&&ch<='9')
{
ex[t]=ch;
t++;
ch=str[i];
i++;
}
i--;
ex[t]='&';
t++;
}
ch=str[i];
i++;
}
while(top!=0)
if(stack[top]!='(')
{
ex[t]=stack[top];
t++;
top--;
}
else
{
printf("error");
top--;
exit(0);
}
ex[t]='#';
printf("\n尨昞?帏惀: ");
for(j=1;j<sum;j++)
printf("%c",str[j]);
printf("\n岪?昞?帏惀: ");
for(j=1;j<t;j++)
printf("%c",ex[j]);
}
void compvalue()
{
float stack[max],d;
char ch;
int t=1,top=0;
ch=ex[t];
t++;
while(ch!='#')
{
switch(ch)
{
case '+': stack[top-1]=stack[top-1]+stack[top];/*崻悩?屿晞,?岘巐??屿*/
top--;break;
case '-': stack[top-1]=stack[top-1]-stack[top];
top--;break;
case '*': stack[top-1]=stack[top-1]*stack[top];
top--;break;
case '/': if(stack[top]!=0)
stack[top-1]=stack[top-1]/stack[top];
else
{
printf("\n\tchu0error!\n");
exit(0);
}
top--;break;
default: d=0;/*敾抐惀斲?悢帤,惀?彨悢帤帤晞?壔???揑悢?,涹擖?*/
while(ch>='0'&&ch<='9')
{
d=10*d+ch-'0';
ch=ex[t];
t++;
}
top++;
stack[top]=d;
}
ch=ex[t];
t++;
}
printf("\n?屿?壥?: %g\n",stack[top]);
}

void main()
{
trans();
compvalue();

getch();
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式