求解布尔表达式的真值 本资源摘要信息主要讲解了数据结构中栈的一个功能,即进行中缀转后缀表达式和后缀表达式的求值运算。通过本题,学生应掌握中缀表达式和后缀表达式的转换方法和后缀表达式求值问题。 本课程设计的主要任务是计算给定布尔表达式的真值。布尔表达式由“V”、“F”、“!”、“&”和“|”组成,其中,“V”代表真值True,“F”代表真值False,“!”代表逻辑非运算,“&”代表逻辑与运算,“|”表示逻辑或运算。运算符“!”、“&”和“|”的优先级为:“!”最高,“|”最低,“&”介于“!”和“|”之间。 实验设计主要包括两个功能,分别是中缀表达式转后缀表达式和后缀表达式求真值两个函数。在中缀转后缀的运算中,定义czf,用以存放逻辑运算符;在计算真值的函数中,定义ss,用以存放字符。后缀表达式的存储问题上,并不需要太多的功能,所以就选择使用char型数组进行存储。 中缀转后缀表达式函数chpost成员功能Inorder[]存储输入的字符串栈czf用以暂时存放运算符Post[]用来存储结果后缀表达式求真值yunsuan成员功能布尔表达式中缀转后缀函数chpost1.建立栈czf用以存储逻辑运算符,2.建立post数组用来存放后缀表达式后缀表达式真值计算函数yunsuan1.建立栈ss用来存储字符V、F以及运算结果。 在遍历后缀表达式的过程中,遇到不同的字符,采用不同的解决方法。栈ss用来暂时存放V、F以及每一步的运算结果post沿用上一个函数的结果-后缀表达式。 用户手册:程序运行时,首先会看到提示:“请输入布尔表达式(中缀表达式,以#结束)”;输入布尔表达式之后,敲击回车会得到:“转换后,后缀表达式为:*”;以及“该式真值为:*”;此时程序结束。 调试及测试:运行结果:1.2.3.5.完善:基本上已完成实验要求的功能,进行拓展的话,可以进行一些统计功能。比如下面的两个功能:1.统计输入的括号的总数:可以在程序的第一个函数——中缀转后缀表达式中添加一些代码,添加统计输入的括号的个数。2.统计进行运算的次数:能在第二个函数——后缀表达式函数中添加统计进行运算的次数的功能。 源代码: ```cpp #include<iostream> #include<string.h> using namespace std; template<class T>//T 是数据类型 class Stack{ //定义类模版 public: Stack(){ Top = 0; } T top(){ return a[Top]; } void pop(){ Top--; } bool isempty(){ if (Top == 0)return true; else return false; } void push(T b) { Top++; a[Top] = b; } private: T a[100]; int Top; }; void chpost(char inorder[], char post[], int &m){ int n = strlen(inorder); Stack<char>czf; for (int i = 0; i < n; i++){ if ((inorder[i]=='V')||(inorder[i]=='F')){ post[m] = inorder[i]; m++; } if (inorder[i] == '(') czf.push(inorder[i]); if (inorder[i] == '!') czf.push(inorder[i]); if (inorder[i] == '&'){ if (!czf.isempty() && (czf.top() == '!')){ post[m++] = czf.top(); czf.pop(); czf.push(inorder[i]); }else{ czf.push(inorder[i]); } } if (inorder[i] == '|') //... ``` 通过本资源摘要信息,我们可以学习到中缀表达式和后缀表达式的转换方法和后缀表达式求值问题,并掌握栈的应用和C++编程技术。
剩余9页未读,继续阅读
- AnimaSeed2014-09-24非常有用,非常感谢
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助