资源简介
一、问题描述
在控制台下实现一个对算术表达式求值的模拟程序。
二、基本要求
该演示程序具有如下基本功能:
(1) 表达式输入,以字符序列的形式从终端输入一个语法正确的数值表达式(float型),且表达式中只含有+、-、*、/、( 、)6 种运算符,输入格式如下:
……
例如表达式:
100+(15/3)*2
输入格式为:
100+(15/3)*2
注意:
输入的表达式中间不含空格。
(2) 表达式结果的输出,输出形式为:
=
例如表达式:
100+(15/3)*2
输出形式为:
100+(15/3)*2 = 110
注意:
此处的输出结果为整个表达式的数值结果。
(3) 数据合法性检验
主要是针对原表达式中除数为 0 的情况。
三、界面效果
表达式求值模拟程序
功能菜单:
==============
[1] 输入表达式并求值
[0] 退出
==============
请输入你的选择 (0~1):1
请输入一个表达式 :
100+(15/3)*2
计算结果如下:
100+(15/3)*2 = 110
请输入你的选择 (0~1):0
四、测试数据
(1) 8 =
(2) 1+2+3+4 =
(3) 88-1*5 =
(4) 1024/4*8 =
(5) 1024/(4*8) =
(6) (20+2)*(6/2) =
(7) 3-3-3 =
(8) 80/(9-9) =
(9) (6+2*(3+6*(6+6)) =
(10) (((6+6)*6+3)*2+6)*2 =
五、实现提示
(1) 设置运算符栈和操作数栈辅助分析算符优先关系;
(2) 在读入字符序列时,完成运算符和操作数的处理,以及相应运算;
(3) 在识别处运算数的同时,要将其字符序列形式转化成 float 型数据形式;
(4) 输入的字符序列中,操作数不一定是一位数,可能是多位数,如 16+32 ;
(5) 使用 Lab3-1 实现的栈的 ADT 基本操作完成本次作业 ;
(6) 在程序中会用到两类栈:操作数栈和运算符栈,分别为 float 型数据和字符型数据,
思考在同一个程序中如何处理两类不同的数据类型?
(7) 算符之间的优先关系参考课本 P53 页表 3.1 。
代码片段和文件信息
/***
*DynaSeqStack.cpp - 动态顺序栈,即栈的动态顺序存储实现
*
*
*题目:表达式求值
*
*班级:A1 北极
*
*姓名:邱继颖
*
*学号:2008010829
*
****/
#include
#include
#include
#include
#include “DynaSeqStack.h“
const int STACK_INIT_SIZE = 100; // 初始分配的长度
const int STACKINCREMENT = 10; // 分配内存的增量
/*------------------------------------------------------------
操作目的: 初始化栈
初始条件: 无
操作结果: 构造一个空的栈
函数参数:
SqStack *S 待初始化的栈
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool InitStack(SqStack *S)
{
assert(S != NULL);
S->base = (ElemType*)malloc(sizeof(ElemType) * STACK_INIT_SIZE);
if(S->base == NULL) return false;
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return true;
}
/*------------------------------------------------------------
操作目的: 销毁栈
初始条件: 栈S已存在
操作结果: 销毁栈S
函数参数:
SqStack *S 待销毁的栈
返回值:
无
------------------------------------------------------------*/
void DestroyStack(SqStack *S)
{
assert(S != NULL);
free(S->base);
S->top = S->base = NULL;
}
/*------------------------------------------------------------
操作目的: 判断栈是否为空
初始条件: 栈S已存在
操作结果: 若S为空栈,则返回true,否则返回false
函数参数:
SqStack S 待判断的栈
返回值:
bool 是否为空
------------------------------------------------------------*/
bool StackEmpty(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.base == S.top);
}
/*------------------------------------------------------------
操作目的: 得到栈的长度
初始条件: 栈S已存在
操作结果: 返回S中数据元素的个数
函数参数:
SqStack S 栈S
返回值:
int 数据元素的个数
------------------------------------------------------------*/
int StackLength(SqStack S)
{
assert((S.base != NULL) && (S.top != NULL));
return(S.top-S.base);
}
/*------------------------------------------------------------
操作目的: 得到栈顶元素
初始条件: 栈S已存在
操作结果: 用e返回栈顶元素
函数参数:
SqStack S 栈S
ElemType *e 栈顶元素的值
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool GetTop(SqStack S ElemType *e)
{
assert((S.base != NULL) && (S.top != NULL));
if(StackEmpty(S))
return false;
*e = *(S.top-1);
return true;
}
/*------------------------------------------------------------
操作目的: 遍历栈
初始条件: 栈S已存在
操作结果: 依次对S的每个元素调用函数fp
函数参数:
SqStack S 栈S
void (*fp)() 访问每个数据元素的函数指针
返回值:
无
------------------------------------------------------------*/
void StackTraverse(SqStack S void (*fp)(ElemType))
{
assert((S.base != NULL) && (S.top != NULL));
for(; S.basese++)
(*fp)(*S.base);
}
/*------------------------------------------------------------
操作目的: 压栈——插入元素e为新的栈顶元素
初始条件: 栈S已存在
操作结果: 插入数据元素e作为新的栈顶
函数参数:
SqStack *S 栈S
ElemType e 待插入的数据元素
返回值:
bool 操作是否成功
------------------------------------------------------------*/
bool Push(SqStack *S ElemType e)
{
if(S == NULL) return false;
assert((S->base != NULL) && (S->top != NULL));
// validate overflow
if(StackLength(*S) == S->stacksize)
{
El
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4331 2009-10-29 12:00 表达式求值\DynaSeqStack.cpp
文件 881 2009-10-27 08:49 表达式求值\DynaSeqStack.h
文件 147 2009-10-29 23:17 表达式求值\ElemType.cpp
文件 267 2009-10-29 19:49 表达式求值\ElemType.h
文件 3245 2009-10-30 10:49 表达式求值\Lab.cpp
目录 0 2009-10-30 11:08 表达式求值
----------- --------- ---------- ----- ----
8871 6
- 上一篇:完美国际脱机外挂的源码
- 下一篇:通讯录管理系统(c 链表)
相关资源
- 外排序初始游程的生成
- 数据结构课程设计之电梯模拟
- 大话数据结构原书+源代码.zip164041
- 《程序员代码面试指南》(高清PDF版
- 耿国华 数据结构 课后答案
- (答案)上海理工大学848真题数据结
- 数据结构作业习题精选 电子科技大学
- 数据结构及应用算法教程修订版
- 数据结构高分笔记
- 《数据结构》考研名校真题解析及典
- 数据结构与程序设计英文版答案.pdf
- 算法和数据结构:基本工具箱Kurt Me
- 华中科技大学数据结构实验报告1-4综
- 厦大数据结构考卷
- 数据结构 吴陈 科学出版社 课后答案
- 数据结构课程设计——哈夫曼编/译码
- 吉林大学《数据结构》实验全部代码
- 数据结构课程设计医院选址系统
- 严蔚敏,吴伟民编著《数据结构》课
- 湘潭大学数据结构二考研真题
- 02331数据结构复习总结.doc
- 数据结构讲义
- 华工数据结构课程设计
- 数据结构-何钦铭、陈越 课件资源
- 西南交大数据结构实验
- 大连理工大学数据结构第一次上机答
- 最短路径数据结构作业-南京地图
- 湖南大学数据结构历年考试试卷大全
- 数据结构与算法 张铭 资料包
- 11.(高清原版)吉林大学数据结构长
评论
共有 条评论