简单的模拟计算器程序
- 格式:doc
- 大小:75.50 KB
- 文档页数:5
同步带计算器在线计算
同步带计算器是一种基于有限状态机的计算器,它使用同步带的形式对输入进行计算,并根据预先定义好的状态转移规则进行状态转换。
在计算过程中,同步带上的符号会根据当前的状态和输入符号进行移动和变化,最终输出计算结果。
由于同步带计算器是一种特殊的计算模型,没有一个统一的在线计算器可以直接进行同步带计算。
如果你想进行同步带计算,有两种常用的方法可以选择:
1. 自行编写程序:你可以使用编程语言,如Python、Java等,来编写一个同步带计算器的模拟程序。
该程序可以读取输入、定义状态转移规则,并进行计算,最后输出结果。
2. 使用在线模拟工具:有一些在线工具提供了同步带计算器的模拟功能,可以方便地输入状态转移规则、输入初始状态和输入符号,然后自动计算并输出结果。
你可以在搜索引擎中搜索"Online Turing Machine Simulator",找到适合你的工具。
无论是自行编写程序还是使用在线模拟工具,进行同步带计算时需要清楚地定义状态转移规则、输入符号和初始状态,以确保计算的正确性。
同步带计算是一种相对复杂的计算模型,对于新手来说可能有一定的学习曲线,但一旦掌握了相关概念和规则,就可以使用同步带计算器进行各种问题的计算。
淘师湾计算机完整2019级作业题目和答案淘师湾计算机学院2019级作业题目有:
1. 编程题:设计一个简单的计算器程序,要求能进行加减乘除四则运算,具有错误处理机制。
2. 数据结构题:实现一个栈并设计相应的接口,要求能够进行入栈、
出栈、获取栈顶元素等操作。
3. 网络通信题:利用TCP/IP协议实现一个文件传输程序,能够实现文
件的上传和下载功能。
4. 数据库设计题:设计一个学生信息管理系统,要求能够进行学生信
息的增删改查操作,并能够生成成绩报表。
5. 操作系统题:模拟一个进程调度算法,要求能够完成进程的创建、
调度和销毁等操作,并能够输出调度过程。
淘师湾计算机学院2019级作业答案如下:
1. 编程题:可以使用类或函数进行设计,根据用户选择进行相应的计
算操作,当用户输入非法字符或进行除0操作时,程序能够输出错误
信息并重新提示输入。
2. 数据结构题:可使用数组或链表实现栈的存储,并设计相应的方法
进行栈的操作,例如入栈、出栈、获取栈顶元素等。
3. 网络通信题:利用Socket编程实现TCP/IP协议的文件传输功能,可
以发送和接收文件,同时考虑到文件大小和网络传输速度的问题。
4. 数据库设计题:可以采用关系型数据库或面向对象数据库进行设计,
建立学生信息表并设计增删改查操作的SQL语句,通过与用户交互实现成绩报表的生成。
5. 操作系统题:根据进程调度算法的特点进行模拟,可以使用C++或Java等语言进行设计,并将进程状态进行可视化展示,方便观察进程调度过程和效果。
计算机c语言实训报告计算机c语言实训报告(通用3篇)计算机c语言实训报告篇1一、课题名称:简洁计算器设计一个简洁的程序来模拟计算器的功能。
二、设计目的:1、通过理论学问与实际需求相结合,编辑解决一些日常中的实际问题,培育初步的独立分析和设计力量。
2、了解应用程序设计解决实际问题的详细过程和实现方法,把握应用C语言进行程序设计的基本规范;3、重点把握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步把握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2、输入简洁的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。
5、完成设计说明书(A4)。
五、代码设计:#include stdio.h main { float x,y;char operator;printf(x,yun suan fu ,y: ); scanf(%f%c%f,x,operator,y); switch(operator){case +: printf(%.2f+%.2f=%.2f,x,y,x+y); break; case -:printf(%.2f-%.2f=%.2f,x,y,x-y); break; case _:printf(%.2f_%.2f=%.2f,x,y,x_y); break; case /: if(y==0)printf(chushushilingwuyiyi); elseprintf(%.2f/%.2f=%.2f,x,y,x/y); break;default: printf(yunsunfuwuxiao); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的同学来说当然非常重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步把握了一些关于这门课的学问这次的课程设计是对我们一个学期来所学的学问的综合考察,里面涉及到了我们大多数所学学问。
“手把手教你学计算器”模拟课堂河北郭杏好(一)引入课题[师]前面我们已学习了有理数的加、减、乘、除、乘方的意义及其运算法则.掌握了有理数的加、减、乘、除、乘方及简单的混合运算.下面同学们来看一个题:计算:12×(3.87-2.21)×152+1.35这个题是含有乘、减、乘方的混合运算.在运算时,首先要算乘方,即152和1.35,及括号内的减法,其次再算乘法.然后是加法.最后得出结果,而在计算乘方时,像1.35算起来较繁,这时为了运算方便,我们可以运用计算器来进行计算.怎样运用计算器进行计算呢?我们这节课就来探讨计算器的使用.(二)传授新课[师]电子计算器(electronic calculator简称计算器),作为二十世纪的重大科技发明之一,是一种体积小,运算迅速准确,操作简便,效率很高,颇受欢迎的计算工具,为更好地使用计算器,我们首先来认识一下计算器的基本构造,同学们平时所用的计算器都不大相同,但它们的基本结构是一样的.计算器按照功能可分为简单计算器、科学计算器、图形计算器等几种类型.好,现在我们来介绍一种科学计算器计算器的面板是由键盘和显示器组成的.显示器是用来显示输入的数据和计算结果的装置.显示器因计算器的种类不同而不同,有单行显示的,也有双行显示的.在键盘的每个键上,都标明了这个键的功能.我们看键盘上标有的键,是开机键,在开始使用计算器时先要按一下这个键,以接通电源,计算器的电源一般用5号电池或钮扣电池.再看键,是关机键,停止使用计算器时要按一下这个键,来切断计算器的电源,是清除键,按一下这个键,计算器就清除当前显示的数与符号.的功能是完成运算或执行命令.是运算键,按一下这个键,计算器就执行加法运算.键盘上有些键的上边还注明这个键的其他功能(称为第二功能),这个功能通常用不同的颜色标明以区别于这个键的第一功能.如:直接按一下键,计算器直接执行第一功能,即完成运算或执行命令;若先按键,再按键,执行第二功能,即执行百分率计算.现在请同学们将计算器打开,按下这个键,屏幕上显示出“0”,这说明计算器的电源已接通,可以开始运算了.好,下面大家试着用计算器计算下列各题(学生动手,交流)[师]谁能说一说你如何用计算器计算第(1)小题23+38.2;呢?[生]先按2,3,这时显示器上显示:23,再按运算键“+”,这时显示器上闪一下,仍显示23,然后按3,8,.,2,这时显示器上显示38.2,最后按“=”键,这时显示器上显示得数61.2.所以23+38.2=61.2.[师]很好,那第(2)小题41.9×(-0.6)呢?[生甲]先按4,1,.,9,输入了数据41.9,再按乘法运算键,即“×”,然后再按符号键“(-)”,再输入0.6,最后按“=”键,这时得出得数,所以:41.9×(-0.6)=-25.14[生乙]老师,我的计算器上没有符号键“(-)”,怎么办呢?[师]谁能帮他解决这个问题呢?[生丙]看看键盘上有没有“”键,若有可先输入0.6,然后再按符号变换键“”,就可以输入(-0.6);如果没有,可以先输入数字41.9,然后按乘法运算键“×”,再按“(”“-”“0、.、6”“)”,最后按“=”即可得出得数.[师]乙同学,丙同学解决了你的问题了吗?[生乙]解决了.[师]好,下面我们看第(3)小题23×115;,谁来说一下呢?[生甲]23×115,先输入数字23,再按乘法运算键,然后依次按“1”“”“1”“”“5”,这时屏面上显示115,再按“=”即可得到结果.23×115=27.6. [生乙]老师,我的计算器上没有“”怎么办? [生丙]可以把115变为(1+1÷5).即先输入23,然后依次按“×”“(”“1”“+”“1”“÷”“5”“)”等键,再按“=”键,即可得出结果.[师]大家真棒.自己就能解决好多问题.接下来,看(4)1.22、(5)124,这两个是乘方运算,同学们能计算吗?[生]能.[生甲]计算1.22.要用到乘幂运算键“y x ”,第一步输入1.2,第二步按“y x ”,第三步按2,再后按键“=”,显示1.44.即1.22=1.44.[生乙]计算1.22,只需输入1.2,按“x 2”键,再按“=”键就可以得出得数.[生丙]计算1.22,还可以这样:输入1.2,按乘法运算键,再按“=”键.这样也可以得出得数. [师]很好,同学们表现得很不错,想了这么多计算方法.那(5)小题怎么计算呢? [生]用刚才甲同学的方法,即按键顺序依次是.这样得出结果. 124=20736 [师]很好,同学们通过交流、合作,总结出利用计算器计算的方法.即计算器的用法.老师为你们高兴.现在我们来看刚上课时让大家计算的那个题:12×(3.87-2.21)×152+1.35 想一想,该如何利用计算器计算呢?[生]老师,我按键的顺序和式子书写的顺序完全一样,得出结果为190.46293,对吗?[师]大家讨论讨论:他的结果正确吗?[生]正确.[师]能说说为什么吗?[生]在进行混合运算时,输入时不必考虑运算顺序,计算器依照程序会按运算顺序进行运算的,所以这个题的按键顺序是:这时计算器显示结果为190.46293,所以:12×(3.87-2.21)×152+1.35=190.46293. [师]对,在使用计算器时应注意以下几点:(1)计算器要平稳放置,以避免按键时发生晃动和滑动.(2)由于计算器键盘小,键钮排列紧密,一般应该用食指按键.因使用计算器时往往还要进行书写,最好用左手按键.按键时,用力要均匀,直至键钮接触到底部为止.不能敲击,也不能用钢笔等硬物按键.(3)计算开始时,按开启键,停止使用时,要注意按关闭键,以节省用电.(4)按下数字键后,应立即看看显示器上的显示是否正确;按下运算键等指令键后,要注意显示的数是否有一下闪动,如无闪动,说明可能键未按到底.(5)每次运算前,要按一下清零键.好,注意事项应清楚,接下来我们做一练习进一步熟悉计算器的用法.1.用计算器求下列各式的值.(1)(-345)+421 (2)12.236÷(-2.3)(3)135 (4)-1553(5)(3.2-4.5)×32-25答案:(1)76;(2)-5.32;(3)371293;(4)-3723875;(5)-12.1[师]同学们做得不错,说明大家已掌握了计算器的用法.(三)课时小结这节课主要讲了计算器的使用方法,并且会用计算器,进行有理数的加、减、乘、除、乘方及其混合运算,计算器是一个先进的计算工具,特别是用它处理复杂计算要比笔算、表算省事得多,但在做各科作业时对计算器的使用不能过于随意,要听从老师的建议.。
摘要本次课程设计的任务是设计一个具有加减运算功能的简易计算器,并通过合适的方式来显示最后的计算结果。
此次设计电路的完成主要是利用简单的数字电路和电路逻辑运算来进行的。
简易加减计算器电路主要是对数据的输入与显示,数据的加减运算,数据的输出与显示三个主要的方面来设计研究完成的。
在输入电路的部分,我们通过开关的闭合与断开来实现数据的输入,开关闭合接入高电平“1”,断开接入低电平“0”。
而输入的数据将通过显示译码管以十进制的形式显示出来。
由于输入二进制的位数较多,我们采用个位十位分别输入的方式来简化电路。
加减运算电路则主要通过加法器来实现的。
设计电路时,我们将个位和个位、十位和十位分别接入一片加法器。
在进行加法运算时我们所选择的加法器是完全符合要求的,但是在进行减法运算时加法器就不能满足我们的设计要求了。
因此我们将减法转换为加法进行运算,运算时采用补码的形式。
在进行减法时通过异或门将减数的原码全部转换为补码,输入加法器中进行相加。
最后将进位信号加到十位的运算电路上就实现了加减法的运算电路。
在显示电路中,由加法器输出的数据是二进制码。
这些码可能表示超过十的数字,所以显示译码管就不能正确的显示出数字了。
此时要将二进制转化成BCD码,再将BCD 码送到显示译码管中就可以将计算所得的数字显示出来了。
概述1.1设计题目:简易加减计算器1.2设计任务和要求:1)用于两位以下十进制数的加减运算。
2)以合适的方式显示输入数据及计算结果。
1.3设计方案比较:方案一:输入十进制的数字,再通过编码器对十进制的数字进行编码,输出二进制的数据。
运用显示译码器对输入的数字以十进制的形式进行显示。
在进行加减计算的时候将二进制数字运用数模转换,然后再进行相加减。
然后将这些模拟信号再次转换成数字信号转换成数字信号,再将数字信号输入到显示译码管中来显示数剧。
这个方案中要进行数模转换和模数转换所需要的电路器件有些复杂,并且转换的时候需要很长的时间,而且转换以后数值的精度不高。
2023年计算机二级《Python语言程序设计》考试全真模拟易错、难点汇编叁(带答案)(图片大小可自由调整)一.全考点综合测验(共45题)1.【单选题】以下程序的输出结果是:def hub(ss, x = 2.0,y = 4.0):ss += x * yss = 10print(ss, hub(ss, 3))A.22.0 NoneB.10 NoneC.22 NoneD.10.0 22.0正确答案:B2.【问答题】请简述Python 中类方法、实例方法、静态方法各自的区别?并简述它们各自的用途。
正确答案:实例方法只能用实例对象来调用,不能用类对象来调用实例方法。
类方法:类方法是类对象所拥有的方法,类方法的第一个参数必须是类对象,可以通过实例对象和类对象去访问类方法,类方法可以对类属性进行修改。
实例方法:实例方法是类中最常定义的成员方法,它至少有一个参数并且必须以实例对象作为其第一个参数,在类外实例方法只能通过实例对象去调用,不能通过其他方式去调用。
静态方法:静态方法需要通过修饰器“@staticmethod ”来进行修饰,静态方法不需要多定义参数。
静态方法中不需要额外定义参数,因此如果在静态方法中引用类属性,则必须通过类对象来引用。
3.【单选题】以下程序输出到文件text.csv 里的结果是:fo = open("text.csv",'w')x = [90,87,93]z = []for y in x:z.append(str(y))fo.write(",".join(z))fo.close()A.[90,87,93]B.90,87,93C.‘[90,87,93] ’D.‘90,87,93 ’正确答案:B4.【单选题】以下程序的输出结果是:ss = list(set("jzzszyj"))ss.sort()print(ss)A.['z', 'j', 's', 'y']B. ['j', 's', 'y', 'z']C. ['j', 'z', 'z', 's', 'z', 'y', 'j']D.['j', 'j', 's', 'y', 'z', 'z', 'z']正确答案:B5.【单选题】以下程序的输出结果是:s = 0def fun(num):try:s += numreturn sexcept:return 0return 5print(fun(2))A.0B. 2C.UnboundLocalErrorD. 5正确答案:A6.【单选题】以下关于文件的描述,错误的是:A.二进制文件和文本文件的操作步骤都是“打开-操作-关闭”B. open() 打开文件之后,文件的内容并没有在内存中C.open() 只能打开一个已经存在的文件D.文件读写之后,要调用close() 才能确保文件被保存在磁盘中了正确答案:C7.【单选题】用Pyinstall 工具把Python 源文件打包成一个独立的可执行文件,使用的参数是:A.-DB. -LC.-iD.-F正确答案:D8.【单选题】str ="Python 语言程序设计",表达式str.isnumeric() 的结果是:A.TrueB. 1C.0D.False正确答案:D9.【单选题】在E-R 图中,哪个选项是用来表示联系的图形A.矩形B.椭圆形C.三角形D.菱形正确答案:D10.【单选题】Python 语言中,以下表达式输出结果为11 的选项是:A.print("1+1")B. print(1+1)C. print(eval("1+1"))D.print(eval("1" + "1"))正确答案:D11.【问答题】在Python 中如何实现栈和队列?请举例说明。
No:毕业设计说明书题目:基于51单片机简易计算器的设计系别:自动化工程系专业:机电一体化技术*名:***学号: ************指导老师:***职称:副教授2013年6月简易计算器是一种非常广泛日常工具,对现代社会越来越流行。
它可以进行一些简易的计算。
本系统提供详细的时、分、秒、年、月、日的时间信息,同时还可进行简易的计算信息,还具有时间校准等功能。
该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
本系统硬件部分由AT89S52单片机、LCD1602液晶屏、键盘、指示灯系统等部分构成。
软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、简易计算显示等。
关键字:AT89S52;液晶屏LCD1602;键盘Simple calculator is a very broad everyday tool for modern society is more and more popular. It can carry on some simple calculation. This system provides detailed, minutes and seconds, year, month, day time information, and at the same time but also for simple calculation information, but also has time calibration etc. Function. This circuit AT89S52 SCM as the core, power consumption is small, can be in 3 V of low-pressure work, voltage can choose 3 ~ 5 V voltage power supply. This system hardware part AT89S52 SCM by LCD1602 LCD screen, keyboard, indicator system, part. Software in under the environment of keil with C51 language, including time set, time display, simple calculation shows, etc. In the programming process found on existing knowledge to finish writing task difficult, the teachers and students of help to finish the program part of the code.Keyword:AT89S52;AT89S52 devices; LCD1602 LCD screen; keyboard引言众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
电子学会python一级官方模拟试题图文程序填空阅读填空程序试题一、程序填空1.程序设计:唐三藏又被妖怪抓走了,这次孙悟空还是没打得过妖怪,于是来求观音菩萨。
观音菩萨告诉孙悟空,在天庭里身高正好为1000米的那位神仙可以降伏此妖。
于是悟空立刻来到天上,在玉皇大帝的神仙册上看到了按身高从矮到高排列有10000个神仙。
由于时间紧迫,悟空想用最短的时间找到这位神仙,这样才可以尽快解救唐僧。
代码如下:List=list(map(int,input(“请按身高递增顺序依次输入10000个神仙的身高”).sp lit()))left=1right=10000while ①mid=②if List[mid]==1000:③elif List[mid]<1000:④else:⑤print(“能帮孙悟空的神仙在第{0}位上”.format(mid+l))(1)程序代码中①处正确的代码是(_______)。
A.left<right B.left<=right C.left!=right D.left>right(2)程序代码中②处正确的代码是(_______)。
A.(left+right)/2 B.(left+right)\2C.(left+right)//2 D.(left+right)\\2(3)程序代码中③处正确的代码是(_______)。
A.pass B.print(mid)z C.break D.continue(4)程序代码中④处正确的代码是(_______)。
-A.left=mid B.right=mid C.left=mid+1 D.right=mid-1(5)程序代码中⑤处正确的代码是(_______)。
A.left=mid B.right=mid C.left=mid+1 D.right=mid-12.请在空格处填写正确的代码,使程序完善。
实现功能:绘制y=x2-2x+ 1的图像#加载numpy模块并限简洁的别名为npimport numpy as np#加载matplotlib.pyplot模块并限简洁的别名为pltimport matplotlib.pyplot as plt#x在-7到9之间,每隔0.1取一个点x=np.arange(-7,9,0.1)_____ = x**2-2*x+1plt.plot(x,________)plt.title('y=x*x-2*x+1')plt.xlabel('x')plt.ylabel('y')plt._________3.阅读程序。
*******************实践教学*******************兰州理工大学计算机与通信学院2010年秋季学期面向对象课程设计题目:迷你计算器设计专业班级:姓名:学号:指导教师:成绩:_____________________目录摘要........................................... 3前言........................................... 4正文........................................... 51.采用类C语言定义相关的数据类型 .......................................... 52.各模块的伪码算.............................53.函数的调用关系图............................................................................. 84.调试分析................................................................................................. 85.测试结果................................................................................................. 86.源程序(带注释)............................................................................. 9系统测试...................................... (17)总结 (19)参考文献 (20)致谢 (21)摘要本课程设计将实现一个简单计算器,其类似于Windows附件中自带的计算器,这个计算器实现了简单的四则运算功能。
试题NCT-Python编程三级-模拟卷5(含答案word程序填空阅读填空程序试题一、程序填空1.小敏有10万元本金,想要购买银行保证收益型理财产品。
每年到期后连本带利仍购买此种理财。
请你帮助小敏分析,在年收益率不变的情况下,多少年后小敏的累计收益能超过本金,请完成程序填空。
(例如输人:5.15%,输出:14年后收益超过本金。
)1 s=input("请输入年利率:")2 rate=float(s[:-1])*0.013 money=1000004 year=05 while money<=200000:6 money=round(),2)7 year=year+18 print(year,"年后收益超过本金。
”)(1)程序第6行下划线处应填入___________。
(2)程序第2行的作用是____________,并赋值给变量 rate。
(3)该程序主要是通过while实现____________结构。
2.请在空格处填写正确的代码,使程序完善。
实现功能:用辗转相除法求解两个正整数的最大公约数。
x = int(input('请输入第一个正整数:'))y = int(input('请输入第二个正整数:'))m = max(x,y) #找出x,y中的最大值n = min(x,y) #找出x,y中的最小值r = m%n #求得最大值除以最小值后的余数while r!=0: #如果余数不等0,则进行以下循环m =________ #把最小值赋给mn =_________ #把余数赋给nr = m%n #求得最大值除以最小值后的余数print('这两个数的最大公约数为:',______)input("运行完毕,请按任意键退出....")3.阅读程序。
阅读求水仙花数的代码并回答问题。
“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
中南大学数学院的一份模拟计算器程序
一、实验目的、内容
设计一个程序来模拟一个简单的手持计算器。
程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。
二、实验程序设计及结构
定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。
该计算器的基本思路是把字符串转化为数字和运算符,然后把数字和运算符分别压入两个栈,number 和symbolt
Calculator类包含以下函数
void cal(string s);是主要的计算函数
void express();用以输出结果,弹出栈顶
int legal(string w);判断运算符是否合法
void calculator::push();该函数的作用是记录此运算符,相当于压栈
void calculator::pop()/;在已进行优先级判断的情况下进行合法运算,该函数作用之后两个栈内的字符变少了,表面上是p减小了
int calculator::StringToNumber(string aStr)把字符串转化为数字,这个函数应该是可以优化的,记得有一个专用的字符与数字转化的函数。
void calculator::cal(string w);主要的计算引擎,由一个大循环内套三个小循环组成,第一个循环的作用是依次读出字符串中的字符,第二个循环压入数字,把字符改为数字第三个循环是主要计算的,其中加入了对括号优先计算的判断。
三、设计过程
加入了对运算符是否合法的判断,加深了对类的理解。
四、设计的特点和结果
运行结果如下
参考文献
附录
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class calculator
{
public:
void cal(string s);
void express();
int legal(string w);
private:
void push();
void pop();
bool can();
int StringToNumber(string aStr);
int number[1000];
char symbolt[1000];
string s,t;
int i,j,p;
};
void calculator::push()
{
p++;
symbolt[p]=s[i];
}
void calculator::pop()
{
p--;
switch (symbolt[p+1])
{
case'+':{number[p]+=number[p+1];break;}
case'-':{number[p]=number[p]-number[p+1];break;} case'*':{number[p]=number[p]*number[p+1];break;} case'/':{number[p]=number[p]/number[p+1];break;} }
}
bool calculator::can()
{
if (((s[i]=='+')||(s[i]=='-'))&&(symbolt[p]!='(')) return true;
if (((s[i]=='*')||(s[i]=='/'))&&((symbolt[p]=='*')||(symbolt[p]=='/'))) return true;
return false;
}
int calculator::StringToNumber(string aStr)
{
int number = 0;
for (int i=0;i<aStr.length();i++)
{
number = number*10 + aStr[i]-48;
}
return number;
}
void calculator::cal(string w)
{
s='('+w+')';
i=0;
p=0;
while (i<=s.length()-1)
{
while (s[i]=='(')
{
push();
i++;
}
j=i;
do
{
i++;
}
while ((s[i]>='0')&&(s[i]<='9'));
int m;
t="";
int h=0;
for(m=j;m<i;m++) t=t+s[m];
number[p] = StringToNumber(t);
do
{
if (s[i]==')')
{
while (symbolt[p]!='(') pop();
p--;
number[p]=number[p+1];
}
else
{
while (can()) pop();
push();
}
i++;
}
while ((i<=s.length())&&(s[i-1]==')'));
}
}
void calculator::express()
{
cout<<number[0]<<endl;
}
int calculator::legal(string w)
{
int k=0;
for(i=0;i<w.length();i++)
{
if(!(w[i]=='+'||w[i]=='-'||w[i]=='*'||w[i]=='/'||w[i]=='('||w[i]==')'||(w[i]>='0'&&w[i]< ='9')))
k++;
}
if(k)
cout<<"error:含有非法字符"<<endl;
return k;
}
int main(int argc, char* argv[])
{
while(1){
string w;
cout<<"input your string:";
cin>>w;
calculator MyCal;
if(!MyCal.legal(w))
{
MyCal.cal(w);
MyCal.express();
}
char chose;
cout<<"是否继续[Y/N]"<<endl;
cin>>chose;
if (chose=='n'||chose=='N')
break;
}
return 0;
}
教师评语及计分。