资源简介
一、问题描述
在控制台下实现一个对算术表达式求值的模拟程序。
二、基本要求
该演示程序具有如下基本功能:
(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
- 上一篇:复杂背景下车牌识别系统GUI.zip
- 下一篇:通讯录管理系统(c 链表)
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- 表达式求值C 代码(附实验报告)
- Fundamentals of Data Structure in C
评论
共有 条评论