当前位置:首页 >> 管理学 >>

数学与信息学院实验报告[3]表达式计算


数学与信息学院实验报告









院系名称: 院系名称:数学与信息学院
2011 年 11 月 实验题目 表达式计算 课程名称 数据结构 学生姓名 周雪琴 任课教师 实验学时 班级学号

程国忠 2
10 级 11 班 201008341 201008341144

一、 实验目的与任务
1.掌握 C 语言基本数据类型的概念,理解数据类型与运算的关系。 . 语言基本数据类型的概念,理解数据类型与运算的关系。 2.熟悉简单变量的定义和赋值方法,掌握不同类型数据之间赋值的规律。 .熟悉简单变量的定义和赋值方法,掌握不同类型数据之间赋值的规律。 3.学习 C 语言运算符优先级和结合性的概念,掌握算术表达式的计算方法及 . 语言运算符优先级和结合性的概念, 表达式计算中的类型转换方法。 表达式计算中的类型转换方法。 4.掌握数学表达式的程序表示方法。 .掌握数学表达式的程序表示方法。 5.进一步熟悉 C 程序的编辑、编译、连接和运行的过程 . 进一步熟悉 程序的编辑、编译、 6.强对栈、树等数据结构的理解,锻炼学生使用多种数据结构解决问题的综 .强对栈、树等数据结构的理解, 合能力。 合能力。

二、实验涉及的相关知识点
1.变量的定义与表达式的计算 变量的定义与表达式的计算 2.循环语句与 IF 条件语句 条件语句。 循环语句与

三、实验内容与过程
(1)能进行一般四则运算“+ )能进行一般四则运算“ - * /”。 。

数学与信息学院实验报告

(2) )要有表达式求值功能,如在屏幕上输入一个表达式 (8+2-5) 要有表达式求值功能, 如在屏幕上输入一个表达式“ “ )*6/10” ” , 程序能够计算其值。 程序能够计算其值。

四、实验结果及分析

五、实验相关说明
1.注意运算的优先级与表达式的结合。 注意运算的优先级与表达式的结合。 注意运算的优先级与表达式的结合 2.合理运用程序求一些相应表达式的值。 合理运用程序求一些相应表达式的值。 合理运用程序求一些相应表达式的值

六、实验有关附件(如程序、附图、参考资料,等)
#include<iostream> #include<string> #include <vector> #include <stack> #include <math.h>

数学与信息学院实验报告

using namespace std; vector<string> split(string exp){ size_t i = 0,len = exp.length(),j = 0; vector<string> temp; for (i = 0;i < len; ) { if (exp[i] == ' '||exp[i] == ' ') { i ++; continue; } if (exp[i] == '('|| exp[i] == ')'||exp[i] == '+'||exp[i]

=='-'||exp[i]=='*'||exp[i] == '/') { temp.push_back(exp.substr(i,1)); i ++; continue; } if (exp[i] >= '0' && exp[i] <= '9'||exp[i] == '.') { for (j = i;exp[j] >= '0' && exp[j] <= '9'||exp[j] == '.'; j ++); temp.push_back(exp.substr(i,j - i)); i = j; continue; }

数学与信息学院实验报告

} return temp; } string str[] = {"+","-","*","/","(",")","#"}; string Precede(string optr1,string optr2){ int i = 0,j = 0; string biao[7][7] = {{">",">","<","<","<",">",">"}, {">",">","<","<","<",">",">"}, {">",">",">",">","<",">",">"}, {">",">",">",">","<",">",">"}, {"<","<","<","<","<","="," "}, {">",">",">",">",">",">",">"}, {"<","<","<","<","<"," ","="}}; for (i = 0;i < 7;i ++) if (optr1 == str[i]) break; for (j = 0 ;j < 7;j ++) if (optr2 == str[j]) break; return biao[i][j]; }

double Operate(double a,string opt,double b){ if (opt == "+") {

数学与信息学院实验报告

return a + b; } else if (opt == "-") { return a - b; } else if (opt == "*") { return a * b; } else if (opt == "/") { return a / b; } cout<<"无效操作符!"; return 0.0; } double iEvaluateExpression(vector<string> exps){ stack<string> OPTR; stack<double> OPND; OPTR.push("#"); unsigned int i = 0;

数学与信息学院实验报告

while (i < exps.size() && (exps[i] != "#" || OPTR.top() != "#")) { if (exps[i] != "+" && exps[i] != "-" && exps[i] != "*" && exps[i] != "/" && exps[i] != "(" && exps[i] != ")" && exps[i] != "#") { OPND.push(atof(exps[i].c_str())); i ++; } else { if (Precede(OPTR.top(),exps[i]) == "<") { OPTR.push(exps[i]); i ++; } else if (Precede(OPTR.top(),exps[i]) == "=") { OPTR.pop(); i ++; } else if(Precede(OPTR.top(),exps[i]) == ">") { string opt = OPTR.top();

数学与信息学院实验报告

OPTR.pop(); double b = OPND.top(); OPND.pop(); double a = OPND.top(); OPND.pop(); OPND.push(Operate(a,opt,b)); } } } return OPND.top(); } void main() { string exp,chioce; while(true){ cout<<endl<<" "<<endl<<endl; cout<<"***************************************************"< <endl; cout<<"* *"<<endl; cout<<"* *"<<endl; cout<<"* *"<<endl; A(a): 计 算 表 达 式 简单表达式计算程序

数学与信息学院实验报告

cout<<"* "<<endl; cout<<"* *"<<endl;

B(b): 退出程序

*

cout<<"***************************************************"<<end l<<endl; cout<<"请输入你的选择: "; cin>>chioce; cout<<endl; if (chioce == "A" || chioce == "a") { cout<<"请输入表达式: cin>>exp; vector<string> temp = split(exp); temp.push_back("#"); cout<<endl<<"计算结果: "<<iEvaluateExpression(temp)<<endl; } else{ break; } } } ";


相关文章:
实验2-数字签名实验报告
实验2-数字签名实验报告_数学_自然科学_专业资料。...学院: 计算机科学与工程 一、实验目的理解 MD5 与 ...从方面进行比较: 安全性: SHA-1 比特) 运算...
哈夫曼树编码实验报告
哈夫曼树编码实验报告_计算机软件及应用_IT/计算机_...为哈夫曼树编码 3 4 数学学院数学数学 1 班...{//读入哈夫曼树的叶子结点信息 cout<<"请输入第...
中北大学信息与编码软件仿真实验报告
中北大学信息与编码软件仿真实验报告_数学_自然科学_...成绩 信息与通信工程学院实验报告(软件仿真性实验)...学会使用软件进行信源熵的计算3.学会使用软件...
信息论与编码实验报告-信道容量的迭代算法
信息论与编码实验报告-信道容量的迭代算法_数学_自然科学_专业资料。信息论与编码...学习如何将复杂的公式转化为程序; 3、熟悉程序设计语言的数值计算程序调试技术...
数学实验报告
数学实验报告_信息与通信_工程科技_专业资料。matlab实验报告 实验六练习一 1. ...x 在 x=0 处的泰勒展开式,分别计算 2 、 3 的近似值,精度为 10^(-4)...
信息论实验报告
信息论实验报告_数学_自然科学_专业资料。Harbin Institute...器实验 院班姓学序系: 电子与信息工程学院 级: ...图 3-4 梅吉特译码器原理图 3.3.2 梅吉特...
实验报告
计算机与信息学院数学实验报告(一)系: 信息与计算科学 姓名: 赵丽娟 实验室...(3)如果乙的进货价格下降为13千元/t,则目标函数的表达式发生改变,其他条件均...
信息论与编码实验报告-信源熵值的计算
信息论与编码实验报告-信源熵值的计算_数学_自然科学_专业资料。信息论与编码...程序流程图: 2 三、实验内容 1、写出计算信息量的 Matlab 程序 2、已知:...
线性代数实验报告
信息 31 信息 31 信息 31 信息 31 学号 ...(2)分别计算下列各式:2A-B,A*B A.*B,AB^...数学实验报告(线性代数) 8页 3下载券 《线性代数...
操作系统实验报告 (5)
操作系统实验报告 (5) - 怀化学院 数学信息与计算科学专业 《操作系统》 实验报告 实验名称:存储管理 学号 班级 姓名 1 实验目的: 存储管理的主要功能之一是...
更多相关标签: