数据结构-C描述-堆栈-简单计算器

1.实验需求

请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。要求:

  • 从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。
  • 输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取整。

例如,输入:4+2*5=                      输出:14

      输入:(4+2)*(2-10)=            输出:-48


2.概要设计

(1)抽象数据类型的定义:

采用两种栈(符号栈和数字栈)分别存储运算符和数字

两种栈都有各自的初始化、push、pop等函数

typedef struct{//符号栈 
	char *base;
	char *top;
	int stacksize;	
}Opstack;

typedef struct{//数字栈 
	int *base;
	int *top;
	int stacksize;	
}Numstack;

(2)主程序流程

主函数main

先定义栈符号栈和数字栈,定义一个数组ch临时存储输入的计算式初始化符号栈schar,调用PushOp函数在栈底放一个’=’,初始化数字栈snum,调用gets函数,将表达式临时存储在数组ch里,求数组长度。

在while循环(ch数组不到最后一个=或者schar不到栈底=)中,先判断现在所指数组元素是数字还是符号,如果是数字,调用Num函数将char型数字转换成int型,并将数字存储进数字栈,数组指针移动。如果是符号,调用Precede函数比较它和符号栈栈顶元素的优先级,如果栈顶元素优先级小于现在数组里的运算符,将该运算符进栈,移动数组指针;如果等于,栈顶元素出栈;如果大于,取数字栈栈顶两个元素,和符号栈栈顶元素,进行计算,再将结果压入数字栈。

循环结束,输出数字栈栈顶元素,即为结果。

(3)各模块介绍

由主程序main依次调用:

  1. int InitOpStack(Opstack &s)符号栈初始化函数
  2. int PushOp(Opstack &s, char e)符号栈进栈函数
  3. int InitNumStack(Numstack &s)数字栈初始化函数
  4. char GetTopOp(Opstack &s)符号栈取栈顶函数
  5. int In(char c)判断是运算符还是数字函数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值