云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 利用栈求表达式的值课程设计最后老师改- 副本

利用栈求表达式的值课程设计最后老师改- 副本

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 20:23:23

2.3运行环境

Windows XP/ 7系统 VC++6.0编译环境

2.4开发工具

C语言

9

3.总体设计

3.1设计任务与目标

编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。

主要功能描述如下:

1、从键盘上输入表达式,以“=” 号结束表达式。 2、分析该表达式是否合法:

(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。 (2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。

(3)若是其它字符,则返回错误信息。

3、若上述处理过程中没有发现错误,则认为该表达式合法,并在屏幕上打印处理结果。

附加功能:

规定表达式的合法性 小数计算

计算记录的保存与查看 判断表达式的合法性

(1)规定表达式的合法性,括号配对,不能出现“6++3”、“6+-3”等符号重叠的情况。

(2)表达式开头只能是数字或“(”,表达式中只能有一个“=”。

3.2程序中的功能函数:

void initstack():初始化堆栈 int check():语法检查并计算

int Push (czs *nu, double da):将操作数压入堆栈 char procede(char top,char code):处理操作码

int change_opnd(char code):将字符型操作码转换成优先级 int push (czm *op,char co):将操作码压入堆栈

10

char pop (czm *op):将操作码弹出堆栈

double caculate(czm *op,czs *nu):简单计算+,-,*,/

double Pop (czs *nu):弹出操作数

3.3方案设计与论证

1.定义一个expression全局表达式结构体EXPRESS [1000]存放计算过的表达式(express [MAXSIZE])和计算结果(result)、一个计量器(i)、一个表达式字符串、一个操作码栈和一个操作数栈;

2.把表达式字符串从头到尾逐一扫描,将输入的表达式进行语法检查; 3.第一个字符只能是数字或“(”,最重一个字符只能是“=”; 4.表达式括号必须配对,中间不能出现“=”;

5.在“(”前面只能是“+、-、*、/、( ”,在“+、-、*、/、=、)”前面只能是数字或“)”;

6.把表达式字符串从头到尾逐一扫描,直到表达式扫描完毕,操作码栈为空; 7.把字符根据运算优先级别选择操作;

8.把表达式中的数值部分字符串转成数值压入操作数栈;

9.是“(”直接压入到操作码栈,级别比操作码栈顶元素高的,把运算符压入操作码栈;

10.级别比操作码栈低的,弹出操作码栈的栈顶元素和操作数栈的两个栈顶元素,进行运算后再压入操作数栈;

11.是“)”,若操作码栈顶是“(”,把弹出操作码栈顶元素,否则“)”视为级别最低的元素,重复7;

12.最后计算出结果并将其存放在EXPRESS [i],计量器加1; 13.重复计算后,将结果保存在文件里,并统计计算次数; 14.查看多次计算结果,以表形式输出; 15.查看本次计算记录,以表形式输出; 16.清除计算记录,重新计算。

11

4算法说明

4.1主要功能函数

本程序的主要功能函数包括: void main()//主函数

void stack1(czm *op,czs *nu)//程序主菜单

void stack2(czm *op,czs *nu)//第二层计算选择,子菜单 void load()//显示所有计算记录 void save()//保存计算结果 void shown()//显示本次计算结果 void result(czm *op,czs *nu)//计算结果

double caculate(czm *op,czs *nu //简单计算+,-,*,/ 表达式处理函数: int check()//语法检查

double change_num(char str[])//数字字符串转成double型数字 char procede(char top,char code)//处理操作码,判断栈的操作 int change_opnd(char code)//字符型操作码转换优先级,非表达式字符返回-2 栈操作函数:

double Get (czs *nu)//查看操作数栈栈顶 double pop (czs *nu)//操作数栈出栈 int Push (czs *nu,double da)//压入操作数栈 int Empty (czs *nu)//判空

void Initstack(czs *nu) //初始化栈 char get(czm *op)//查看栈顶 char pop(czm *op)//出栈 int push(czm *op,char co)//压栈 int empty(czm *op)//判空

void initstack(czm *op)//初始化栈

12

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

2.3运行环境 Windows XP/ 7系统 VC++6.0编译环境 2.4开发工具 C语言 9 3.总体设计 3.1设计任务与目标 编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。 主要功能描述如下: 1、从键盘上输入表达式,以“=” 号结束表达式。 2、分析该表达式是否合法: (1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。 (2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。 (3)若是其它字符,则返回错误信息。 3、若上述处理过程中没有发现错误,则认为该表达式合法,并在屏幕上打

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com