计算机实习报告-样本1-表达式计算..doc

计算机实习报告-样本1-表达式计算..doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

s4as2gs2cI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档