用C++求表达式求值
答案:1 悬赏:80 手机版
解决时间 2021-12-03 01:30
- 提问者网友:那叫心脏的地方装的都是你
- 2021-12-02 21:10
用C++求表达式求值
最佳答案
- 五星知识达人网友:夜风逐马
- 2021-12-02 22:47
以下代码已经编译运行通过:
#include
#include
#include
#include
#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]);
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 printf("%c",str[j]);
printf("\n岪?昞?帏惀: ");
for(j=1;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();
}
#include
#include
#include
#include
#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]);
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
printf("\n岪?昞?帏惀: ");
for(j=1;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();
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯