实验项目1 计算器的设计与实现

实验内容

(1)根据计算器的原理设计一个具有加、减、乘、除、括号等功能的简易计算器。
(2)能通过键盘输入需要计算的表达式,并实现简单算术运算,能将运算结果输出显示。
(3)能够实现混合运算的算术表达式求解,算术表达式中包括加、减、乘、除、括号等操作符;并且能够识别括号,优先级正确。

实验平台

通过高级程序设计语言(C++)实现计算器功能。

相关知识

队列(queue):一种可以实现“先进先出”的线性存储结构。

头文件:

#include<queue>

定义:

queue<double>q1; //保存操作数
queue<char>q2;   //保存操作符

基本操作:

queue入队,例:q.push(x);将x 接到队列的末端;

queue出队,例:q.pop();弹出队列的第一个元素,注意,并不会返回被弹出元素的值;

访问queue队首元素,例:q.front(),即最早被压入队列的元素;

访问queue队尾元素,例:q.back(),即最后被压入队列的元素;

判断queue队列空,例:q.empty(),当队列空时,返回true;

(stack):一种可以实现“先进后出”的线性存储结构。

头文件:

#include<stack>

定义:

stack<double>s1; //保存操作数
stack<char>s2;   //保存去掉括号的操作符

基本操作:

s.push(item); //将item压入栈顶

s.pop(); //删除栈顶的元素,但不会返回

s.top(); //返回栈顶的元素,但不会删除

s.size(); //返回栈中元素的个数

s.empty(); //检查栈是否为空,如果为空返回true,否则返回false

具体步骤

一、定义两个队列分别保存表达式中的操作数和操作符
(1)如果X是操作数,入队q1;
(2)如果X是操作符,入队q2。

二、双栈去括号及优先级算法
(1)将队列q1中的操作数直接压栈s1
(2)将队列q2中的操作符:
如果这个操作符比s2栈顶操作符的优先级高,则压栈;
如果这个操作符比s2栈顶操作符的优先级低,则从s1栈中弹出两个操作数,从s2中弹出栈顶操作符进行运算,并将运算结果压栈s1。
(3)直到队列q2中的元素没有为止。

三、计算表达式
将栈s2中的元素逐个出栈,栈s1的栈顶元素和队列q1的第一个元素进行四则运算,并将结果保存到队列q1的第一个元素中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值