java中计算器的代码编译代码

说明为什么程序的代码只能经过编译器编译后才能直接运行在计算机上
说明为什么程序的代码只能经过编译器编译后才能直接运行在计算机上
09-12-05 &匿名提问
程序    从最一般的意义来说,程序是对解决某个计算问题的方法(算法)步骤的一种描述;而从计算机来说,计算机程序是用某种计算机能理解并执行的计算机语言作为描述语言,对解决问题的方法步骤的描述。计算机执行按程序所描述的方法步骤,能完成指定的功能。所以,程序就是供计算机执行后能完成特定功能的指令序列。    一个计算机程序主要描述两部分内容:描述问题的每个对象和对象之间的关系,以及描述对这些对象作处理的处理规则。其中关于对象及对象之间的关系是数据结构的内容,而处理规则是求解的算法。针对问题所涉及的对象和要完成的处理,设计合理的数据结构常可有效地简化算法,数据结构和算法是程序最主要的两个方面。2.程序设计的任条和主要步骤    程序设计的任务就是分析解决问题的方法步骤(算法),并将解决问题算法的方法步骤用计算机语言记录下来。程序设计的主要步骤包括:认识问题、设计解决问题的算法、按算法编写程序、调试和测试程序。在程序开发过程中,上述步骤可能有反复,如发现程序有错,严重情况可能会要求重新认识问题和重新设计算法等。3.机器语言和汇编语言    计算机能直接识别和执行的二进制代码称为计算机的机器语言。用有助于记忆的符号来代表二进制代码,称为汇编语言。汇编语言与机器语言几乎有一对一的关系。用汇编语言编写的程序称为“汇编源程序”,汇编源程序不能在计算机上直接执行,需要用汇编程序将汇编源程序翻译成机器语言程序,然后执行由汇编程序翻译出来的机器语言程序。机器语言和汇编语言是与具体计算机紧密相关的,称它们是面向机器的语言。  4.高级语言    与机器语言和汇编语言相比较,高级语言与具体计算机无关,是一种能方便描述算法过程的计算机程序设计语言。高级语言种类千差万别,但一般包含有以下四种成分:数据成分用来描述程序所涉及的数据;运算成分用来描述运算;控制成分用来表达程序的控制构造;传输成分用来表达数据的传输。由于高级语言程序主要是描述计算机的解题过程,即描述复杂的加工处理过程,所以也称这种高级语言为面向过程语言。   用高级语言编写的程序称为“源程序”。计算机不能直接技源程序的语句运行,通常有解释方式和编译方式两种方法在计算机上执行源程序。    解释方式,即让计算机运行解释程序,解释程序逐句取出源程序中的语句,对它作解释执行,输入数据,产生结果。  编译方式,即先运行编译程序,从源程序一次翻译产生计算机可直接执行的二进制程序(称为目标程序);然后让计算机执行目标程序,输入数据,产生结果。    解释方式的主要优点是计算机与人的交互性好,调试程序时,能一边执行一边直接改错,能较快得到一个正确的程序。缺点是逐句解释执行,运行速度慢。    编译方式的主要优点是计算机运行目标程序快,缺点是修改源程序后必须重新编译以产生新的目标程序。    现在也有将上述两种方式结合起来的,即先编译源程序,产生计算机还是不能直接执行的中间代码,然后让解释程序解释执行中间代码。这样做的好处首先是比直接解释执行快;更大的好处是中间代码独立于计算机,只要有相应的解释程序,就可在任何计算机上运行。5.面向问题语言    面向问题语言是为了易于描述和求解某类特定领域的问题而专门设计的一种非过程语言。用面向问题语言解题时,不仅摆脱计算机的内部逻辑,也不必关心问题的求解算法和求解的过程,只需指出问题是做什么,数据的输入和输出形式,就能由相应的计算机系统得到所需结果。如报表语言、SOL(Structured Query Language)语言等。SQL语言是数据库查询和操纵语言,能直接使用数据库管理系统。由于使用面向问题语言来解题只要告诉计算机做什么,不必告诉计算机如何做,能方便用户的使用和提高程序的开发速度。但实现面向问题语言的系统从最一般的意义下实现问题如何求解,通常实现的效率较低。另外,面向问题语言要求问题已有通用的求解方法,目前其应用范围还比较狭窄。
请登录后再发表评论!
你说的是编译型语言的代码。代码是人写的,人能看懂,而机器不会明白。编译器将代码转换成二进制的数据,机器才会明白。只能先这样说了,其中有许多细节问题。
请登录后再发表评论!Compile-the-calculator 这个C程序用来实现计算器功能。 主要用编译原理进行处理编写。 r program 器/解释器 238万源代码下载-
&文件名称: Compile-the-calculator
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 220 KB
&&上传时间:
&&下载次数: 1
&&提 供 者:
&详细说明:这个C程序用来实现计算器功能。程序主要用编译原理进行处理编写。-This C program used to implement the calculator function. The main principles of the program are processed by the compiler to write.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&编译计算器&&..........\Debug&&..........\.....\vc60.idb&&..........\.....\vc60.pdb&&..........\.....\编译计算器.exe&&..........\.....\编译计算器.ilk&&..........\.....\编译计算器.obj&&..........\.....\编译计算器.pch&&..........\.....\编译计算器.pdb&&..........\编译计算器.c&&..........\编译计算器.dsp&&..........\编译计算器.dsw&&..........\编译计算器.ncb&&..........\编译计算器.opt&&..........\编译计算器.plg
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - vc 插件源码,可以参考这个代码为自己的VC添加个性化的工具。
&[] - 蔚闹弊g器,取出input.txtY^的Y料,判噘Y料型後M行\算(you can define your own data type&input file)登录网易通行证
使用网易通行证(含网易邮箱)帐号登录
提交您的投诉或建议
视频画面花屏
视/音频不同步
播放不流畅
登录后才能查看我的笔记
暂时没有笔记!
确定删除笔记?
即将播放下一集,请您保存当前的笔记哦!
对字幕纠错要登录哦!
内容不能少于3个字
第一集:本节课,首先由在电话簿上查找Mike Smith的例子开始,通过直观的的授课方式给学生讲解了算法是什么,其次在说明算法与算法相比如何提向其优越性,运算效率是程序设计最根本的东西,而效率如何,最终还是取决于你所设计的算法。其次,通过几个简单的学生感兴趣的例子——拼图游戏再进一步告诉学生,什么是程序设计。最后,初步介绍了几种语言。在课程结束时,请了两位教学研究员Mather House 和Eliot House分别给大家讲话。
第二集:第0周周5课程,本节主要讲述了Gmail、FaceBook、ShuttleBoy等当前比较时新的技术话题,通过这些例子来探究隐藏在背后的技术,包括基本的算法、数据的存储的基本原理、磁盘(软盘、硬驱)的概念等基础知识,当然本节课还涉及到了计算机程序设计中的基本概念,包括循环、条件判断、分支等,对计算机学科进行简单的介绍。
C语言,源代码,编译器,目标代码,SSH,SFTP,GCC,函数,注释,标准输出,算术操作,优先级,局部变量,类型转换,标准输入,函数库,布尔表达式(接上次),条件(接上次),循环(接上次)
[第4课]C语言,源代码,编译器(2)
C语言,源代码,编译器,目标代码,SSH,SFTP,GCC,函数,注释,标准输出,算术操作,优先级,局部变量,类型转换,标准输入,函数库,布尔表达式(接上次),条件(接上次),循环(接上次)
函数,全局变量,参数,返回值
参数,返回值
线性搜索,二进制搜索
符号,递归,冒泡排序
第九集:归并排序,结构体,动态内存分配,堆和栈,指针,调试
第十集:CS50函数库,堆和栈(接上次),指针(接上次),文件输入输出,辩学,链表
本堂课程开头讲述“数独”游戏,开拓学生思维,并提醒大家将要到来的第一个小测验。接下来展示几幅图片,介绍计算机史上著名的bug。然后以一个小程序为例逐步展示gdb调试程序的方法,引入栈图,详细介绍栈的各个组成部分,并由此提出一个著名的攻击方法——“缓冲区溢出攻击法”,提醒大家要做边界检查。接下来讲结构体,并提醒大家GetString函数里面调用到malloc函数,因此,我们在主函数中要调用free函数释放相应的空间。最后介绍把输出打印到文件的方法。
首先讲了魂斗罗游戏,然后介绍了cs50.c和cs50.h两个文件的主要框架和内容,接着介绍了分配内存的规则,介绍了数组的优势和缺点。然后通过计算机存储的原理,引出链表的概念,重点介绍了链表的用法,包括链表节点的插入,删除操作。最后将了链表、堆栈和队列的区别
本节首先介绍了typedef的用法,接着简单介绍了安全文件传输协议SFTP,然后对之前的测验进行了点评,指出了一些常见的错误。通过回顾数组和链表,介绍了另外两种数据结构:堆和队列,并指出了在使用指针和内存时常犯的一些错误,介绍了一种用于内存检查的工具Valgrind。通过大小写字母转换的例子介绍了按位与和按位或操作符。
本次课程开头就结业项目,给出了几点建议。以预约课程的网站为例,阐述用户体验的重要性。然后复习二位操作符。通过两个相似的程序,对比数组和指针的使用方法。接下来讲述栈、队列的具体实现。然后介绍哈希表和几种哈希函数;以“生日悖论”为例,引入“冲突”的概念;循序渐进,介绍几种解决“冲突”的方法。最后提出“树”的概念,重点讲了两种树:“二叉排序树”和“单词查找树”。
首先说明了课程设计的要求,这节课主要讲网络编程,tcp/ip协议和网络连接的原理和域名服务器知识,然后引入了HTML语言。粗略的介绍了PHP语言和Javascript语言。然后介绍了动态处理图像的知识。接下来主要介绍如何用HTML编写网页。包括如何嵌入标题、正文、图像;如何调它的格式(居中、字体等)。
这节课主要通过实际的语言讲网络编程,首先提及到网络安全问题,介绍了一个窃取通讯信息的工具。然后提出了一些提高安全性的方案,包括cookie的概念,一些加密技术。
接着讲了深入讲了HTML语言和PHP语言,哈希表,如何实现动态网络编程。如何在网页中增加菜单,选择框等。
本次课程开头以电影“上班一条龙”吸引大家参加“cs50之夜”,然后简略提到研讨小组的课程。紧接着进入正题,以自己收到的垃圾邮件为例,讲述里面隐藏的骗局。然后以“cs50财政”和“雅虎财经”的股票问题,提到“屏幕抓取”,进而阐述“屏幕抓取的原理”以及需要用到的PHP语言,简单分析URL的成分,从网页源代码中提取需要的URL。紧接着上次课程,讲述register.php和froshims.php系列,回顾上次课程讲到的一些知识点,关联数组、超全局变量,以及PHP中GET与POST之间的区别。顺便提到,垃圾邮件中如何修改发件人地址。然后借助用例,详述MySQL数据库和SQL查询语言。
本次课程首先用一些图表博人眼球,引出JavaScript语言。然后教大家如何验证自己的php代码,简略提到几个网页开发工具。然后分别介绍网站经常出现的错误码,如404、401、403、404、500。接下来讲解PHP中的另一个超全局变量SESSION,进而提到“会话劫持”,简单回顾PHP中的SQL查询。通过几个网站的例子,让大家建立HTML5概念。然后讲解如何用PHP实现“拼写检查器”(之前用C语言实现过),通过几个例子,让大家温习了一遍PHP的相关知识点。接下来通过几个版本的forms.html例子,逐层递进,重点阐述JavaScript语言中的知识点,并引出DOM(文档对象模型)。
本次课程首先提醒大家,要开始做“结业项目”了,然后是几个讲师和助教上台,向大家推荐cs50的服装,并鼓励大家参与新学期讲师和助教的竞选。接下来,放了一部小电影——“网络勇士”,阐述互联网的工作原理。然后用一个视频游戏“CS50 Shuttle”吸引大家的眼球,并详细讲解了该游戏的制作过程,主要涉及到Google Earth API和Google Maps API,进一步加深大家对JavaScript的理解。
首先感谢了所有的助教和工作人员,接下来做了一个查找游戏。介绍了在CS50课程之后的一些相关课程的选择。然后展示了同学们做的比较好的一些作品并颁发奖品。大概回顾了这个学期学过的内容。介绍了CS50展览会的情况。最后举行了一个知识问答游戏、回顾了之前的一些知识问题。
学校:哈佛大学
讲师:David J. Malan
授课语言:英文
类型:计算机 国际名校公开课
课程简介:"CS50是哈佛的一门计算机科学的导论性的课程,内容包括基本的计算机知识以及基础算法,常见的编程语言等等,还会探讨最新的计算机科学领域的成果,课程发散性思维强。CS50课程的讲课形式让人耳目一新,真正做到了“快乐学习”。
扫描左侧二维码下载客户端具有编译功能支持无限大数计算器的实现 - Xiangism - 博客园
从一个无知角落里开始,蹒跚学步,一个未知到另一个未知,在跌跌撞撞中越走越快,越走越远,最后宇宙也为之开源。对于探索者来说,最后他们的思想总是变得和自己的足迹一样伟大。
posts - 52, comments - 200, trackbacks - 0, articles - 2
本篇是的第三篇,将在所实现的BigNumber基础上完成具有编译功能支持无限大数的计算器SuperCalculator。
要想从形如&"(1.23435+sin(0.5*180/PI))*" 字符串格式的表达式中求值,需要使用编译原理的知识,不过在一般的《数据结构》课程中都会讲解基础的表达式求值问题,而本篇也是在数据结构课程的基础上稍加拓展而实现。
多叉树的节点类型
node继承体系
表达式的值,一般将其转化成二叉树结构,根节点表示操作符,子节点表示操作符所使用到的分量。比如上面的表达式表示成二叉树如图所示:
如图所示,加乘除的操作数都是两个,而sin只需要一个操作数,所以其子节点只有一个。而如果要支持不限参数个数的函数,就必须有两个以上的节点,所以SuperCalculator中所使用的是多叉数。先看所有节点类型的根类型Node
Format表示此节点的字符串表示,如果是sin节点此值即为"sin",乘法节点此值即为"*"
Index 表示此节点的首字符在字符串表达式中的索引,主要是用在错误定位上。
MinParameterCount 因为现在操作符子节点的个数不定,所以要定义一个最小所需的操作个数,如果小于这个数后就是不合法的表达式
Nexts 此节点所有的子节点。这个类型是List&Node&就是用于存储不定个数的操作数。
Priority 表示节点在优先级,主要用在构建多叉树时,优先级越高的节点这个值越大。比如数字节点是6,函数节点是5,乘除是4,加减是2
Value 计算此节点时最后的值。
下面再看Node及其子类的继承体系。
直接从Node继承的类有三个:NumberNode(纯数字节点), ExpandNode(可拓展节点), CompartNode(间隔节点)其中CompartNode,表示括号之类节点,只在词法分析中用到,不会出现在树形中
ExpandNode的直接子类有三个:FunctionNode(函数节点),ConstantNode(常量节点), OperateNode(操作符节点)
FunctionNode 所有的函数节点都以此类为父节点,比如sin, max, exp等
ConstantNode PI, e等常量节点的父节点
OperateNode 加减乘除等节点的父节点
其中节点中所有的数字类型都是用BigNumber来表示。
用反射机制来查找所有可用的拓展节点
如下所示的代码,将项目中所有从ConstantNode,FunctionNode,OperateNode中继承而来的子类,先实例化后再存储到对应的List&T&中,这样在构建多叉树时用这些List&T&中的对象的Format进行字符串查找即可判断对应的类型。
internal static void Find(List&ConstantNode& constants, List&FunctionNode& functions, List&OperateNode& operates) {
Assembly ass = Assembly.GetExecutingAssembly();
Module[] modes = ass.GetModules();
foreach (Module m in modes) {
typs = m.GetTypes();
foreach (Type typ in typs) {
if (typ.IsSubclassOf(typeof(ConstantNode))) {
constants.Add(ass.CreateInstance(typ.FullName) as ConstantNode);
} else if (typ.IsSubclassOf(typeof(FunctionNode))) {
functions.Add(ass.CreateInstance(typ.FullName) as FunctionNode);
} else if (typ.IsSubclassOf(typeof(OperateNode))) {
operates.Add(ass.CreateInstance(typ.FullName) as OperateNode);
ReflectWord.FInd
使用反射机制后就非常方便添加新的函数或操作符了。比如现在项目中只实现了Max函数,如果要实现Min函数,只需要添加一个MinNode类,重写Format属性返回"min",重写Value属性求出List&Node&中的最小值即可。将这个类实现后,反射机制将自动添加min函数了。
语法分析、构建多叉树
Expression表达式类
Exression 用于接受一个字符串类型的表达式,并计算出值。其结构如图所示:
从图中可以看出词法分析在Lexcial类中,语法分析在Syntax.cs类中。其中Lexical.Analyse()函数负责将string value格式的字符串表达式转化成List&Node&格式的表示式。然后Syntax.Analyse(List&Node& nodes)负责将中序表达式转化成多叉树,最后只返回一个根节点Node
词法分析的过程,就是字符串的各种比较。
先过滤过空格回车,
是否为字母,那么就有可能是常量节点或者函数节点,就在之前用反射获取的节点List&Node&中查找是否有对应的字符串
是否为数字
是否为左右括号
是否为"," ,函数中的多个参数是用逗号进行分隔。
是否为操作符节点
具体细节见代码吧
从中序从构建多叉树的经典算法&数据结构&中都应该有讲到,即先将中序转化为后序或前序(本文转化成后序),然后再将后序转化成多叉树。Syntax.cs中有四个静态函数:
Node Analyse(List&Node& nodes); 对外接口,将中序的参数转化成多叉树,返回根节点。
Node CreateSyntaxTree(List&Node& nodes, int first, int end); //nodes全部的中序结构,[first,end]表示要将中序结构中的哪一部分转化成树形。
Node CreateSyntaxTree(List&Node& after) &// 这个方法的参数已经是后序形式,没有括号,函数的参数也合并到函数的子节点后,所以这里就是&数据结构&课程中最经典的,使用一个栈将后序转化成树。
List&Node& FindParameters(List&Node& nodes, int start, ref int end)&在函数的括号中,找到参数,这些参数用逗号分开,返回所以的参数。start指向左括号的位置,end返回函数的右括号。这个函数中可能会递归调用到CreateSyntaxTree(),因为参数也有可能是复杂的表示式。
下面详细介绍&CreateSyntaxTree(List&Node& nodes, int first, int end)&&
这个函数中遍历nodes,对每个节点先判断
是否为数字节点或常量节点,如果是则添加到后序列表中。
如果为左括号,则把左括号添加到栈
如果为右括号,则一直弹出栈中元素,直到遇到栈中的左括号
如果是函数节点,则使用下面的FindParameters函数将所有参数添加到这个节点的子节点中后,再将这个节点添加到后序
如果是操作符节点,先看栈中有先元素,如果没有元素直接把操作符放到栈中,如果有元素,则比较栈最后一个节点和此节点的优先级,如果栈中优先级高则弹出栈节点放到后序,并把此节点放入栈,否则将此节点放入栈。
上面这个过程也是数据结构中的经典算法。
得到正确的树型后,就只需要简单地调用Head.Value即可引爆多叉树的求值过程(四年前本人是使用属性,其实现在看来用函数更合理一些)。
最后提供程序的exe和全部源码。
SuperCalculator_exe&
SuperCalculator&
exe中在控制台直接输入想要计算的表达式,然后回车即可看到结果。
补充:sin,pow之类的函数因为精度的需要,所以在正常函数的基础上添加了一个表示精度的可选参数。
sin(PI) = 0.0032
sin(PI, 30) = 0.2643
pow(2.1, 2.1) = 4.
pow(2.1, 2.1, 30) = 4. 73基于编译原理的计算器设计与实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于编译原理的计算器设计与实现
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩9页未读,继续阅读
你可能喜欢

我要回帖

更多关于 java中计算器的代码 的文章

 

随机推荐