下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、四川大学计算机学院 学生实验报告 实验名称:带括号的算术表达式求值指导教师: 姓名: 学号:班级: 日期:2010年1月6日实验一:带括号的算术表达式求值一、实验的环境:指硬件和软件环境1.硬件环境:一台计算机2.软件环境:使用Windows XP操作系统,编译系统的版本为Visual C+ 6.0集成开发软件环境,该编辑软件使用方便,功能强大。二、算法描述:伪语言描述:为使本程序清晰易读,将整个代码写在一个main.cpp文件中。整个文件由四个函数构成,分别是:主函数(main),优先级判断函数(rank),执行纯粹的四则运算计算任务的函数(cal)和按照优先
2、级别进行计算操作的函数(Calculate)。现在对每一个函数的功能做一简介。rank函数实现对输入计算的表达式中的每一个符号进行优先级运算,如:输入(,则优先级为1,输入+或者-,则优先级为2,输入*或/,则优先级为3,目的是为后面的函数Calculate 进行进栈出栈操作和计算提供优先级信息。cal函数的作用是简单机械地遇到四则运算就进行简单的计算。如:遇到+就执行加法运算,它是受到函数Calculate调用的。本程序的核心函数是Calculate,它依靠两个栈,名叫fuhao和num对符号和数字进行进栈出栈操作,在该过程中实现对运算表达式的有效计算。其中在进栈过程中要有效地实现从字符串中
3、取出有效的运算数字,主要由如下代码实现:for(i=0;i<s.size();+i) if( isdigit( si) ) while( isdigit( si ) ) x=si-'0'+10*x; i=i+1; 最后要说的就是主函数main,它的功能是读取表达式,然后用前面的函数Calculate实现计算,最后得出结果并输出结果。其他代码相见下面的源程序清单。三、源程序清单:#include <iostream>#include <string>#include <stack>using namespace std;int rank(
4、char a) /用于计算优先级if(a='(') return 1;else if(a='+'|a='-') return 2;else if(a='*'|a='/') return 3;else return 0;stack<char> fuhao; /操作符栈stack<double> num; /操作数栈void Cal(); /函数声明 用于计算double Calculate(const string &s) double result=0.0;fuhao.push(
5、39;0');int i,x=0; for(i=0;i<s.size();+i) if( isdigit( si) ) while( isdigit( si ) ) x=si-'0'+10*x; i=i+1; num.push(x); x=0; i=i-1; else if(si='(') fuhao.push(si); else if(si=')') while(fuhao.top()!='(') Cal(); fuhao.pop(); else if( rank(si) > rank(fuhao.top()
6、 ) | fuhao.top()='0') fuhao.push(si); else if( (rank(fuhao.top() >= rank(si) && (fuhao.top()!='0') Cal(); fuhao.push(si); while( fuhao.top()!='0' ) Cal(); result = num.top(); return result; void Cal() double t=0.0;char ch;ch=fuhao.top(); switch(ch) case '+'
7、: t=num.top(); num.pop(); t=num.top()+t; num.pop(); num.push(t); fuhao.pop();break; case '-': t=num.top(); num.pop(); t=num.top()-t; num.pop(); num.push(t); fuhao.pop();break; case '*': t=num.top(); num.pop(); t=num.top()*t; num.pop(); num.push(t); fuhao.pop();break; case '/': t=num.top(); num.pop(); t=num.top()/t; num.pop(); num.push(t); fuhao.pop();break; case '0':break; int main(void) cout<<"请输入正确的运算表达式:" string s; cin>>s; cout<<s<<'='<<Calculate(s)<<endl; return 0;四、运行结果:五、实验运行情况分析 本实验没有提供对输入的表达式进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二章 第二节 《离子反应》教学设计化学
- 九年级历史下册(部编版)第9课 列宁与十月革命(教学设计)
- 短跑:学习站立式起跑教案
- 浙教版(2023)信息科技四上 第10课 从数据到编码 教案
- 详写显重点细节隐真情-初中语文七年级下册10《阿长与山海经》情境教学设计
- 花城版小学音乐二年级下册第三课有个洋娃娃教案
- 第3节 变换造型教案 三年级上册
- 墙面大理石粘贴冬季施工方案
- 2024年夫妻带两家出行旅游协议书范文
- 《计算机网络安全防护技术(第二版)》 课件 第3章-任务3.5 探究数字证书和架设SSL网站
- 洗浴中心运营策划方案
- 《制备色谱应用》课件
- 《冷冲压工艺与模具设计》课程标准
- GB/T 5700-2023照明测量方法
- 2024年大唐华银电力股份有限公司招聘笔试参考题库含答案解析
- zippo-2021(中国)产品图册
- O型密封圈压缩量计算
- 增值服务具体方案怎么写范文
- 初一(七年级)英语完形填空共50篇
- 中长跑大单元教学计划
- 第四单元单元研习+教学设计 统编版高中语文选择性必修中册
评论
0/150
提交评论