- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2013年12月实训报告 实训小组成员: 易鑫 邹恒锐 祝安苇 王文珍 目录 表达式计算器简介 小组成员主要分工 主要代码及代码展示 成员代码讲解 程序截图展示 表达式计算器 计算器在当今社会的应用无处不在,大到政府、公司,小到家庭个人,计算器已经广泛应用到了社会的方方面面。 但是,常用计算器的功能不够丰富,比如我们手机上的计算器程序,只能进行简单的加减乘除的运算,而且要一个数字一个数字的进行输入,功能差而且效率低。表达式计算器这它可以任由你输入一串算式,其中可以包含加减乘除、括号、三角函数等各种运算符,而且括号可以多重嵌套,计算数据位双精度型,精确度较高。 小组分工 易鑫:括号匹配等函数的编写,以及文档PPT制作。 邹恒锐:进行运算函数的编写,以及整体流程。 祝安苇:四则运算函数和atof函数的编写。 王文珍:差错检测函数的编写。 用到的数据结构类型: 顺序栈 typedef struct { SElemType * base; SElemType * top; int stacksize; }SqStack; InitStack(N);存数据 InitStack(S);存运算符和括号 typedef struct{ int *q; int *h; int size; }pos; 存括号位置 q为前括号; h为后括号; 主要函数 input(SqStack S,SqStack N,char *a);将字符n存入字符栈S和数字栈 N Status TellError_1(SqStack S);判断括号是否对齐 Status TellError_2(SqStack S);判断符号是否正确 Status TellError_3(SqStack N);判断表括达式是否不存在 Status TellError_4(char *a);判断数字接括号无运 算符的错误 Status TellError_5(SqStack S,*num);判断被除数是否为0 Status atof(SqStack N,double *a);数字栈N转换为数字, 存入数组 Status findsymbol_kh(int i,SqStack S,pos pos,int flag);找到N中的括号 Status GetNumof(int num_len,int sym_len,SqStack S); 得到运算符和数字的个 数 Status GetChaPos(SqStack S,int start,int pos);得到运算符的次序 double Operate(SqStack S,int num_len,int sym_len,int kh_len,double *num,pos kh,pos p,int flag);进行运算过程 double Operate_arith(double temp1,char symbol,double temp2);进行单个四则运 算 double Operate_pos(int start,int end,SqStack S,double *num,int num_len,int sym_len); 进行按位置的运算过程 设计思路 输入表达式 判断正确性 分离符号与数字到栈S与栈N,并且判断符号是否出错 找括号并排序 否 输出错误信息 栈N数字存入数组num 按序进行运算 输出结果 除数为0 输出错误信息 截图 Status TellError_1(SqStack S) { SqStack temp; InitStack(temp); int left=0; int right=0; SElemType n; while(S.top != S.base) { Pop(S,n); if(n == () left++; if(n == )) right++; Push(temp,n); } while(temp.top != temp.base) { Pop(temp,n); Push(S,n); } if(left==right) return TRUE; else return FALSE; } //判断括号是否对齐 Status TellError_2(SqStack N) { if(
文档评论(0)