数据结构表达式求值(计算器)实验报告(共10篇)
数据结构表达式求值(计算器)实验报告(共10篇)
数据结构课程设计_实验报告(一)表达式求值(计算器)
数据结构课程设计 实验报告
起止时间:2015.12.28-2015.12.31
附件:(程序源代码)
#includestdio.h
#includestdlib.h
#includestring.h
#includemath.h
#define N 100
#define pai 3.1415926
typedef struct yxj
{
char operat;
int rank;
}yxj;
typedef struct str
{
char data[N];
}zs;
void sjhs(void)
{
char s[10],a[10];
double y,x;
printf(请输入(sin cos tan 角度制)表达式:\n);
scanf(%s,s);
if(strstr(s(来自:www.XIelw.Com 写 论文网:),sin)!=0)
{
int i=0,j=0;
while(s[i]!='\0')
{
if(s[i]='0'&&s[i]='9')
s[j++]=s[i];
i++;
}
s[j]='\0';
x=atof(s);
y=sin(x*pai/180);
}
else if(strstr(s,cos)!=0)
{
int i=0,j=0;
while(s[i]!='\0')
{
if(s[i]='0'&&s[i]='9')
s[j++]=s[i];
i++;
}
篇二:数据结构算术表达式求值实验报告
软件技术基础实验报告
实验名称: 系 别: 年 级:
班 级: 学生学号: 学生姓名:
表达式计算器
通信工程 2012
2 23320122203902 李 斐 1
《数据结构》课程设计报告
题目 简易计算表达式的演示
【题目要求】
要求:实现基本表达式计算的功能
输入:数学表达式,表达式由整数和“+”、 “-”、“×”、“/”、“(”、“)”组成 输出:表达式的值
基本操作:键入表达式,开始计算,计算过程和结果记录在文档中 难点:括号的处理、乘除的优先级高于加减
1.前言
在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。
算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/、=,用#表示结束。
算法输出:表达式运算结果。
算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列
2
的同时,完成运算符和运算数的识别处理,以及相应运算。
2.概要设计
2.1 数据结构设计
任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置,base为栈底指针,在顺序栈中,它始终指向栈底,即top=base可作为栈空的标记,每当插入新的栈顶元素时,指针top增1,删除栈顶元素时,指针top减1。
2.2 算法设计
为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。
1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;
2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为”#”)。
2.3 ADT描述 ADT Stack{
数据对象:D={ai |ai∈ElemSet,i=1,2,?,n, n≧0} 数据对象:R1={ai,ai?1|ai?1,ai?D,i=2,?,n} 约定an端为栈顶,ai端为栈底。 基本操作:
InitStack(&S)
操作结果:构造一个空栈S。GetTop(S)
初始条件:栈S已存在。
3
操作结果:用P返回S的栈顶元素。Push(&S,ch) 初始条件:栈S已存在。
操作结果:插入元素ch为