计算器程序编程实习报告.doc

上传人:灯火****19 文档编号:135095374 上传时间:2020-06-12 格式:DOC 页数:13 大小:64KB
返回 下载 相关 举报
计算器程序编程实习报告.doc_第1页
第1页 / 共13页
计算器程序编程实习报告.doc_第2页
第2页 / 共13页
计算器程序编程实习报告.doc_第3页
第3页 / 共13页
计算器程序编程实习报告.doc_第4页
第4页 / 共13页
计算器程序编程实习报告.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《计算器程序编程实习报告.doc》由会员分享,可在线阅读,更多相关《计算器程序编程实习报告.doc(13页珍藏版)》请在金锄头文库上搜索。

1、 程序实习报告一、需求分析:编写简易计算器程序,主要实现四则运算,运算符号包括“”,“+”,“/”,“*”,“(”,“)”,按照“先乘除后加减,先算括号内后算括号外,从左到右”的原则的原则进行计算。考虑到程序的编写困难度,暂时不予考虑多位数的四则运算,也不考虑平方、阶乘、三角函数的运算。只进行一位数的四则运算,所需要的内存空间不会很大,也就放弃空间不足自动添加空间的情况。输入:输入一个只含一位数的四则运算式,以#结束,运算符只包括“”,“+”,“*”,“/”,“(”,“)”。输出:直接输出结果“结果是: ”。测试数据:例如 9(32)*31# 二、概要设计: 开始从键盘上获取键入字符c 是 C

2、!=#或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-to

3、p+;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、优先级判断将+*/()#的优先级做成如下的图 + , , ,*

4、,/,(, 0, #, 0 ,=,寻找优先级即将左表中的对应坐标用程序语言找到即可,设 计一个二维数组,str7,7,将字符进行定位,i,j 分别代表横纵坐标,利用switch,语句进行选择,对应的strij即为优先级符号,所以将strij,作为函数的返回值调试中的问题:1、 最初只定义了一种数据类型的栈,出栈入栈函数也只有一种int数据类型,导致之后的函数调用数据类型不匹配,无法识别。2、 在定义入栈函数时,未能将push(*s,*x)中的x定义成指针类型,在pop(*s,x)中误将x定义成指针类型。3、 在调用函数时对栈的调用中数据类型不一致。4、 对主函数,从键盘键入的C为字符型,没有能

5、够将字符型转化成整型进行计算,使得在计算中是用的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;

6、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

7、 *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

8、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 ,=,;switch(c1) case+:i=0;break;case-:i=1;break;c

9、ase*:i=2;break;case/:i=3;break;case(:i=4;break;case):i=5;break;case#:i=6;break; switch(c2)case+:j=0;break;case-:j=1;break;case*:j=2;break;case/:j=3;break;case(:j=4;break;case):j=5;break;case#:j=6;break;return(strij);/返回优先级判断结果intoperate(int a,char b,int c)switch(b) case+:a=a+c;break;case-:a=a-c;break;case*:a=a*c;break;case/:a=a/c;break; return a; main() sqstack OPTR; SqStack OPND; char theta,c,x; int a,b,m ; InitStack2(&OPTR); Push2(&OPTR,#); InitStack(&OPND); printf(请输入一个计算式,以#结束n);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号