1. 首页
  2. 文档大全

实验四:通过栈设计一个计算器程序:.

上传者:11****88 2022-07-04 20:19:29上传 DOC文件 86.01KB
实验四:通过栈设计一个计算器程序:._第1页 实验四:通过栈设计一个计算器程序:._第2页 实验四:通过栈设计一个计算器程序:._第3页

《实验四:通过栈设计一个计算器程序:.》由会员分享,可在线阅读,更多相关《实验四:通过栈设计一个计算器程序:.(19页珍藏版)》请在文档大全上搜索。

1、实验四:通过栈设计一个计算器程序学 院 理学院 专 业 空间信息与数字技术   班 级 空数131 学 号 1307010160、1307010177、1307010179、1307010182 姓 名 吴廷友、佘艳云、周志妹、晏子先 实验时间: 2015年11月5日 一、 实验目的:1.熟悉栈的表示和实现方法,基于相应的表示实现;2.基于栈的各种操作,做一个简单的计算机软件。3.掌握栈各种操作,并能进行迷宫求解;二、 实验环境:软件环境:Windows XP,VC +;硬件环境:XXX计算机;三、 实验要求与提示:要求:1. 实现栈的初始化、入栈和出栈等基本操作。2. 基

2、于栈的各种操作,以及栈的表示和存储,设计一个简单的计算器应用程序。该程序能够实现计算一个表达式的值,例如能够计算类似于2.5+(3.1-1.3)*6这一类的表达式的值。最后要求使用图形化界面程序,将计算器应用程序打包成一个.exe文件。提示:基于栈的操作,计算表达式的值的算法思想: 1.对栈进行初始化操作;2.分别将表达式的值和符号放入两个栈,通过四则运算的优先级进行算法设计。即:若一个表达式为2.5+3.2*1.4,将数值和符号分别同时入栈,当遇到乘法时,就将栈顶元素以及栈顶元素的上一个元素进行出栈操作,然后将计算结果再入栈。图形化界面程序需要利用C+来实现,VC6.0中的MFC就是用来开发

3、图形化界面的。四、 算法设计及源码分析#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 10#define STACKINCREMENT 10char op7='+','-','*','/','(',')','n'/运算符集合typedef struct /定义操作符结构体int *base;int *top;int stacksize;SqStack;typedef struct /定义操作

4、数结构体double *base;double *top;int stacksize;DoubleStack;void InitStack(SqStack *s)/构造一个装操作符的空栈s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int);s->top=s->base;s->stacksize=STACK_INIT_SIZE;void InitDoubleStack(DoubleStack *s)/构造一个装操作数的空栈s->base=(double *)malloc(STACK_INIT_SIZE*sizeof(do

5、uble);s->top=s->base;s->stacksize=STACK_INIT_SIZE;char GetTop(SqStack *s) /返回线顶元素if(s->top=s->base)printf("栈为空!");return;return *(s->top-1);double GetTopDouble(DoubleStack *s)if(s->top=s->base)printf("栈为空!");return 0;return *(s->top-1);void Push(SqStack

6、 *s,int e)/操作符的入栈的函数if(s->top-s->base>=s->stacksize)s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int);s->top=s->base+s->stacksize;s->stacksize+=STACKINCREMENT;*(s->top)=e;s->top+;void PushDouble(DoubleStack *s,double e)/操作数的入栈的函数if(s->

7、top-s->base>=s->stacksize)s->base=(double *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(double);s->top=s->base+s->stacksize;s->stacksize+=STACKINCREMENT;*(s->top)=e;s->top+;void Pop(SqStack *s,int *e)/操作符的出栈的函数if(s->top=s->base)printf("栈为空!&quo

8、t;);return;s->top-;*e=*(s->top);void PopDouble(DoubleStack *s,double *e)/操作数的出栈的函数if(s->top=s->base)printf("栈为空!");return;s->top-;*e=*(s->top);int In(char c)/判断是否是运算符,如果是反回1,不是则返回0;int i;for(i=0;i<8;i+)if(c=opi)return 1;return 0;char Precede(char charGetTop,char c)/判断运

9、算符的优先级switch (charGetTop)case '+':switch (c)case '+':return '>'case '-':return '>'case '*':return '<'case '/':return '<'case '(':return '<'case ')':return '>'case 'n':ret


文档来源:https://www.renrendoc.com/paper/212663700.html

文档标签:

下载地址