


免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机实习报告面向过程编程用C语言求解实际问题班级: 学号: 姓名: 实习时间:201X年7月4日-7月15日一、问题描述基础类第40个任务简单表达式计算:编程完成10进制以内数据四则运算(+、-、*、/)表达式的计算。二、需求分析(这一部分主要是确定要做什么,以及问题的边界。如下例所示,完成带括号的10以内的数据四则运算,不支持单目运算。具体来说,就是给出程序的基本功能和性能,设计问题的输入/输出)表达式计算任务的功能是:(1)读入表达式。假设整个表达式为字符串,且按从左到右顺序读入,在读入的时候逐步分析读入的内容是数据,还是运算符;(2)计算表达式。假设表达式的计算规则是:(a)参与运算的数字仅为09;(b)不支持单目运算,即不允许有负数参与运算;(c)支持的双目运算符号为+、-、*、/,其中*和/是同级运算符,+和-是同级运算符;且*和/优先级高于+和-;(d)表达式计算时,先计算优先级高的运算,再计算优先级低的运算,同级运算则从左往右顺序计算;(e)表达式中可以出现小括号运算符,它的作用是改变表达式运算符计算顺序,且小括号可以嵌套,内括号优先级高于外括号。(3)输出计算结果。为了便于查看运算结果,假设输出结果形式是:表达式=结果。例如:7+2-4/1*2+(2*3/(2-1)=7;程序中有如下性能:表达式有效性简单检查。即输入的表达式除支持的运算符(+、-、*、/)和数字09之外,仅可以出现#(表达式结束标志,优先级最低的运算符)。其他任何符号视为无效表达式,提示出错,重新回到表达式的输入初始状态。三、程序设计(这一部分主要是说怎么做,以及语言环境对问题处理的特殊影响。如下例所示,表达式读入方法,计算流程,辅助数据结构,结果输出格式。具体来说,就是给出程序的数据结构,模块划分,主要的算法流程,主程序结构)针对需要做如下设计:(1)数据结构设计l 因为表达式是逐步读入的,且数据类型为字符串,在此设计一个字符变量c接收当前读入的数据值;char c;l 表达式计算过程中,优先级低的运算法和相关运算数需要首先保留起来,高优先级运算符先运算,同级运算符则从左到右运算,对此规定同级符号中左运算符的优先级高于右运算符。设计一个一维数组存储支持的运算符,二维数组存储表达式中运算符之间的大小关系。char OP8=0 , + , - , * , / , ( , ) , #;由于C语言的数组下标从0开始计数,为了方便使用,假设下标0位置存储字符0。Operat_Table88=0,0,0,0,0,0,0,0, 0, 0, 0, 0, 0,?, 0,?,=;二维数组中的0是为了把有效数据放到非零位置而专门设计的占位符号。l 考虑到表达式的分析中用到栈来保存运算符和运算操作数,在此设计两个字符两类的栈OPTR和OPND,其中:OPTR,保留操作符。由于假设#是表达式的结尾符,它需要在表达式中配套出现,故初始化OPTR后,必须立即在其中压入一个#。OPND,保留操作数。读入的暂时不用的数字要依读入的顺序压入进OPND,中间计算结果也压入该操作符栈。因为OPND保留的数据类型为”char”,故设计实现的程序要求表达式的每一个中间计算结果取值只能为09,且不可以为负数。定义为全局量的栈为:char OPTR, OPND;(2)模块设计l 本任务的主要算法是表达式的计算,相对应的模块是char EvaluateExpression( )。功能:读入和计算表达式,返回值为计算结果,类型为char。出错返回-1,否则返回正常计算结果char EvaluateExpression()InitStack(OPTR); Push(OPTR,#);/初始化操作符栈,且压入表达式起始符号#InitStack(OPND);/初始化操作数栈c=getchar();/读入一个字符 /判断是表达式结束符#否?并且操作符栈中的运算都计算完否?都不是,则循环while (c!=#|GetTop(OPTR)!=#)if (!In(c, OP)/判断是有效运算符否?Push(OPND, c); /不是运算符,则必是操作数,直接压入数据栈c=getchar();/读入下一个字符else switch(Precede(GetTop(OPTR),c)/是操作符,则判断栈顶与读入字符c的优先级case:/ 栈顶运算符优先级高,则完成栈顶运算符运算Pop(OPTR, theta);/弹出栈顶运算符Pop(OPND,b); Pop(OPND,a);/弹出数据栈两个数据Push(OPND,Operate(a,theta,b);/计算,并将计算结果压入数据栈break;case ?:/当,出现括号()不匹配couterror!, =, 分别表示first优先级高于、等于和小于second。否则,则出错,给出提示信息。l 运算符计算函数char Operate( a, theta, b);功能:对数据a, b进行theta计算。返回结果类型是char。(3)主程序结构本任务的主程序结构如下:四、程序实现(这一部分主要是说子程序的实现,以及引用的语言资源。具体来说,就是给出程序模块的实现)(1)为了支持计算算法的实现,用到两个栈数据结构,在代码中声明栈存储的数据类型是char。为了简化程序的编写,引用STL资源stack,两个栈分别是:stack OPTR;stack OPND;在代码中所有栈的操作均引用STL支持的stack操作完成。(2)char In(c, OP)函数实现遍历运算符数组OP8,查找是否为合法运算符,是,则返回OP数组中符号下标。(3)char Precede(first, second)函数实现两次调用In(first, OP),In(second, OP)函数,得到first, second下标,再遍历运算符优先级关系数组Operat_Table88,确立first, second的关系是, =, 和出错?。(4)char Operate( a, theta, b)函数实现转换字符a, b为数字,转换公式是a-0; b-0; 完成(int) z=a theta b计算。返回结果仍然是char, 所以返回z+0。五、程序测试(这一部分主要是说用什么数据测试程序,保证程序的每一条分支上的语句都被调试。具体来说,就是进行程序白盒测试)对表达式计算进行测试,设计如下数据:l 1+2#,输出该为3,测试加法正确完成,+由于#计算;l 1+2-3#, 输出该为0,测试+,-同级运算时,表达式从左往右顺序计算;l 1*4/2#,输出该为2,测试*,/同级运算时,表达式从左往右顺序计算;l 1+2*3/1-3/1*2#, 输出该为1,测试*, /高于+运算,同级则从左往右顺序计算;l 1+2-4#,没有输出。因为中间计算结果为-1,语句Push(OPND, Operate(a, theta, b)不正确执行;l (1+2#,(不匹配,出错,提示error。l 1+2-3)/3#, ) 不匹配,出错,提示error。l -1+2#,没有输出,因为不支持单目运算。l 8+2#, 输出错。因为函数char Operate( a, theta, b)不正确返回取值。六、设计小结(这一部分分析程序的优缺点,提出可能的改进方案)关于简单表达式的计算设计的程序优点是:完成10以内数据的四则运算表达式的计算。程序有详细的操作提示,用户只要根据提示输入表达式,则结果立即显示出来。缺点是:(1)只能完成10以内的数据运算如果改进char EvaluateExpression()函数中的操作数读入,使之能够接收float数据的读入,则可以完成浮点数的表达式计算。当表达式当成字符串读入时,浮点数函数流程是:(2)不支持单目运算如果在char EvaluateExpression()函数之前对表达式进行分析,分出单目运算和双目运算,则程序也可以改进,支持单目运算。网络资料介绍,这需要编译原理中的知识对表达式进行分析,把表达式字符串改为“逆波兰式表示方式”,再运算。关于这一点因为超出所学知识太多,在此不能给出具体改进意见。(3)非Windows可视化操作界面目前程序是for DOS界面,如果改为Windows可视化操作界面,则需要用到VC编程知识,创建一个操作窗口:从Edit窗口接收表达式输入,再将代码放入“计算”按钮触发执行的函数段中。七、使用说明(这一部分主要是说程序安装说明和启动。具体来说,就是给出程序的运行软硬件环境,启动方法,操作步骤,如果程序有完整的提示,操作步骤可以简写)本程序提交的是for DOS源代码Run_Exp.cpp,所以用VC打开该程序Run_Exp.cpp,再经过编译、连接,直接提示:Input Expression=,此时可以键入表达式字符串,记得以#结束表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东省肇庆市辅警人员招聘考试题库及答案
- 2025年度内蒙古专业技术人员继续教育公需科目试卷及答案
- 2025年保育员考试试题(含答案)
- 执业药师之《药事管理与法规》试题预测试卷带答案详解ab卷
- 2025年海南省岛东林场招聘专业技术人员笔试高频难、易错点备考题库含答案详解
- 2025浙江省公务员行测含完整答案详解(有一套)
- 2024-2025学年度公务员考试《常识》考试黑钻押题及参考答案详解【巩固】
- 2025年山东省基层法律服务工作者考试全真冲刺试题及答案二
- 基层法律服务工作者执业核准考试备考题库及答案(曲靖2025年)
- 2025年职业技能(短视频推广、策划、制作与运营)等专业操作知识考试题及答案
- 《电子邮件我收发》参考课件3
- 【独立储能】山西省独立储能政策及收益分析-中国能建
- 汽车焊装工(技师)理论考试复习题库500题(含各题型)
- 2024注册安全工程师《安全生产法律法规》考点总结
- 四年级(上册)生命生态安全教案及教学计划附安全知识川教版(人教版)
- 民用建筑供暖通风与空气调节设计规范-条文解释
- ICU抗凝药物合理应用
- 2024年院感安全注射培训
- 人工智能助力企业创新发展
- 微生物实验室病原微生物评估报告
- 穴位埋线疗法在代谢性疾病中的应用及效果评估
评论
0/150
提交评论