1、第三章 计算机软件,3.1 计算机软件概述 3.2 操作系统 3.3 程序设计语言及其处理系统 3.4 算法,3.3程序设计语言及其处理系统,3.3.1 程序设计语言的分类和成分 3.3.2 常见程序设计语言简介 3.3.3 程序设计语言处理系统,程序设计语言,计算机是无知无觉的机器,它能为我们工作就是因为我们让它执行程序 。 程序如同开会的议程、每周的课程表、音乐家的乐谱,都是事先规定好再执行 。 什么是程序设计语言? 语言的目的是用于通信 程序设计语言用于人与计算机之间的通信 程序设计语言是由人使用但计算机可以理解的一种语言 程序设计语言用于编制程序,表达需要计算机完成什么任务和怎样完成任
2、务,然后交给计算机去完成,2018年10月6日,程序设计语言填补了 人与计算机交流的鸿沟,2018年10月6日,程序设计语言的分类,按照程序设计语言的发展历程,我们把程序设计语言分为三类 :,2018年10月6日,机器语言(1),机器语言就是计算机的指令系统;由二进制 0、1 代码指令构成。 用机器语言编写的程序,可直接被计算机识别并立即执行。 由于不同的计算机具有不同的指令系统,因而在一种类型的计算机上编写的机器语言,在另一种类型的计算机上就不一定能运行。 机器语言程序难编写、难修改、难维护,需要用户直接对存储空间进行分配,编程效率极低。 机器语言只有计算机发明初期使用,目前,已经极少有人使
3、用这种语言编写程序。,2018年10月6日,机器语言(2),计算768+12288-1280的值,需要编写如下三行程序:101100000000000000000011 000001010000000000110000 001011010000000000000101,2018年10月6日,很难看明白,很难修改!,汇编语言 (1),汇编语言用助记符来代替机器指令的操作码和操作数 比机器语言效率高,但仍然不够直观。 汇编语言同样存在着难学难用、容易出错、维护困难等缺点 。 汇编语言的优点: 目标程序占用内存较少运行效率较高 能直接引用计算机的各种设备资源。 它通常用于编写系统的核心部分程序或编写
4、需要耗费大量运行时间和实时性要求较高的程序段。,2018年10月6日,汇编语言 (2),要计算56+71 的值,需要编写的程序如图:,2018年10月6日,将56传送到AX寄存器,将71传送到BX寄存器,将BX中的内容加AX中的内容,结果存在BX中,高级语言,高级语言是面向用户的、基本上独立于计算机种类和结构的语言。 其最大的优点是:形式上接近于算术语言和自然语言(主要是英语)。 高级语言易学易用,通用性强,应用广泛。 例如用高级语言计算56+71的值,只要编写程序“S=56+71”即可。 C、C+、Visual Basic、Java等都是目前较为常用的高级语言。,2018年10月6日,程序设
5、计语言的成分,高级程序设计语言的种类千差万别。但其基本成分都可归纳为四类。,2018年10月6日,程序设计语言的成分,数据成分,用于描述程序所处理的数据对象,如对数据类型和数据结构进行说明等。 运算成分,用于描述程序中的运算,包括运算符和表达式等。 传输成分,用于表达程序中数据的传输,包括输入和输出操作。如赋值语句、I/O语句等 控制成分,用于描述程序的流程控制。,2018年10月6日,控制成分,控制成分为程序设计语言提供一种基本框架,有了这个框架,程序才可能完成各种各样的任务。,2018年10月6日,程序的三类控制结构,3.3.2常见程序设计语言简介,世界上的程序设计语言已有上千种之多,下面
6、介绍几种得到了广泛应用的程序设计语言的主要特点,供大家了解。,2018年10月6日,1、VB语言,VB是Visual Basic的简称。其中,Visual意为“可视化”,指的是一种开发图形用户界面GUI的方法。Basic是“初学者符号指令代码”的缩写。 VB是由微软公司于1991年开发的一种可视化的、面向对象的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大,是初学编程者首选的理想语言。VB是目前国内高校里开设最广泛的程序设计语言之一。,2018年10月6日,2、C语言、C+和C#,C语言是1972年至1973年间由美国电话电报公司(AT
7、&T)贝尔实验室设计的。 C语言是当代最优秀的程序设计语言之一。 C语言兼有高级程序设计语言的优点和汇编语言的效率,有效地处理了简洁性和实用性、可移植性和高效性之间的矛盾。 C+语言是以C语言为基础发展起来的面向对象程序设计语言。C+语言是对C语言的扩充,运行性能高,因而它非常流行,一直是面向对象程序设计的主流语言。 C#(发音为C Sharp)是微软公司为.NET Framework量身订做的程序语言,C#拥有C/C+的强大功能以及Visual Basic简易使用的特性,且与Java较为相似。,2018年10月6日,3、Java语言,Java语言是由Sun Microsystems公司于19
8、95年推出的一种编程语言,已经成为被广泛应用的网络环境编程语言。 Java语言被美国著名杂志PC Magazine评为1995年十大优秀科技产品。 比尔盖茨不无感慨地说:“Java语言是长时间以来最卓越的程序设计语言”。 现在JAVA的应用领域比较广泛,主要应用领域有:行业和企业信息化、电子政务及办公自动化、嵌入式设备及消费类电子产品和辅助教学等。,2018年10月6日,4、FORTRAN语言,FORTRAN是FORmula TRANslator的缩写,译为“公式翻译器”, 它是一种主要用于数值计算的面向过程的程序设计语言,广泛应用于科学和工程计算领域。 FORTRAN语言是进行大型科学和工程
9、计算的有力工具,它在巨型机上还广为使用。 FORTRAN语言目前最新的版本是FORTRAN 2008。Fortran语言是一种极具发展潜力的语言,在全球范围内流行过程中,在工程计算领域仍然占有重要地位。,2018年10月6日,5、MATLAB语言,MATLAB是Matrix Laboratory(矩阵实验室)的缩写,是美国MathWorks公司出品的,面向向量和矩阵运算的提供可视化等功能的数值计算语言。 在工业界和学术界很流行 MATLAB语言主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。,2018年10月6日,MATLAB绘制的一个三维图形,其他
10、编程语言语言,用于人工智能领域的LISP语言、PROLOG语言 用于飞行器控制软件中的Ada语言等 如果有兴趣,考过一级考试后,可以选择一门编程语言进行学习,参加计算机二级考试,提高自己的计算机水平。,2018年10月6日,3.3.3程序设计语言处理系统,机器语言是用二进制代码编写的,可以直接被计算机识别并执行。而其他语言引入了助记符等符号,计算机是没有办法直接执行的。于是,就需要对这些语言进行适当的转换才可以,这个工作就是由程序设计语言处理系统来完成的。 程序设计语言处理系统(如C语言编译器等)是一种系统软件,它通常包含翻译程序、连接程序和装入程序等。,2018年10月6日,翻译程序是把甲语
11、言编写的程序翻译为等价的乙语言编写的程序。 其中甲语言编写的程序称为源程序,乙语言编写的程序称为目标程序。按照不同的翻译处理方法,翻译程序可分为三类:汇编程序、解释程序和编译程序。,2018年10月6日,1、汇编程序,汇编程序是把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序输出的是用机器语言表示的目标程序。,2018年10月6日,2、解释程序,解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。 由
12、于解释程序的方便性和交互性较好,早期一些高级语言采用这种方式,如BASIC、dBASE。但它的弱点是运行效率低,程序的运行依赖于开发环境,不能直接在操作系统下运行。,2018年10月6日,3、编译程序,编译程序对源程序进行翻译的方法相当于“笔译”,是把用高级程序设计语言书写的源程序,翻译成等价的汇编语言或机器语言的目标程序的翻译程序。 编译程序广泛地用于翻译规模较大、复杂性较高,且需要高效运行的高级语言(如C语言、Java等)书写的源程序。经过翻译程序的处理后,连接程序将多个翻译过的目标程序和库文件进行组合;装入程序将目标程序装入内存并启动执行 。,2018年10月6日,3.4 算法,3.4.
13、1 算法的概念 3.4.2 算法的描述 3.4.3 算法设计举例 3.4.4 算法的分析,程序 = 算法+数据结构,3.4.1 算法的概念,在日常生活中,人们所做的任何事情,都有一定的方法和步骤: 上楼可以走楼梯或者坐电梯; 出行可以选择骑自行车、坐公交车或者打车等; 评定奖学金,需要先收集每个同学相应课程的成绩,然后按照学分加权求和,最后根据成绩高低评定奖学金级别等。 计算机解决问题也有相应的方法和步骤,即算法 简单地说,算法就是解决问题的方法和步骤。,2018年10月6日,例1 交换两杯墨水,问题:有两个杯子A和B,分别装满了红墨水和蓝墨水。现在要将两个杯子中的墨水交换过来,问如何实现?,
14、2018年10月6日,A,B,C,请思考?,其交换步骤如下: 将杯子A中的红墨水装入杯子C中; 将杯子B中的蓝墨水装入杯子A中; 将杯子C中的红墨水装入杯子B中。,例2 求和,问题:用计算机求1到100之间的自然数的和,如何实现? 我们用变量Sum来存储要求的和,可以设计如下过程: 令Sum的初值为0; 读取一个需要累加的数据; 将该数据累加到Sum中; 重复步骤和,直到把1100之间的所有数都累加到Sum中; 输出累加结果Sum。,2018年10月6日,反复进行加运算,算法的特征,1、能行性,算法中的每一步操作都必须是能实现的,即在计算机的能力范围之内。 如在算法中不允许出现分母为0的情况,
15、在实数范围内不能求一个负数的平方根等。 2、有穷性,一个算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。 3、确定性,算法中的每一步必须有确切的含义,不允许有模棱两可的解释和多义性。 4、输出,一个算法有一个或多个(=1)输出,以反映对输入数据加工后的结果,没有输出的算法是毫无意义的。 另外,一个算法还应该有零个或多个输入,以描述运算对象的初始情况。,2018年10月6日,3.4.2算法的描述,描述算法有多种不同的工具。采用不同的算法描述工具,对算法描述的质量有很大的影响,常见的算法描述工具有:,2018年10月6日,1、自然语言,前面交换两杯墨水和求和都是使用自然语言对算
16、法进行的描述。用自然语言描述算法通俗易懂,使用简单,人们可以根据自己的思路快速地将算法描述出来。但使用自然语言描述算法,尤其是比较复杂的算法时,一般会比较冗长,并且容易出现歧义,而且也不便于翻译成计算机程序设计语言。这种方法一般不作为正式的算法描述方式。,2018年10月6日,2、流程图(1),流程图风行于20世纪五六十年代,它采用几何图形来描述问题,是一种图形表示方法。流程图简明直观、便于交流,至今仍在使用。 流程图常用的符号包括: 起止框表示算法的起始或终止; 输入输出框表示输入数据或输出计算结果,框内应填写需要输入或输出的量; 处理框表示执行计算表达式和赋值操作,框内用文字或符号表明具体
17、实现的操作; 判断框根据条件判断算法继续执行的走向,框内应填上条件; 流程线表示算法中某操作的流向。,2018年10月6日,2、流程图(2),求和的算法用流程图描述,如右图在流程图中可以清晰地看出程序的整体结构和数据流向。使用流程图描述算法,让人感到流程的描述清晰简洁,容易表达分支结构。它不依赖于任何具体的计算机和计算机程序设计语言,从而有利于不同环境的程序设计。,2018年10月6日,3、伪代码,伪代码是用介于自然语言和程序设计语言之间的文字和符号来描述算法的工具。 它书写方便,格式紧凑,易于理解,便于向计算机程序设计语言(即通常所说的程序)过渡。 伪代码描述算法不需要让计算机接收,又吸取了
18、编程语言代码表达精练的特点,容易转换为程序设计语言。,2018年10月6日,算法:辗转相除法求最大公约数 BEGINinput m,n; /*输入正整数m和n*/do rm mod n;m n; n r; while r0;print m; /*输出最大公约数*/ END,3.4.3算法设计举例,使用计算机求解问题通常包括如下几个步骤: (1)理解和确定问题; (2)寻找解决问题的方法和规则,并表示成算法; (3)编程,即使用程序设计语言描述算法; (4)运行程序,获得问题的解答; (5)对算法进行评估。,2018年10月6日,算法设计,算法的设计一般采用由粗到细、由抽象到具体的逐步求精的方法
19、。,求最值,问题:给定n个数,如何求出这组数中的最大值。 粗略思路如下: 先假定这组数中某个数为最大值; 从剩下的数中选一个数与最大值比较,如果该数更大,则把更大的数作为最大值; 循环执行,直到把所有的数都与最大值比较完成。 这时,所得到的最大值即为这组数的最大值。,2018年10月6日,求最值,举例:以5、7、2、9、4这组数为例,我们利用上述算法来求最大值,具体步骤如下: 步骤一,令M=5; 步骤二,比较M和7,由于7大,故M=7; 步骤三,比较M和2,由于M大,故M的值不变; 步骤四,比较M和9,由于9大,故M=9; 步骤五,比较M和4,由于M大,故M的值不变; 步骤六,经过上述运算,M
20、的值最终为9。,2018年10月6日,3.4.4算法的分析,正如上楼可以选择走楼梯,也可以选择坐电梯,用计算机解决同一问题也会有不同的算法,而一个算法的质量优劣将影响到算法乃至程序的效率。 算法分析的目的在于选择合适的算法和改进算法。一个算法的分析主要从算法的正确性、简单性、时间复杂度和空间复杂度几个方面来考虑。,2018年10月6日,算法的正确性和简单性,算法的正确性是指给定有效输入后,经过有限时间的计算,产生正确的输出结果。 算法的简单性是指算法是否容易理解,是否容易验证其正确性,程序是否容易调试。 当然,简单的算法效率不一定高,要在保证一定效率的前提下力求算法简单。,2018年10月6日
21、,时间和空间复杂度,时间复杂度是指执行算法所需要的计算工作量,可以简单地理解成算法的执行时间。 考虑到计算机的性能、编程语言等的差异,同一个算法的执行时间也不是确定的。所以我们定义一种特别的“运行工作量”,这个值只依赖于问题的规模。 空间复杂度定义为该算法所耗费的存储空间,它也是问题规模的函数。 一个算法在计算机存储器上所占用的存储空间包括: 存储算法本身所占用的存储空间 算法的输入输出数据所占用的存储空间 算法在运行过程中临时占用的存储空间,2018年10月6日,随堂练习,一、选择题 1.高级语言程序中的算术表达式(如XYZ),属于高级程序语言中的_成分。A数据 B运算 C控制 D传输 2.
22、 算法是问题求解规则的一种过程描述。下列关于算法性质的叙述中,正确的是_。 A算法一定要用高级语言描述 B可采用类似自然语言的“伪代码”或流程图来描述算法 C条件选择结构由条件和选择的两种操作组成,因此算法 中允许有二义性 D算法要求在若干或无限步骤内得到所求问题的解答,2018年10月6日,B,B,3. 一般认为,计算机算法的基本性质有_。A确定性、有穷性、能行性、产生输出 B可移植、可扩充、能行性、产生输出C确定性、稳定性、能行性、产生输出 D确定性、有穷性、稳定性、产生输出 二、填空题 1. 程序设计语言可分为三类,即机器语言、_和高级语言。 2. 程序不需要语言处理,可直接被计算机识别并立即执行。 3. C+语言运行性能高,与C语言兼容,已成为当前主流的 程序设计语言之一。,2018年10月6日,A,汇编语言,机器语言,面向对象,