C语言计算器小程序_第1页
C语言计算器小程序_第2页
C语言计算器小程序_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、程序实习报告书起止日期:2014年6月23日至2014年二月二£日学号:班级:姓名:指导教师:通信与电子工程学院2014年7月4日.下载可编辑.目录1. 需求分析21.1程序的功能21.2输入输出的要求21.3测试数据2概要设计3详细设计43.1模块功能说明4调试分析6核心源程序清单和执彳亍结果6需求分析1.1程序的功能本程序是一个计算器小程序,利用算符优先关系,实现对算术四则混合运算表达式的求值并输出结果。1.2输入输出的要求输入的形式:算术表达式,以井号#”结束。例如2*(3+4)#;包含的运算符只能有'+'、-'、*'、/''(&

2、#39;、')';输出的形式:运算结果,例如Answeris:14;1.3测试数据第一组:输入3*(9-4)#输出Answeris:15w<9-4>ltnwseris15pessanvkeytocentinue第二组:输入140/(57+13)#输出Answeris:2140/Hnusei'is2Pt'essanykeytocontinue第三组:输入56*(12-10)#输出Answeris:112E6»<12-10>#Hnuseris112Pressanvkeytocontinue概要设计1. 详细设计主要部分详细流程:(1

3、)设置两个工作栈,分别存放操作数和运算结果typedefstruct片定二一个栈存放运算数W<iniaMAX:inttop;>OPND;typedeFstruct定义一个栈存放运算符*,<charaMAX;inttop;>OPTR;(2)判断字符的优先级charPrecede(chars,charc)/帚判断字符的优先级*/<Snitch(5)case'+':case':<iF(c=,+,|c=b-J)return'>'elseif(c*-b|cV)return'<*;elseif(c=-'

4、(')return'<'elseif(c=*>')return'>'elsereturn'>'>break;case:if(C='+'|C=-')returnF>*;elseif(c='*b|c=,/1)return'elseiF(c-'(1)return1<*;elseiF(c=,)1)return>elsereturn1>1;>brtdk;s”1(R:<if(c=')')return1;elsere

5、turn1<break;case1)1:return1>F;>break;case1ttb:c=W)returnT-'elsereturnb:break;调试分析错误提示1:errorC2018unknowncharacter1:errorC201B:unknowncharacter"Bxbb*:errorC2146:syntaxerror:missing:'I错误原因:在中文输入法下输入的“;”导致程序不能识别。调试方法:调到英文输入法下输入即可。错误提示2:earningCiiO2U:'InltOPHD':differenttyp

6、esforFormalandactualparameter1errorC2115:'Function*:incompatibletypesearningC402U:'InitDPTR'differenttypesforformalandactualparameter1errorC2115:'Function':inconpatiibletpes错误原因:在Init_OPND,Init_OPTR后边都忘加了&”符号导致程序不识别。调试方法:在Init_OPND,Init_OPTR后边加上&”即可。核心源程序清单和执行结果全部源代码如下:#i

7、nclude<stdio.h>#include<stdlib.h>#defineMAX100typedefstruct/*定义一个栈存放运算数*/(intaMAX;inttop;OPND;typedefstruct/*定义一个栈存放运算符*/(charaMAX;inttop;OPTR;voidInit_OPND(OPND*s)/*初始化运算数栈*/(s->top=0;voidInit_OPTR(OPTR*s)/*初始化运算符栈*/(s->top=0;voidPush_OPND(OPND*s,intx)/*压入一个运算数*/(s->top+;s->

8、as->top=x;voidPush_OPTR(OPTR*s,charx)/*压入一个运算符*/(s->top+;s->as->top=x;/*取出一个运算数*/intPop_OPND(OPND*s)(intx;x=s->as->top;s->top-;returnx;charPop_OPTR(OPTR*s)/*取出一个运算符*/(charx;x=s->as->top;s->top-;returnx;intGetTop_OPND(OPND*s)/*取栈顶运算数*/(return(s->as->top);charGetTop

9、_OPTR(OPTR*s)/*取栈顶运算符*/(return(s->as->top);intIsOpr(charc)/*判断输入字符是否为运算符*/(if(c='+'|c='-'|c='*'|c='/'|c='('|c=')'|c='#')return1;elsereturn0;charPrecede(chars,charc)/*判断字符的优先级*/(switch(s)(case'+':case'-':(if(c='+'|c

10、='-')return'>'elseif(c='*'|c='/')return'<'elseif(c='(')return'<'elseif(c=')')return'>'elsereturn'>'break;case(if(c='+'|c='-')return'>'elseif(c='*'|c='/')return

11、9;>'elseif(c='(')return'<'elseif(c=')')return'>'elsereturn'>'break;case'(':(if(c=')')return'='elsereturn'<'break;case')':(return'>'break;case'#':(if(c='#')return'='el

12、sereturn'<'break;intOperate(intx,charopr,inty)/*计算*/(intresult;switch(opr)(case'+':result=x+y;break;case'-':result=x-y;break;caseresult=x*y;break;case'/':result=x/y;break;returnresult;voidmain()(OPNDsdata;OPTRsoper;inta,b,result,i;charch,theta;Init_OPND(&sdata)

13、;Init_OPTR(&soper);Push_OPTR(&soper,'#');ch=getchar();while(ch!='#'|GetTop_OPTR(&soper)!='#')/当读入的字符和OPTR栈顶的字符均为#'时结束运算*/(if(!IsOpr(ch)/*是运算数的情况*/(i=atoi(&ch);/*将字符型转为整型*/ch=getchar();/*使得可以输入几位数*/while(!IsOpr(ch)(i=i*10+atoi(&ch);ch=getchar();Push_OPND(&sdata,i);else(switch(Precede(GetTop_OPTR(&soper),ch)/*比较栈顶运算符和刚输入运算符的优先级*/case'<':Push_OPTR(&soper,ch);ch=getchar();break;case'=':theta=Pop_OPTR(&soper);ch=getch

温馨提示

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

评论

0/150

提交评论