- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
表达式求值
一 目的
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用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_SIZE *sizeof(cha
您可能关注的文档
- 数控车床装调工练习题概念.doc
- 数控车床的应用针对轴类零件的加工及工艺概念.doc
- 四川省施工员模拟试题2015概念.doc
- 四川省拟任县处级党政领导职务政治理论水平资格考试模拟试题(附答案)概念.doc
- 数控毕业论文概念.doc
- 数据字典范例2概念.doc
- 四川省乐山市2015年中考语文试卷及答案(word版)概念.doc
- 数据中心制冷系统41问答题概念.doc
- 数据中心在线搬迁方案概念.doc
- 数据中心项目建设方案介绍概念.doc
- 新能源汽车品牌案例研究:2025年营销传播策略实践.docx
- 医疗行业人工智能在精准医疗中的应用与路径选择.docx
- 农业土壤污染修复技术实证研究:2025年应用效果与成本效益分析.docx
- 葡萄酒产区特色品牌国际化案例分析报告:2025年市场品牌合作案例深度研究分享.docx
- 防火硅橡胶建议书可行性研究报告备案可修改案例模板.doc
- 百货商场数字化运营与顾客体验提升的顾客体验评估工具研究报告.docx
- 制造业数字化转型数据治理策略在智能化生产调度中的应用报告.docx
- 2025至2030中国UBI车险行业市场发展现状及竞争格局与投资前景报告.docx
- 中华优秀传统文化在思政课程中的教育作用.docx
- 废旧电子产品回收再利用2025年国际市场拓展研究报告.docx
文档评论(0)