数据结构课程设计之项目三---算术表达式求解
目录
问题描述
基本要求
问题分析
逻辑设计
物理设计
存储结构
其他模块功能核心函数伪代码
总结
问题描述
设计一个简单的算术表达式计算器。
基本要求
实现标准非负整数类型的四则运算中缀表达式的求值(包括括号,可多层嵌套)。
注意:要求自行设计验证非法表达式,以免在用户输入有误的时候,程序不至于因发生各种错误而被迫中断,从而保证程序的健壮性。
问题分析
此项目要求我们根据给出的中缀表达式编程序求出运算结果,中缀表达式是我们人类非常擅长的计算方式,而后缀表达式是计算机非常擅长的计算方式,因此我们既可以直接对给定中缀表达式编程序进行求解,也可以将其先转化为后缀表达式再求解,这里我们采用前一种实现方式。
逻辑设计
1. 首先,因为存在运算符*/优先+-运算,所以我们需要设置运算符优先级高低。
2. 然后,因为运算符优先级的高低导致数字和运算符以及括号可能在当前步骤不能先被运算,所以需要使用栈的数据结构来存储我们需要维护的信息,这里考虑到是数据结构课程设计,因此我们最好使用数组模拟栈的方式自己去实现栈,写好栈的一些核心函数,而不是去直接调用STL里的stack。
3. 最后注意一些细节问题:比如如何判断算数表达式是否合法(注意如果试图恶意输入,类似于输入中文的括号或一些中文字符,那也就失去了实现并测试计算器的意义了)、实现多位数的运算而不是单单一位数参与运算的功能等等。
下面是模块之间大致的调用关系图
物理设计
存储结构
数组模拟栈
下面给出它的一些核心函数的伪代码
//无参构造函数
/*初始化top为-1*///判空
/*判断top是否为-1*///压栈
/*1.判断栈是否上溢2.x赋值给data[++top]
*///出栈
/*1.判断栈是否下溢2.返回data[top--]
*///获取栈顶元素
/*1.判断栈是否下溢2.返回data[top]
*/
其他模块功能核心函数伪代码
//1.isVaild()
/*排除()、++、)(、-)、(*、())等非法输入
*///2.evaluate()
/*1.弹出数栈两个数字和符号栈一个数字2.注意数字顺序进行运算3.结果入数栈
*///3.caculate()
/*1.循环扫描输入的合法字符串的每一位字符2.如果是数字,注意多位数的处理,将其入数栈3.如果是(,直接入符号栈4.如果是),不断运算直至遇到(,最后将(出栈5.如果是运算符,判断其与符号栈顶运算符优先级,如果栈顶符号优先级更高,则一直运算,最后将该运算符入符号栈6.循环结束,直到符号栈不为空,一直运算7.最后返回栈顶元素,即为运算结果
*/
总结
本次项目锻炼了自己满足用户需求能力,对数据结构栈有了更深的理解。
数据结构课程设计之项目三---算术表达式求解相关推荐
- 数据结构课程设计(VS2012-c语言):算术表达式实现(加减乘除)
关键词:结构体.链表.栈.运算符优先级设置 实现效果: 源文件程序: #include "head.h" int main() {//"34+4*(45-2*(31-30 ...
- 数据结构课程设计---------用栈来实现表达式求值
1.需求分析 设计一个程序,演示用算符优先法对算术表达式求值的过程.利用算符优先关系,实现对算术四则混合运算表达式的求值. (1)输入的形式:表达式,例如2*(3+4) 包含的运算符只能有' ...
- 数据结构课程设计预习——项目1:中国计算机设计大赛赛事统计
项目1: 中国计算机设计大赛赛事统计 问题描述 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项,项目的编号为1-m.比赛获奖按照得分降序,取前三名,写一个统计程序产生各种成绩单和得分报表.( ...
- 《数据结构课程设计》实验报告
实验一 计算机设计大赛赛事统计 一.问题分析和任务定义 [问题描述] 参加计算机设计大赛的n个学校编号为1~n,赛事分成m个项目,项目的编号为1~m.比赛获奖按照得分降序,取前三名,写一个统计程序 ...
- 数据结构课程设计家谱c语言,数据结构课程设计-家谱的实现与设计.doc
数据结构课程设计-家谱的实现与设计 课 程 设 计 报 告 课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 朱强 班 级: 13软件 学 号: 20130311227 成 绩: 指 ...
- c语言信息加密hikl,数据结构课程设计-家谱的实现与设计1.docx
课程设计报告 课程设计名称: 数据结构课程设计 系: 三系 学生姓名: 班U级/ 13软件 学号: 20130311227 成绩: 指导教师: 刘杰 开课时间:2014.2015学年一学期 设计题目家 ...
- 数据结构课程设计---赛事统计,校园导航,算术表达式
文章目录 目录 项目一:计算机设计大赛赛事统计 一.内容与相关要求: 二.问题分析和任务定义: 三.数据结构的选择和概要设计; 3.1 数据结构的选择 3.2 概要设计 3.2.1 功能函数的设计 四 ...
- 算术表达式求值的程序设计与实现_数据结构课程设计
以下内容可且仅可供参考,如有错误欢迎指正. 部分思路借鉴算术表达式求值(C语言栈)_夜何其的博客-CSDN博客_c语言利用栈求解算术表达式侵删致歉 <算术表达式求值的程序设计与实现>题目要 ...
- C++——算术表达式的求值(数据结构课程设计)
数据结构课程设计--算术表达式的求值 1.实验目的 1.在课程设计中提高学生的动手能力和编程能力; 2.在课程设计中提高数据结构中理论知识(栈和二叉树等知识)的应用. 3.在课程设计中提高自己对各个方 ...
最新文章
- Ubuntu16.04运行.run文件
- SAP FI配置关键点
- usb深度检查 清理_巴南区清理化粪池工程队价格合理2020
- 快速入门 Python 数据分析实用指南
- Windows2008安装组件命令行工具ServerManagerCmd用法介绍
- [机器学习笔记]Note9--机器学习系统设计
- python停用词表_多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序...
- 单反相机参数的直观认识
- [2018.03.29 T2] 公交旅行
- 使用PyCharm官方中文语言包汉化PyCharm
- 大数据Hadoop生态系统介绍
- 如何按页进行PDF文档拆分
- windows 搭建kms服务器激活_搭建kms服务器,自建KMS激活服务器的两种方法
- VSCode 中怎样快速切换多个项目
- R语言 面板数据分析 plm包实现(二)——随机效应模型
- 什么是信息安全,怎么保障信息安全?
- SQL中Date 函数
- 关于length specifier
- CTO谈豆瓣网和校内网技术架构变迁
- 高企申报有哪些项目?