- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式求值
一 目的
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值的计算结果
二 需求分析
设计一个程序,演示以字符序列的形式输入不含变量的实数表达式求值的计算结果。对于这个程序我们从输入,输出,和功能三方面来分析。
程序输入:从键盘上输入表达式从键盘上输入表达式。分析该表达式是否合法:
(1)是数字,则判断该数字的合法性。
(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表式的值。
(3)若是其它字符,则返回错误信息。
若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。Stack1,用以寄存运算符;另一个称做SqStack2,用以寄存操作数或运算结果。首先置操作数栈为空栈,表达式起始符“#”作为运算符栈的栈底元素,然后依次读入表达式的每个字符,若是操作数则进入SqStack2栈,若是运算符则和SqStack1栈的栈顶运算符比较优先权后做相应操作,直至整个表达式求值完毕。
两个栈: typedef struct //运算符栈
{
char *base;
char *top;
int stacksize;
}SqStack1;
typedef struct //运算数栈
{
float *base;
float *top;
int stacksize;
}SqStack2;
2.相关功能函数:
void InitStack1(SqStack1 S1);//声明运算符栈建立函数
void InitStack2(SqStack2 S2);//声明运算数栈建立函数
主要的确定如何入栈的函数:void evaluate(SqStack1 S1,SqStack2 S2);
void Push1(SqStack1 S1,char e);//声明入栈函数
void Push2(SqStack2 S2,float e);//声明入栈函数
char GetTop1(SqStack1 S1);//声明取栈顶元素函数
float GetTop2(SqStack2 S2);//声明取栈顶元素函数
char Pop1(SqStack1 S1);//声明出栈函数
float Pop2(SqStack2 S2);//声明出栈函数
char Compare(char m,char n);//声明比较函数
通过这个函数我们来实现运算符运算的先后顺序判断运算符优先权,返回优先权高的
算符间的优先关系如下:
θ1 θ2 + - * / ( ) # + - * / ( = ) # = 最后的计算函数:
float Operate(float a,char rheta,float b);//声明运算函数
为了使运算的过程更加直观的反应出来,我们再绘制一个表格,绘制表格的相关函数如下:
void DispStack1(SqStack1 S1);//从栈底到栈顶依次输出各元素
void DispStack2(SqStack2 S2);//从栈底到栈顶依次输出各元素
3.函数模块之间的调用关系:
四 详细设计
首先本程序定义两个顺序栈:运算符栈(SqStack1)和运算数栈(SqStack2);
typedef struct //运算符栈
{
char *base;
char *top;
int stacksize;
}SqStack1;
typedef struct //运算数栈
{
float *base;
float *top;
int stacksize;
}SqStack2;
然后是主要功能函数的详细设计:
/*运算符栈函数*/
void InitStack1(SqStack1 S1)//构造一个空栈S1
{
S1.base=(char *)malloc(STACK_INIT_SIZ
您可能关注的文档
最近下载
- 大气污染防治项目储备库入库要求项目绩效目标申报表.pdf
- ppt课件-2021新中国史党校党课精品课件.pptx VIP
- 纷享销客使用指南试题及答案.doc
- 2023CSCO前列腺癌诊疗指南.docx
- 2024至2030年中国体育健身休闲行业市场深度研究及投资规划建议报告.docx
- 民事再审申请书(物业服务合同纠纷)民事再审申请书(物业服务合同纠纷).pdf
- (完整word版)高考英语作文练习纸(答题卡)6.pdf
- 下三手的判断-中盘篇.清晰一般加藤正夫.pdf
- 《石油化工工程数字化交付标准+GBT+51296-2018》详细解读.pptx
- 《海底100层的房子》绘本教案(内附高清绘本图) .pptx VIP
文档评论(0)