欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    简单计算器程序设计.doc

    • 资源ID:2386066       资源大小:55KB        全文页数:7页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简单计算器程序设计.doc

    课程名称 编译原理 实验名称 简单计算器程序设计 姓 名 学 号 专业班级 实验日期 成 绩 指导老师 (实验目的实验原理主要仪器设备实验内容与步骤实验数据记录与处理实验结果分析问题建议)1.实验目的(1)加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用;(2)熟悉 Microsoft Visual C+6.0 的运行环境。(3)通过此次实验熟悉自己的编程能力。2.实验要求所做出的计算器代码不仅能够实验简单的加减乘除运算,而且还必须能够实现对表达式的操作。3.实验环境本次实验在vc6.0环境下编译通过。4.设计思想和原理(1)定义部分:定义常量、变量、数据结构;(2)初始化:设立LR(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串; (4)利用 LR(1)分析算法进行表达式处理:根据 LL(1)分析表对表达式符号串进行堆栈(或 其他)操作,输出分析结果,如果遇到错误则显示错误信息.5.程序源代码#include<stdio.h>#include<iostream.h>#include<stdlib.h>#include<string.h>#include<ctype.h>typedef float DataType;typedef structDataType *data;int max;int top;Stack;void SetStack(Stack *S,int n)S->data=(DataType*)malloc(n*sizeof(DataType);if(S->data=NULL)printf("overflow");exit(1);S->max=n;S->top=-1;void FreeStack(Stack *S)free(S->data);int StackEmpty(Stack *S)if(S->top=-1)return(1);return(0);DataType Peek(Stack *S)if(S->top=S->max-1)printf("Stack is empty!n");exit(1);return(S->dataS->top);void Push(Stack *S,DataType item)if(S->top=S->max-1)printf("Stack is full!n");exit(1);S->top+;S->dataS->top=item;DataType Pop(Stack *S)if(S->top=-1)printf("Pop an empty stack!n");exit(1);S->top-;return(S->dataS->top+1);typedef structchar op;int inputprecedence;int stackprecedence;DataType1;typedef structDataType1 *data;int max;int top;Stack1;void SetStack1(Stack1 *S,int n)S->data=(DataType1*)malloc(n*sizeof(DataType1);if(S->data=NULL)printf("overflow");exit(1);S->max=n;S->top=-1;void FreeStack1(Stack1 *S)free(S->data);int StackEmpty1(Stack1 *S)if(S->top=-1)return(1);return(0);DataType1 Peek1(Stack1 *S)if(S->top=S->max-1)printf("Stack1 is empty!n");exit(1);return(S->dataS->top);void Push1(Stack1 *S,DataType1 item)if(S->top=S->max-1)printf("Stack is full!n");exit(1);S->top+;S->dataS->top=item;DataType1 Pop1(Stack1 *S)if(S->top=-1)printf("Pop an empty stack!n");exit(1);S->top-;return(S->dataS->top+1);DataType1 MathOptr(char ch)DataType1 optr;optr.op=ch;switch(optr.op)case'+':case'-':optr.inputprecedence=1;optr.stackprecedence=1;break;case'*':case'/':optr.inputprecedence=2;optr.stackprecedence=2;break;case'(':optr.inputprecedence=3;optr.stackprecedence=-1;break;case')':optr.inputprecedence=0;optr.stackprecedence=0;break;return(optr);void Evaluate(Stack *OpndStack,DataType1 optr)DataType opnd1,opnd2;opnd1=Pop(OpndStack);opnd2=Pop(OpndStack);switch(optr.op)case'+':Push(OpndStack,opnd2+opnd1);break;case'-':Push(OpndStack,opnd2-opnd1);break;case'*':Push(OpndStack,opnd2*opnd1);break;case'/':Push(OpndStack,opnd2/opnd1);break;int isoptr(char ch)if(ch='+'|ch='-'|ch='*'|ch='/'|ch='(')return(1);return(0);void Infix(char *str)int i,k,n=strlen(str);char ch,numstr10;DataType opnd;DataType1 optr;Stack OpndStack;Stack1 OptrStack;SetStack(&OpndStack,n);SetStack1(&OptrStack,n);k=0;ch=strk;while(ch!='=')if(isdigit(ch)|ch='.')for(i=0;isdigit(ch)|ch='.'i+)numstri=ch;k+;ch=strk;numstri='0'opnd= atof(numstr);Push(&OpndStack,opnd);elseif(isoptr(ch)optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)Evaluate(&OpndStack,Pop1(&OptrStack);Push1(&OptrStack,optr);k+;ch=strk;else if(ch=')')optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)Evaluate(&OpndStack,Pop1(&OptrStack);Pop1(&OptrStack);k+;ch=strk;while(!StackEmpty1(&OptrStack)Evaluate(&OpndStack,Pop1(&OptrStack);opnd=Pop(&OpndStack);cout<<"你输入表达式的计算结果为"<<endl;printf("%-6.2fn",opnd);FreeStack(&OpndStack);FreeStack1(&OptrStack);void main()cout<<"请输入你要计算的表达式,并以“=”号结束。"<<endl;char str50;gets(str);Infix(str);getchar();6.实验结果

    注意事项

    本文(简单计算器程序设计.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开