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

数学与信息学院实验报告[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 比特) 运算...
数据结构实验报告[3]
数据结构实验报告[3]_工学_高等教育_教育专区。云南大学 数据结构实验报告 第三...采用链表存储若干学生的成绩信息; 输入学生的学号、语文、数学、英语成绩;计算...
实验报告二 两数运算实验
实验报告二 两数运算实验_数学_自然科学_专业资料。信息工程学院实验报告课程名称...第 3 页共 3 页 图 2-3 程序编辑界面 (5) 点击 ,编译文件,若程序编译...
信息论与编码实验报告-信源熵值的计算
信息论与编码实验报告-信源熵值的计算_数学_自然科学_专业资料。信息论与编码实验...程序流程图: 2 三、实验内容 1、写出计算信息量的 Matlab 程序 2、已知:...
信息论与编码实验报告
信息论与编码实验报告_数学_自然科学_专业资料。实验一:唯一可译码判别准则;实验二:Huffman编码 信息论与编码实验报告 学院: 计算机与通信工程学院 专业: 计算机科...
信息论实验报告
信息实验报告_数学_自然科学_专业资料。《信息论基础...计通学院 计算机 1003 翟文洁 41050270 专业班级 ...3. 4. 计算出各个信源符号的累加概率: ?1 F(...
信息论与编码实验报告-信道容量的迭代算法
信息论与编码实验报告-信道容量的迭代算法_数学_自然科学_专业资料。信息论与编码...学习如何将复杂的公式转化为程序; 3、熟悉程序设计语言的数值计算程序调试技术...
《信息安全技术》实验报告
信息安全技术》实验报告_数学_自然科学_专业资料。...如图 2 图2 3 常熟理工计算机科学与工程学院 《...计算机科学与工程学院 《网络安全》 实验报告 算机...
信息论实验报告
信息论实验报告_数学_自然科学_专业资料。Harbin Institute...器实验 院班姓学序系: 电子与信息工程学院 级: ...图 3-4 梅吉特译码器原理图 3.3.2 梅吉特...
第一次数据库实验(安装SQLSERVER)
第一次数据库实验(安装SQLSERVER)_计算机软件及应用_IT/计算机_专业资料。数学与...2 数学与信息技术学院-数据库技术试验报告 3) 在“SQL Server 组件更新”页...
更多相关标签: