- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机实习报告-样本1-表达式计算.
计算机实习报告
面向过程编程
用C语言求解实际问题
班级:
学号:
姓名:
实习时间:2011年7月4日-7月15日
一、问题描述
基础类第40个任务——简单表达式计算:编程完成10进制以内数据四则运算(+、-、*、/)表达式的计算。
二、需求分析
(这一部分主要是确定要做什么,以及问题的边界。如下例所示,完成带括号的10以内的数据四则运算,不支持单目运算。具体来说,就是给出程序的基本功能和性能,设计问题的输入/输出)
表达式计算任务的功能是:
(1)读入表达式。假设整个表达式为字符串,且按从左到右顺序读入,在读入的时候逐步分析读入的内容是数据,还是运算符;
(2)计算表达式。假设表达式的计算规则是:
(a)参与运算的数字仅为’0’~’9’;
(b)不支持单目运算,即不允许有负数参与运算;
(c)支持的双目运算符号为+、-、*、/,其中*和/是同级运算符,+和-是同级运算符;且*和/优先级高于+和-;
(d)表达式计算时,先计算优先级高的运算,再计算优先级低的运算,同级运算则从左往右顺序计算;
(e)表达式中可以出现小括号运算符,它的作用是改变表达式运算符计算顺序,且小括号可以嵌套,内括号优先级高于外括号。
(3)输出计算结果。为了便于查看运算结果,假设输出结果形式是:表达式=结果。例如:7+2-4/1*2+(2*3/(2-1))=7;
程序中有如下性能:
表达式有效性简单检查。即输入的表达式除支持的运算符(+、-、*、/)和数字’0’~’9’之外,仅可以出现’#’(表达式结束标志,优先级最低的运算符)。其他任何符号视为无效表达式,提示出错,重新回到表达式的输入初始状态。
三、程序设计
(这一部分主要是说怎么做,以及语言环境对问题处理的特殊影响。如下例所示,表达式读入方法,计算流程,辅助数据结构,结果输出格式。具体来说,就是给出程序的数据结构,模块划分,主要的算法流程,主程序结构)
针对需要做如下设计:
(1)数据结构设计
因为表达式是逐步读入的,且数据类型为字符串,在此设计一个字符变量c接收当前读入的数据值;
char c;
表达式计算过程中,优先级低的运算法和相关运算数需要首先保留起来,高优先级运算符先运算,同级运算符则从左到右运算,对此规定同级符号中左运算符的优先级高于右运算符。设计一个一维数组存储支持的运算符,二维数组存储表达式中运算符之间的大小关系。
char OP[8]={0 , + , - , * , / , ( , ) , #};
由于C语言的数组下标从0开始计数,为了方便使用,假设下标0位置存储字符’0’。
Operat_Table[8][8]={{0,0,0,0,0,0,0,0},
{0,,,,,,,},
{0,,,,,,,},
{0,,,,,,,},
{0,,,,,,,},
{0,,,,,,=,?},
{0,,,,,?,,},
{0,,,,,,?,=}};
二维数组中的0是为了把有效数据放到非零位置而专门设计的占位符号。
考虑到表达式的分析中用到栈来保存运算符和运算操作数,在此设计两个字符两类的栈OPTR和OPND,其中:
OPTR,保留操作符。由于假设#是表达式的结尾符,它需要在表达式中配套出现,故初始化OPTR后,必须立即在其中压入一个#。
OPND,保留操作数。读入的暂时不用的数字要依读入的顺序压入进OPND,中间计算结果也压入该操作符栈。因为OPND保留的数据类型为”char”,故设计实现的程序要求表达式的每一个中间计算结果取值只能为’0’~’9’,且不可以为负数。
定义为全局量的栈为:
char OPTR, OPND;
(2)模块设计
本任务的主要算法是表达式的计算,相对应的模块是char EvaluateExpression( )。
功能:读入和计算表达式,返回值为计算结果,类型为char。出错返回-1,否则返回正常计算结果
char EvaluateExpression(){
InitStack(OPTR); Push(OPTR,#);//初始化操作符栈,且压入表达式起始符号#
InitStack(OPND);//初始化操作数栈
c=getchar();//读入一个字符
//判断是表达式结束符#否?并且操作符栈中的运算都计算完否?都不是,则循环
while (c!=#||GetTop(OPTR)!=#){
if (!In(c, OP))//判断是有效运算符否?
{ Pus
您可能关注的文档
最近下载
- 第二单元 项目1 《 获取长城研学路线-互联网信息有哪些信誉好的足球投注网站》教学设计 2024—2025学年安徽版(2024)初中信息技术七年级上册.docx VIP
- 江苏省2024普通高中学业水平合格性考试英语真题卷 .pdf
- 第二单元+项目1+《+获取长城研学路线-互联网信息有哪些信誉好的足球投注网站》课件+2024—2025学年安徽版(2024)初中信息技术七年级上册+.pptx VIP
- 浙江交投高速公路建设管理有限公司部分中层管理岗位公开竞聘【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 天然气对井内压力的影响(五)课件.pptx VIP
- 妇产科医疗质控总结.pptx VIP
- 企业内部控制指引.doc
- 山东大学齐鲁医院诊断证明.docx VIP
- 心胸外科出科.pptx VIP
- 2024贵州遵义市面向优秀村(社区)干部专项招聘乡镇(街道)事业单位工作人员61人笔试备考题库及答案解析.docx VIP
文档评论(0)