计算器程序编程实习报告.doc_第1页
计算器程序编程实习报告.doc_第2页
计算器程序编程实习报告.doc_第3页
计算器程序编程实习报告.doc_第4页
计算器程序编程实习报告.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序实习报告一、需求分析:编写简易计算器程序,主要实现四则运算,运算符号包括“”,“+”,“/”,“*”,“(”,“)”,按照“先乘除后加减,先算括号内后算括号外,从左到右”的原则的原则进行计算。考虑到程序的编写困难度,暂时不予考虑多位数的四则运算,也不考虑平方、阶乘、三角函数的运算。只进行一位数的四则运算,所需要的内存空间不会很大,也就放弃空间不足自动添加空间的情况。输入:输入一个只含一位数的四则运算式,以#结束,运算符只包括“”,“+”,“*”,“/”,“(”,“)”。输出:直接输出结果“结果是: ”。测试数据:例如 9(32)*31# 二、概要设计: 开始从键盘上获取键入字符c 是 C!=#或Gettop!=#? 否 获取栈顶元素否是字符否栈顶元素比C的优先级是将字符压入OPTR输出结果小于大于等于出栈执行operate,压栈将字符压入栈OPTRJI脱括号结束返回 三、详细设计:1、主函数 首先定义两个栈,分别取名是OPTR,OPND,其中OPTR存放字符,OPND存放数字。将optr中压入#作为栈底元素,然后从键盘上获取表达式的字符 如果是数字,将该字符转化为数字,压入到栈opnd中。 如果是字符,和optr的栈顶元素比较优先级 1,、栈顶元素优先级top=MAXSIZE)printf(ERROR,Overflow!n);elses-stack s-top =x;s-top+;return 1;模块3、Operate函数定义: operate函数,利用switch()语句来operate(int a,char b,int c) 写定义3个实参,int a,b char theta; theta代表运算符,依次判断运算符的+switch(b) *,/,情况,进行运算, case+:a=a+c;break; 令a= a+c,a=a-c,a=a*c,a=a/c,case-:a=a-c;break; 返回a的值case*:a=a*c;break;case/:a=a/c;break; return a;模4、优先级判断将+*/()#的优先级做成如下的图 + , , ,*,/,(, 0, #, 0 ,=,寻找优先级即将左表中的对应坐标用程序语言找到即可,设 计一个二维数组,str7,7,将字符进行定位,i,j 分别代表横纵坐标,利用switch,语句进行选择,对应的strij即为优先级符号,所以将strij,作为函数的返回值调试中的问题:1、 最初只定义了一种数据类型的栈,出栈入栈函数也只有一种int数据类型,导致之后的函数调用数据类型不匹配,无法识别。2、 在定义入栈函数时,未能将push(*s,*x)中的x定义成指针类型,在pop(*s,x)中误将x定义成指针类型。3、 在调用函数时对栈的调用中数据类型不一致。4、 对主函数,从键盘键入的C为字符型,没有能够将字符型转化成整型进行计算,使得在计算中是用的09的ASCII码值进行的计算,在ASCII码表中09的ASCII码表依次为4857,int m ,m=c48,即c-48,得到真实的数值。5、取栈顶元素的函数定义错误,使得程序无法进行,由于gettop函数定义错误,在optr中一直重复取#的循环运算,导致“errorUnderflow”刷屏出现。 源代码;#include#include#include#define MAXSIZE 100#define true 1#define false 0typedef struct /定义堆栈数据类型int stackMAXSIZE;int top;SqStack;typedef struct /定义堆栈数据类型char stackMAXSIZE;int top;sqstack;void InitStack(SqStack *s) /初始化栈,栈顶指针为0s-top =0;void InitStack2(sqstack *s) /初始化栈,栈顶指针为0s-top =0;int Push1(SqStack *s,int x) /入栈if(s-top=MAXSIZE)printf(ERROR,Overflow!n);elses-stack s-top =x;s-top+; return 1;int Gettop1(SqStack *s,int *x) /取栈顶元素if(s-top=0)printf(error,gettop1);return 0;else*x=s-stacks-top;return 1;int Pop1(SqStack *s,int *x) /出栈if(s-top =0)printf(ERROR,pop1!n);elses-top -;*x=s-stacks-top;return 1;char Push2(sqstack *s,char x) /入栈if(s-top =MAXSIZE+1)printf(ERROR,push2!n);elses-stack s-top =x;s-top+;return 1;char Gettop2(sqstack *s,char *ch) /取栈顶元素if(s-top0)*ch=s-stacks-top-1;return *ch;elsereturn 0;char Pop2(sqstack *s,char *x) /出栈if(s-top =0)printf(ERROR,pop2!n);elses-top -;*x=s-stacks-top;return 1;char procede(char c1,char c2)int i=0,j=0;char str77=, , 0,=0&c=9 ) m=c-48; Push1(&OPND,m); c=getchar();else switch(procede(OPTR.stackOPTR.top-1,c) case:Po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论