#include <iostream.h>
#include "def_stack.cpp"
//优先级的设置,加减运算为1级,乘除运算为2级,不包括括号在内,其他算为0
//description:
int precedure (char op)
{switch (op)
{ case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
default: return 0;
}
}
//中缀变后缀 转换前后,表达式的数值项的次序不变,而运算符的次序发生了变化,由处在
//两个运算对象的中间变为处在两个运算符对象的后面,为了使转换正确,比须设定一个运算符栈,此栈
//用来保存扫描中缀表达式得到的暂不能放入后缀表达式的运算符,待它的两个运算对象都放入到后缀表
//达式中,再令其出栈并写入后缀表达式
//description:
void change(char *s1, char *s2)
{
int i=0, j=0;
char ch=s1[i];
char x;
sqstack *r;
initstack(r);
while ((ch<='9'&&ch>='0')||ch=='.'){
s2[j++]=ch;
ch=s1[++i];
}
s2[j++]=' ';
if (ch=='+'||ch=='-'||ch=='*'||ch=='/')
{if (emptystack(r)==0){
gettop(r,x);
while (!emptystack(r)&&precedure(x)>=precedure(ch))
{s2[j++]=x; s2[j++]=' ';
pop(r,x);
gettop(r,x);
}
}
push(r,ch); ch=s1[++i];
while (!emptystack(r)){s2[j++]=ch; s2[j++]=' ';
pop(r,ch);
}s2[j++]='\0';
}
}
// 计算后缀表达式的值
/* 扫描一遍后缀表达式,使用一个栈,用此栈存储后缀表达式中的操作数,计算过程中的一些中间结果以及最后结果
//description:
float com(char *str)
{int i=0;
float x1,x2,l;
sqstack *r;
initstack(r);
while (str[i]!='\0'){
switch(str[i]){
case '+': pop(r,x1); pop(r,x2); l=x1+x2; i++; break;
case '-': pop(r,x1); pop(r,x2); l=x1-x2; i++; break;
case '*': pop(r,x1); pop(r,x2); l=x1*x2; i++; break;
case '/': pop(r,x1); pop(r,x2);
if (x2!=0.0){l=x1/x2; i++;}
else cout<<"it is illegal"<<'\n';
break;
while (str[i]!=' '){l=l*10+(str[i]-'0');i++;}break;
}
push(r,l);
i++;
}
if(!emptystack(r)){pop(r,l);}
if(emptystack(r)) return l;
else{cout<<"the expression has errors"<<'\n';}
cout<<"the stack is empty";
}
void main()
{char a[30]; char b[30];
float f;
cout<<"please input an expression"<<'\n';
cin.getline(a,30);
cin.getline(b,30);
change(a,b);
f=(float)com(b);
cout<<"the result is"<<'\t'<<f;
}
blx.rar_operation
版权申诉
85 浏览量
2022-09-19
22:51:46
上传
评论
收藏 8KB RAR 举报
周楷雯
- 粉丝: 80
- 资源: 1万+
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈