简单计算器语言实现支持四则运算取余正负数括号腾讯云开发者社区

Simple calculator

input from cin,output to cout

简单计算器:支持加减乘除取余、正负数、括号

主要实现:

1.两个类Token和Token_stream:将输入表达式分为单词如1.82,+,(,存储在Token类对象中,Token_stream类实现能缓存1个单词的流

2.三个实现语法的函数expression(),term(),primary():实现表达式计算顺序

3.计算流程函数calculate():用循环实现任意次数表达式计算,直到出错或正常退出

The grammar is:

Statement:

Expression

Print

Quit

Print:

Quit:

Expression

Term

Expression + Term

Expression - Term

Term:

primary

Term * primary

Term / primary

Term % primary

Primary:

Num

( Expression )

+ primary

- primary

Num:

floating-point-literal

*/

#include <iostream>

using namespace std;

class Token;

class Token_stream;

void keep_window_open();

double expression();

double term();

double primary();

void welcome();

void calculate();

const char number = '8';

const char print = ';';

const char quit = 'e';

const string prompt = ">";

const string myresult = "=";

class Token{

public:

char m_kind;

double m_value;

Token(char kind = '\0', double value = 0)

:m_kind(kind)

,m_value(value)

{}

};

class Token_stream{

public:

Token get();

void putback(Token t);

Token_stream()

:m_full(false)

,m_buffer('\0', 0)

{}

private:

bool m_full;

Token m_buffer;

};

//定义能够缓存1个单词的流ts

Token_stream ts;

Token Token_stream::get()

//缓冲区有单词,从缓冲区中取单词

if(true == m_full){

m_full = false;

return m_buffer;

//缓冲区没有单词,从输入流中取单词

char ch;

cin>>ch;

switch(ch){

case '+':

case '-':

case '*':

case '/':

case '%':

case '(':

case ')':

case print:

case quit:

return Token(ch);

case '.':

case '0':case '1':case '2':case '3':case '4':

case '5':case '6':case '7':case '8':case '9':

double val;

cin>>val;

return Token(number, val);

default:

cout<<"err input!"<<endl;

keep_window_open();

void Token_stream::putback(Token t)

if(true == m_full){

cout<<"err: m_buffer is full."<<endl;

keep_window_open();

return;

m_full = true;

m_buffer = t;

void keep_window_open()

char ch;

fflush(stdin);

cin>>ch;

exit(EXIT_FAILURE);

//处理+ - 加、减运算

double expression()

double left = term();

while(true){

switch(t.m_kind){

case '+':

left += term();

break;

case '-':

left -= term();

break;

default:

return left;

//处理* / % 乘、除、取余运算

double term()

double left = primary();

while(true){

switch(t.m_kind){

case '*':

left *= primary();

break;

case '/':

double d = primary();

if(0 == d){

cout<<"divide into zero"<<endl;

keep_window_open();

left /= d;

break;

case '%':

double d = primary();

int i1 = int(left);

int i2 = int(d);

if(i1 != left){

cout<<"left operand not int"<<endl;

keep_window_open();

if(i2 != d){

cout<<"right operand not int"<<endl;

keep_window_open();

if(i2 == 0){

cout<<"% divide into 0"<<endl;

left = i1 % i2;

break;

default:

return left;

//处理()- + 括号、正、负运算

double primary()

switch(t.m_kind){

case number:

return t.m_value;

case '(':

double d = expression();

if(')' != t.m_kind){

cout<<"expected ')'"<<endl;

keep_window_open();

return d;

case '-':

return -primary();

case '+':

return +primary();

default:

cout<<"expected primary!"<<endl;

keep_window_open();

void calculate()

while(cin){

cout<<prompt;

if(quit == t.m_kind)return;

else

cout<<myresult<<expression()<<endl;

void welcome()

cout<<"Welcome to our simple calculator."<<endl

<<"-----------------------------"<<endl

<<"floating-point numbers"<<endl

<<"operator: '+' '-' '*' '/' '%'"<<endl

<<"negative: '-'"<<endl

<<"positive: '+'"<<endl

<<"end of expression: ';'"<<endl

<<"quit: 'e'"<<endl

<<"-----------------------------"<<endl;

int main()

welcome();

calculate();

cout<<"See you."<<endl;

THE END
0.花2个月拆一辆特斯拉Model3:3.7万字详解所有部件LDU 的逆变器呈 现三棱镜构造,每个半桥位于三棱镜的每个面上,每个半桥的 PCB 驱动板(三角形)位 于岚图的“琥珀” 和“云母”电池系统,分别对应在电池包内加入气凝胶和层状云母的方式达到隔热阻燃效果受限于电子膨胀阀本身技术壁垒,全球电子膨胀阀市 场呈现寡头垄断局面,2021 年三花智控、不二工机和盾jvzquC41yy}/fxsiejkek7hqo1gsvrhng1=24:<849=43B8286?72
1.新能源汽车构造与检修(第2版)338.pptx新能源汽车构造与检修(第2版)338.pptx,根据教材和网络资源整理制作,可作为授课教师的参考资料和从业人员的自学资料。新能源汽车构造与检修项目一 新能源汽车基础 知识ENERGY/ Project Guide项目导读近年来,为了解决传统燃油汽车排放物污染环境的问题,各国都在大力发展jvzquC41o0hpqt63:0ipo8mvon532;7134831?6463;33;:2276437xjvo
2.论对外汉语教学范文刮风、爬山、刷牙、抽烟、购物、流泪、付款、划船、戒烟、挣钱、盖章、候选、经纬、聋哑、正负、棕色。(一)时间顺序象似在复合词构造中的主要体现 1.联合式 描写自然现象的联合式词语多采用时间上的先后顺序这其中又包含意义完全相同,如“玩花招――耍花招”;省略个别成分,如“芝麻绿豆官――绿豆官”;语序jvzquC41yy}/i€~qq0ipo8mcqyko1;62:46/j}rn
3.硬核拆解,特斯拉Model3的内部构造怎样?财富号正负极均为多孔材料,充放电时锂离子就在正极和负极的孔隙中移动,导致正负极材料膨胀或收缩,当锂电池电压过高或过低,就意味着锂离子过度集中在正负极其中之一,导致这一边的电极过度膨胀而破碎,还容易产生锂枝晶刺破电池结构,而另一边的电极由于缺乏锂离子支撑,会发生结构坍塌,如此正负极都会受到永久性损害。电解液和jvzquC41ecogwqfq0ggtvvtpg{4dqv4pgyy0497429883>9447?36?;;666
4.太全面了!分析化学知识点汇总!分析化学是关于研究物质的组成、含量、结构和形态等化学信息的分析方法及理论的一门科学,是化学的一个重要分支。是鉴定物质中含有那些组分,及物质由什么组分组成,测定各种组分的相对含量,研究物质的分子结构或晶体。今天,小编就从分析化学的发展历史、分析方法、几大分析方法等几个角度为各位粉丝介绍分析化学 发展历jvzq<84yyy4dpvmi0eun1Rsfwuzs{6Nphqxnc}nqp1j34m:d;c7d:m<:2e7dgA9e756e3;fh224ivvq
5.风险定量分析的方法汇总十篇3.3 构造判断矩阵 判断矩阵的作用是同层次的两两元素之间的相对重要性进行比较。层次分析法采用1~9标度方法,对不同情况的评比给出数量标度,如表1所示。[7] 构造判断矩阵,判断矩阵A=(aij)n×n有如下性质:①aij>0;②当i≠j时,aji=1/aij;③当i=j时,aij=1。aij为i与j两因素相对权值的比值。 jvzquC41yy}/z~jujw4dqv3ep1nbq€jp17738?3jvor
6.【图】【机械构造研究员】说完就改,这很吉利!简聊重新调校星瑞那也是没的挑了。叫兽拿游标卡尺测量一圈,能活动的钣金缝隙控制在3.4毫米左右,正负差值在0.4毫米jvzquC41en{ccsfz0c{uqqtog0ipo7hp1dht1}mtgcjpywjt149eh:je73?78?ihc1713;79657.37mvon
7.锂离子电池的的原理配方和工艺流程洁净工程联盟宋松2、正负混料 石墨:负极活性物质,构成负极反应的主要物质;主要分为天然石墨和人造石墨两大类。非极性物质,易被非极性物质污染,易在非极性物质中分散;不易吸水,也不易在水中分散。被污染的石墨,在水中分散后,容易重新团聚。一般粒径 D50为20μm左右。颗粒形状多样且多不规则,主要有球形、片状、纤维状等。 jvzquC41yy}/uqfpi{kykwjk0ipo8ftvkimg899256787mvon
8.力扣算法整理解答:可以采用暴力算法,遍历出所有的子串,然后再去查看每个子串是否回文。 可以以一个字符作为回文中心,向两边扩展,如果扩展过程中显示两个字符不相同,则不回文。不过扩展过程中要考虑奇数长度和偶数长度的区别 private int count=0; public int countSubstrings(String s){ for(int i=0;i=0 && endjvzquC41dnuh0lxfp0tfv8Qggu{sghHUFP5bt}neng5eg}fknu524=;77;:8
9.小型飞机的结构和使用方法车友交流今天,零件到货了,我花了半个小时安装上去,试验效果还行,这里给大家介绍一下安装方法,说说使用体会。 尾端深蓝标识内嵌位置较高,为下方横贯尾灯让位更多,倒三角状向上隆起,半数位置超出后尾门顶盖边框,直至如果你也想改装你的爱车,请记住以下几点: 在合法范围内改装:不要改变车辆登记的结构、构造或者特征,jvzquC41yy}/fxsiejkek7hqo1zbi8zie1748?;763
10.JavaScript基础举目沧桑的博客2.动态性:JavaScript是动态的,它可以直接对用户或客户端输入做出响应而无需经过Web服务程序。它对用户的反应响应是采用事件驱动的方式进行的。(事件:指在主页中执行了某种操作所产生的动作;事件驱动:指当事件发生后就会触发相应的时间响应) 3.跨平台性:JavaScript依赖于浏览器本身,不依赖操作系统,与操作器环境无关,jvzquC41dnuh0lxfp0tfv8|w46<17:4ctvodnn4fgvgjn|4337>13A<7
11.物理学报利用XRD系统地研究了石墨/Li(Ni1/3Co1/3Mn1/3)O2 18650型锂离子电池充放电过程中正负极活性材料的晶体结构和微结构的变化.已观测到,由于Li原子的脱嵌进一步计算并仿真了系统点扩散函数(point spread function, PSF),构造了组织模型,进行了成像仿真.最后分析了影响扇阵换能器系统分辨率的因素.研究结果表明:jvzquC41ywrjzk3krj/cl3ep1gsvrhng1812B4;