第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/23 1:12:34 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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

利用栈求表达式的值课程设计最后老师改- 副本.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2fqgt77b6u2ubi87rwxz_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top