




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
广东工业大学实验报告自动化 学院 网络工程 专业(1) 班 学号 3111001299 姓名 刘源彬 成绩评定_ 教师签名 许亮实验 4.4 题目 简单LISP算术表达式计算器 课程名称 数据结构A 简单LISP算术表达式计算器一实验目的问题描述设计一个简单的LISP算术表达式计算器。简单LISP算术表达式(以下简称表达式)定义如下:(1)一个0.9的整数;或者(2)(运算符表达式表达式)例如,6,(+45),(+(+25)8)都是表达式,其值分别为6,9和15。基本要求实现LISP加法表达式的求值。测试数据6,(+45),(+(+25)8),(+2(+58),(+(+(+12)(+34)(+(+56)(+78)实现提示写一个递归函数:intEvaluate(FILE*CharFile)字符文件CharFile的每行是一个如上定义的表达式。每读入CharFile的一行,求出并返回表达式的值。可以设计以下辅助函数statusisNumber(charReadInChar);/视ReadInChar是否是数字而返回TRUE或FALSE。intTurnToInteger(ChatIntChar)/将字符0.9转换为0.9。二实验内容程序源代码1、自定义数据类型typedef structint *ibase;int *itop;int istacksize;istack;/定义整数型结构体typedef structchar *cbase;char *ctop;int istacksize;cstack;/定义字符型结构体2、基本操作函数int display()/打印开始屏信息for(int p=0;p80;p+)cout=;coutendlendl;for(int q=0;q28;q+)cout ;cout简单LISP算术表达式计算器;coutendl;for(int r=0;r26;r+)cout ;coutendlendl;cout 本程序可以对简单的LISP算术表达式进行求值,;cout也能对四则运算表达式进行求 ;cout 值。同时也支持LISP算术表达式的语法的检查.你可以输入形如下面的式子:endl;cout 6 (+36) (*(+36)6) (+5(*(+12)(-34)endl;cout LISP表达式中只能输入 1,2,3,4,5,6,7,8,9,0 endlendl;for(int s=0;s80;s+)cout=;coutendl;return 0;void getfun()cout请输入LISP表达式: ;cin.getline(array,100);lenth = strlen(array);if(lenth=0)cout你没有输入任何数据!endl;#include#include#define stack_init_size 100#define stackincrement 10int initstack (cstack &c)c.cbase = new char100;c.ctop = c.cbase;return 0;/初始化int initstack (istack &i)i.ibase = new int100;i.itop = i.ibase;return 0;/初始化int cpush(cstack &c,char ce)*(c.ctop+) = ce;return 0;/压栈int ipush(istack &i,int ie)*(i.itop+) = ie;return 0;/压栈int cpop(cstack &c,char &ce)ce = *(-c.ctop);return 0;/出栈int ipop(istack &i,int &ie)ie = *(-i.itop);return 0;/出栈void getfun();/把输入的字符串附值给数组int lenth=0;/输入的字符串的长度int result=1;static char array100;/定义数组if(ce=/)ie=ie/ie1;/对弹出的元素进行除操作ipush(i,ie);elseif(arrayn=+)|(arrayn=-)|(arrayn=*)|(arrayn=/)ce=arrayn;cpush(c,ce); if(arrayn47&arrayn58)ie=(int)(int)arrayn-48);/把字符型0,1转化为整数型0,1,2,ipush(i,ie);/弹出栈顶元素ipop(i,ie);/弹出栈顶元素,就是最后结果if(i.ibase=i.itop)coutLISP式计算结果为:;for(int m=0; mlenth; m+)coutarraym;cout = ieendl;/*判断LISP语法的函数*/int jugde()int lp=0;int rp=0;int oprator=0;int number=0;int lenth=0;getfun();lenth = strlen(array);/*统计各操作符和数字的个数*/*重要的函数,计算LISP表达式的函数*/void compute()char ce;int ie1;int ie;cstack c;istack i;initstack (c);initstack (i);lenth = strlen(array);/求数组的长度的函数for(int n=0;nlenth;n+)if(arrayn=)cpop(c,ce);if(i.ibase=i.itop)coutLISP表达式有误!endl;break;elseipop(i,ie);ie1=ie;if(i.ibase=i.itop)coutLISP表达式有误!endl;break;elseipop(i,ie);if(ce=+)ie=ie+ie1;/对弹出的元素进行加操作if(ce=-)ie=ie-ie1;/对弹出的元素进行减操作if(ce=*)ie=ie*ie1;/对弹出的元素进行乘操作for(int top=0;top47&arraytop47&array058)coutLISP表达式结果为: array0endl;elsecout请正确输入LISP,你没有输入数字!endl; /判断是不是一个字符,如果是一个数字的话。就直接打出,如果不是的话,说明语法有问题else if(array0!=()cout您是否忘记了开始的(,请检查!endl;/判断括号的匹配 elseif(arraylenth-1!=)cout您是否忘记了最后的)!rp)cout您是否忘记了)了!endl;/判断括号的匹配if(lprp)cout您是否忘记了(了!endl;/判断括号的匹配if(lp=rp&oprator!=lp)cout您的运算符有问题!endl;if(lp=rp&rp=oprator&rp!=number-1)cout您的运算数字有问题,请检查!endl; else for (int i=0;ilenth;i+)if(arrayi=() +i;if (arrayi!=+&arrayi!=-&arrayi!=*&arrayi!=/)cout你的LISP有问题,请检查!endl;elseresult=0;i-; return 0;3、主函数代码int main() char loop5; display();do jugde(); if(result=0) compute(); cout是否计算下一个LISP ?(y/n)endl; cin.getline(loop,5); while(loop0=y|loop0=Y); return 0; 三实验步骤为实现上述程序功能,应以字符栈和整型栈两个抽象数据类型表示:1.字符栈的抽象数据类型定义为:ADT cstack 数据对象:D=ai| aicstack,i=1,2,.n, n0 基本操作: initstack(cstack &c) 操作结果:分配100个字符栈空间,将首地址赋给c.cbase,将c.cbase赋给c.ctop。 Cpush(cstack &c,char ce) 初始条件:字符栈c存在。 操作结果:将字符ce加入到字符栈c中。 Cpop(cstack &c,char &ce) 初始条件:字符栈c存在。 操作结果:将ce从字符栈c中删除。 ADT cstackt2.整型栈的抽象数据类型定义为:ADT istack 数据对象:D=ai| ai为0到9的数字,i=1,2.,n 基本操作:initstack(istack &i) 操作结果:分配100个整数空间,将首地址赋给i.ibase,将iibase赋给i.itop。 ipush(istack &i,int ie) 初始条件:整型栈i存在。 操作结果:将整数ie加入到整型栈i中。 ipop(istack &i,int &ie) 初始条件:整型栈i存在。 操作结果:将ie从整型栈i中删除。ADT istack3.其他int display()/打印开始屏幕信息void getfun() /表达式输入四实验的结果及分析。五实验中出现的问题、解决方法和心得体会写完程序的第1步,先不让机器进行检错,先自己检查,当修改了较多不是粗心导致的问题后,后面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康教育技能培训
- 甘肃档案局档案课件管理
- 省内计划面试题目及答案
- 考点27 液体压强
- 2025年社会工作者职业水平考试社会工作职业资格考试社会工作职业资格考试真题模拟试卷
- 江西理工大学《建筑设备(给水排水)》2024-2025学年第一学期期末试卷
- 海南科技职业大学《平面设计史》2024-2025学年第一学期期末试卷
- 昆玉职业技术学院《流行音乐史Ⅱ》2024-2025学年第一学期期末试卷
- 2025年初级摄影师实战技能测试题库
- 山东力明科技职业学院《经济数学(1)》2024-2025学年第一学期期末试卷
- T-CBDA 86-2025 建筑幕墙、采光顶及金属屋面工程质量验收标准
- 厨房消防安全培训
- 小陈 税务风险应对常见指标与答复思路
- 2025年北京市中考语文试卷(含答案与解析)
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 辽师大版三年级上册英语素材各单元单词带音标重点句子
- “隆德”概念讲解—控制脑容量为目标控制颅内高压
- 第3章access2010查询操作-上传
- 钳工手工制作六角螺母详细
- 实数单元测试卷含答案
- 英国“海湾”级后勤船坞登陆舰
评论
0/150
提交评论