表达式求值
2017-06-05 17:06
127 查看
利用算数运算符的优先关系,实现对算术四则混合运算表达式的求值。
要求:
(1)表达式包含的运算符只能有'+'
、'-' 、'*'
、'/' 、'('、 ')';
输入的形式:如2*(3+4)
(2)输出的形式:例如2*(3+4)=14;
老规矩,没有错误,均可运行
{
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除数不可以为零!\n");
exit(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];
}
void main()
{ char str[MaxSize]={"\0"},exps[MaxSize]={"\0"};
printf("请输入含有 +-*/()的表达式:");
gets(str);
trans(str,exps);
printf("%s=",str);
printf("%.2f\n",compvalue(exps));
}
要求:
(1)表达式包含的运算符只能有'+'
、'-' 、'*'
、'/' 、'('、 ')';
输入的形式:如2*(3+4)
(2)输出的形式:例如2*(3+4)=14;
老规矩,没有错误,均可运行
#include <stdio.h> #include <stdlib.h> #define MaxSize 30 void trans(char str[],char exp[]) { struct { char data[MaxSize]; int top; } op; char ch; int i=0,t=0; op.top=-1; ch=str[i]; i++; while(ch!='\0') { switch(ch) { case '(' : 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++; op.data[op.top]=ch; break; case '*' : case '/' : while(op.data[op.top]=='*' || op.data[op.top]=='/') { exp[t]=op.data[op.top]; op.top--; t++; } op.top++; op.data[op.top]=ch; break; case ' ' : break; default : while(ch>='0' && ch<='9') { exp[t]=ch; t++; ch=str[i]; i++; } 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 compvalue(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除数不可以为零!\n");
exit(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];
}
void main()
{ char str[MaxSize]={"\0"},exps[MaxSize]={"\0"};
printf("请输入含有 +-*/()的表达式:");
gets(str);
trans(str,exps);
printf("%s=",str);
printf("%.2f\n",compvalue(exps));
}
相关文章推荐
- NOIP2013普及组 T2 表达式求值
- (学习日记)裘宗燕:C/C++ 语言中的表达式求值
- 字符串转化为数学表达式并求值(后缀表达式)
- 中缀表达式转后缀表达式求值(模板)
- 带括号的四则运算表达式的求值(栈实现)
- 网易2017春招编程题:奇怪的表达式求值 [python]
- 栈的应用——四则表达式求值
- 数据结构表达式求值
- 关于C/C++ 表达式求值顺序
- [LeetCode] 逆波兰表达式求值
- C++利用链栈实现表达式求值
- [原创]表达式求值:经典算法 <Java版本>
- 表达式求值运算规则
- 表达式求值
- OpenJudge计算概论-简单算术表达式求值
- CF552E 字符串 表达式求值
- 表达式求值
- 表达式求值
- nyoj 35 表达式求值(栈)
- NYOJ35 表达式求值【栈】