《大学计算机基础PPT第6章.pptx》由会员分享,可在线阅读,更多相关《大学计算机基础PPT第6章.pptx(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章第六章 程序设计基础程序设计基础计算机程序与程序设计程序设计语言 程序设计过程及方法 算法基础 主要内容计算机程序与程序设计计算机程序与程序设计计算机程序是指示计算机计算机程序是指示计算机如何去解决某个问题或完如何去解决某个问题或完成某项任务的一组指令。成某项任务的一组指令。【实例实例1 1】计算给定半径的圆面积计算给定半径的圆面积。其计算步骤可以如下编排:(1)说明在计算过程中要用到的常量和变量;(2)给定圆半径;(3)计算圆面积;(4)将结果输出到屏幕上。概概 念念#define PI 3.1415926 /*定义符号常量定义符号常量*/void main()/*定义主函数定义主函数
2、*/*开始开始*/float r,circle_area;/*定义变量定义变量r和和circle_area*/scanf(%f,&r);/*输入半径输入半径*/circle_area=PI*r*r;/*计算圆面积计算圆面积*/printf(circle_area=%f,circle_area);/*输出圆面积输出圆面积*/*结束结束*/用用C C语言编写的求圆面积的程序语言编写的求圆面积的程序计算机程序与程序设计计算机程序与程序设计#define PI 3.1415926 void main()float r,circle_area;scanf(%f,&r);circle_area=PI*r*
3、r;printf(circle_area=%f,circle_area);程序的组成程序的组成程序由两部分组成:说明部分和执行部分。说明部分说明部分说明部分说明部分主要包括程序名、参数(常量、变量)及其参数类型的说明;执行部分执行部分执行部分执行部分是程序的主体,完成具体的计算和处理任务。计算机程序与程序设计程序设计语言 程序设计过程及方法 算法基础 主要内容程序设计语言 低级语言低级语言高级语言高级语言常用程序常用程序设计语言设计语言编译与解释编译与解释高级程序设计高级程序设计语言的特征语言的特征低级语言低级语言机器语言和汇编语言属于低级语言,是面向机器的语言机器语言和汇编语言属于低级语言,
4、是面向机器的语言。操作码域操作码域 操作数域操作数域 机器语言机器语言机器语言被称为第一代程序设计语言。它是由二进制代码按照一定机器语言被称为第一代程序设计语言。它是由二进制代码按照一定规则组成、能被计算机直接识别和执行的指令集合。规则组成、能被计算机直接识别和执行的指令集合。每一条指令包括两部分:每一条指令包括两部分:操作码域操作码域操作码域操作码域中的数据表明要进行的操作;中的数据表明要进行的操作;操作数域操作数域操作数域操作数域中的数据为特定的中的数据为特定的操作提供具体的数据或数据存放在内存中的地址。操作提供具体的数据或数据存放在内存中的地址。低级语言低级语言【实例实例2 2】计算计算
5、A=15+10 A=15+10 的机器语言程序的机器语言程序10110000 00001111:把15放入累加器A中00101100 00001010:10与累加器A的值相加,结果仍放入A中11110100:结束,停机 机器语言机器语言低级语言低级语言机器语言机器语言缺 点需要记住大量用二进制表示的指令代码和代码的含义,难记忆、难理解、难修改、易错。用机器语言编写程序是很繁琐的一件工作,只适合专业人员使用;依赖于机器,可移植性差,是面向机器的语言。优 点可以直接被计算机所识别,不需要翻译,因此占用计算机存储空间少,执行速度快。低级语言低级语言汇编语言汇编语言【实例实例3 3】计算计算A=15+
6、10 A=15+10 的汇编语言程序的汇编语言程序MOV A,15:把15放入累加器A中ADD A,10 :10与累加器A中的值相加,结果仍然放在A中HLT :结束,停机汇编语言或符号语言被称为第二代程序设计语言。它是将机器语言符号化,即用英文助记符来代替机器语言中的指令和数据,比用机器语言编写的程序简单,容易理解和掌握。低级语言低级语言汇编语言汇编语言缺 点仍然是面向机器的,可维护性和可移植性差;要求编程者熟悉计算机的硬件结构及其原理,这对大量的非计算机专业人员是很难做到的。优 点克服了机器语言难读、难理解等缺点,保持了机器语言占用存储空间少,执行速度快的优点。常用于过程控制等编程。用汇编语
7、言编写的程序必须通过“汇编程序”的加工和翻译,才能生存能够被计算机识别和处理的二进制代码程序。高级语言高级语言 v高级语言被称为第三代程序设计语言,它与机器独立。高级语言被称为第三代程序设计语言,它与机器独立。v19541954年,世界上诞生了第一种高级语言,即用于科学计算年,世界上诞生了第一种高级语言,即用于科学计算的的FORTRANFORTRAN语言。语言。机器机器语言语言汇编汇编语言语言高级高级语言语言高级语言高级语言 高级语言是面向高级语言是面向用户的语言,它用户的语言,它与自然语言(英与自然语言(英语)很接近,更语)很接近,更像是人类语言。像是人类语言。它由语言本身规它由语言本身规定
8、的专用符号,定的专用符号,英文单词,语法英文单词,语法规则和语句结构规则和语句结构组成,屏蔽了机组成,屏蔽了机器的细节。器的细节。程序员可以不与程序员可以不与计算机硬件打交计算机硬件打交道,不必了解机道,不必了解机器的指令系统。器的指令系统。它是与机器无关它是与机器无关的语言,因此程的语言,因此程序的可移植较强。序的可移植较强。高级语言高级语言v它是传统的程序设计语言,其目的在于高效地实现各种算法,需要它是传统的程序设计语言,其目的在于高效地实现各种算法,需要详细描述详细描述“怎样做怎样做”。常见的面向过程语言有。常见的面向过程语言有FORTRANFORTRAN、BASICBASIC、C C、
9、PASCALPASCAL等。等。v用高级语言编程时的主要工作是围绕着设计解题过程来进行的,程用高级语言编程时的主要工作是围绕着设计解题过程来进行的,程序设计基本上还是从语句一级开始,需要详细描述解题的过程和细序设计基本上还是从语句一级开始,需要详细描述解题的过程和细节。编程时,程序不仅要说明做什么,还要告诉计算机如何做,程节。编程时,程序不仅要说明做什么,还要告诉计算机如何做,程序需要详细描述解题的过程和细节。序需要详细描述解题的过程和细节。面向过程的语言面向过程的语言高级语言高级语言v面向对象语言是面向对象语言是2020世纪世纪8080年代推出的。它能够更好地描述客观事物年代推出的。它能够更
10、好地描述客观事物及其相互联系,能够比较直接地反映客观世界的本来面目。及其相互联系,能够比较直接地反映客观世界的本来面目。v面向对象语言将客观事物看作具有属性和行为的对象,通过抽象找面向对象语言将客观事物看作具有属性和行为的对象,通过抽象找出同类对象的共同属性和行为,形成类。通过类的继承与多态可以出同类对象的共同属性和行为,形成类。通过类的继承与多态可以很方便地实现代码重用,从而大大提高了程序的复用能力和程序开很方便地实现代码重用,从而大大提高了程序的复用能力和程序开发效率。面向对象的语言有发效率。面向对象的语言有C+C+、JavaJava、Visual BasicVisual Basic等。等
11、。面向对象的程序设计语言面向对象的程序设计语言编译与解释编译与解释 v用高级语言编写的程序称为源程序,计算机不能直接识别和执行源程用高级语言编写的程序称为源程序,计算机不能直接识别和执行源程序。在执行源程序前需要通过翻译成机器语言形式的目标程序,这种序。在执行源程序前需要通过翻译成机器语言形式的目标程序,这种“翻译翻译”通常有两种方式,即编译方式和解释方式。通常有两种方式,即编译方式和解释方式。编译方式编译方式编译方式是用“编译程序”将源程序翻译成与之等价的用机器语言表示的目标程序。如果编译过程中发现程序有错,计算机系统会给出相应的提示,这时必须修改程序并重新编译,直到程序编译正确为止。当程序
12、编译正确后,将产生一个目标程序。编译与解释编译与解释编译过程程词法分析、法分析、语法分析、法分析、中中间代代码生成、生成、优化和目化和目标代代码生生成成编译与解释编译与解释 v解释方式的翻译工作由解释器解释器解释器解释器来完成。v当运行使用解释语言编写的程序时,解释器会读一条语句,然后对其进行分析,若没有错误,则将该语句翻译成一条或多条可执行的机器语言指令,执行完该指令后解释器再读入下一条语句并解释成机器指令;若解释时发现错误,便会立即停止,报错并提醒用户修改程序。如此继续,整个过程不产生目标程序。解释方式解释方式编译与解释编译与解释v编译把源程序的执行过程分为两个阶段:编译阶段编译阶段编译阶
13、段编译阶段和运行阶段运行阶段运行阶段运行阶段,即先把源程序全部翻译成目标代码,然后再运行此目标代码,得到执行结果。解释却把两个阶段合并成一个阶段,称为解释执行解释执行解释执行解释执行阶段阶段阶段阶段,即按照源程序中语句的动态顺序,直接地逐句进行分析解释,并立即执行,直至源程序结束。v经编译得到的目标程序,可以脱离编译程序独立运行;被解释的程序却不能脱离解释环境执行。编译和解释的区别编译和解释的区别常用程序设计语言常用程序设计语言 FORTRANFORTRAN语言语言 COBOL COBOL 语言语言 BASIC BASIC 语言语言 PASCAL PASCAL 语言语言 C C 语语 言言 C
14、 C+语语 言言 LISP LISP 语语 言言 PROLOGPROLOG语言语言 JAVA JAVA 语言语言高级程序设计语言的特征高级程序设计语言的特征 v高级语言的数据类型一般分为基本数据类型和构造数据类型两大类。高级语言的数据类型一般分为基本数据类型和构造数据类型两大类。v基本数据类型:整数类型、实数类型、字符类型、逻辑类型、指针基本数据类型:整数类型、实数类型、字符类型、逻辑类型、指针类型等。类型等。v构造数据类型:数组类型、枚举类型、记录类型(结构类型)、文构造数据类型:数组类型、枚举类型、记录类型(结构类型)、文件等。件等。张东张东30301500.801500.80姓名姓名字符
15、型字符型整型整型实型实型年龄年龄工资工资数据类型数据类型高级程序设计语言的特征高级程序设计语言的特征 v把表示数值的名字称为标识符。把表示数值的名字称为标识符。v常量:以不变的数值形式出现的量,仅标识一个固定数据值的名字常量:以不变的数值形式出现的量,仅标识一个固定数据值的名字称为常量标识符。称为常量标识符。v变量:程序执行过程中可能发生变化的对象用一个名字给以标识,变量:程序执行过程中可能发生变化的对象用一个名字给以标识,对该名字的处理,可以是对该名字标识的任何一个数据值进行处理,对该名字的处理,可以是对该名字标识的任何一个数据值进行处理,该名字称为变量。例如,计算的数据对象和计算结果对象在
16、程序中该名字称为变量。例如,计算的数据对象和计算结果对象在程序中可以用变量表示。变量具有作用域,它取决于该变量的实际使用范可以用变量表示。变量具有作用域,它取决于该变量的实际使用范围。围。v标识符的构成规则:第一个字符必须是字母,其他字符可以是字母、标识符的构成规则:第一个字符必须是字母,其他字符可以是字母、数字或下划线等。数字或下划线等。常量与变量常量与变量 高级程序设计语言的特征高级程序设计语言的特征 v程序中对数据进行处理是通过运算符实现的。程序中对数据进行处理是通过运算符实现的。v不同的程序设计语言提供的运算符种类不同,表示形式也可能不同,不同的程序设计语言提供的运算符种类不同,表示形
17、式也可能不同,通常有如下几类运算:通常有如下几类运算:算术运算符:加、减、乘、除、乘方等。算术运算符:加、减、乘、除、乘方等。关系运算符:大于、大于等于、小于、小于等于、相等、不相等。关系运算符:大于、大于等于、小于、小于等于、相等、不相等。逻辑运算符:与、或、非等。逻辑运算符:与、或、非等。字符运算符:连接、比较、取子串等。字符运算符:连接、比较、取子串等。赋值运算符赋值运算符 :运算符运算符高级程序设计语言的特征高级程序设计语言的特征 v表达式是程序中进行计算并取值的基本单位,它由常量、变量、函表达式是程序中进行计算并取值的基本单位,它由常量、变量、函数调用和运算符组成。通常表达式由若干个
18、运算符把一些运算对象数调用和运算符组成。通常表达式由若干个运算符把一些运算对象连接在一起。连接在一起。v例如,已知圆半径例如,已知圆半径r r,求圆面积的,求圆面积的C C语句如下:语句如下:其中,其中,PI*r*rPI*r*r就是一个表达式,就是一个表达式,r r和和s s都是变量,都是变量,PIPI是符号常量。是是符号常量。是赋值运算符。赋值运算符。表达式表达式s=PI*r*r;高级程序设计语言的特征高级程序设计语言的特征 v语句是程序中具有独立含义的基本单位,通常分为说明性语句和执语句是程序中具有独立含义的基本单位,通常分为说明性语句和执行性语句。行性语句。说明性语句用来说明程序中被处理
19、对象的标识符名及其类型,在某些语说明性语句用来说明程序中被处理对象的标识符名及其类型,在某些语言(如言(如C C语言)中还用于说明对象的存储类型,即对象的作用域。语言)中还用于说明对象的存储类型,即对象的作用域。执行性语句由程序设计语言所提供的语句组成,是可以执行的。执行性语句由程序设计语言所提供的语句组成,是可以执行的。语语 句句高级程序设计语言的特征高级程序设计语言的特征 v高级语言引入过程或函数的目的是把一个复杂程序分解为若干个功高级语言引入过程或函数的目的是把一个复杂程序分解为若干个功能单一的子程序能单一的子程序(过程或函数过程或函数)。v当程序中要进行多次重复计算时,可以把重复部分定
20、义成一个子程当程序中要进行多次重复计算时,可以把重复部分定义成一个子程序序(过程或函数过程或函数),当程序中需要进行该计算时,就调用该子程序,当程序中需要进行该计算时,就调用该子程序(过过程或函数程或函数)。过过 程程实实 例例高级程序设计语言的特征高级程序设计语言的特征 有一个任务要将一个班的学生成绩按有一个任务要将一个班的学生成绩按平均成绩降序输出。算法描述:平均成绩降序输出。算法描述:v 输入一个班学生的各门课程成绩;输入一个班学生的各门课程成绩;v 计算每个学生的平均成绩;计算每个学生的平均成绩;v 将平均成绩按降序排列;将平均成绩按降序排列;v 输出排序结果。输出排序结果。过过 程程
21、按功能将该任务分解成4个子任务,即 输入子任务;计算平均成绩子任务;降序排序子任务;输出子任务。高级程序设计语言的特征高级程序设计语言的特征 过过 程程按功能将该任务分解成4个子任务,即 输入子任务;计算平均成绩子任务;降序排序子任务;输出子任务。一个子任务对应一个过程或函数。一个子任务对应一个过程或函数。按这种方法编写程序,便于多人合按这种方法编写程序,便于多人合作,降低了程序的复杂度,程序结作,降低了程序的复杂度,程序结构更加清晰。构更加清晰。在高级语言系统的函数库中,通常在高级语言系统的函数库中,通常为用户提供了大量的可直接调用标为用户提供了大量的可直接调用标准函数。例如,数学函数,字符
22、串准函数。例如,数学函数,字符串处理函数,类型转换函数等。处理函数,类型转换函数等。高级程序设计语言的特征高级程序设计语言的特征 v对象的作用域是指变量使用的有效范围,它与定义对象的位置和过对象的作用域是指变量使用的有效范围,它与定义对象的位置和过程的结构有关。程的结构有关。对象的作用域对象的作用域 例如在在C C语言程序中,定义在函数内的变量称为局部变量,它的使语言程序中,定义在函数内的变量称为局部变量,它的使用范围只局限于定义它的函数体内,定义在函数外的变量称为用范围只局限于定义它的函数体内,定义在函数外的变量称为全局变量,它的使用范围是从定义该变量的地方开始生效。全局变量,它的使用范围是
23、从定义该变量的地方开始生效。高级程序设计语言的特征高级程序设计语言的特征 v每一种高级语言都提供了各自的输入每一种高级语言都提供了各自的输入/输输出语句或输入出语句或输入/输出函数。通常,输入输出函数。通常,输入/输输出都有两种方式。出都有两种方式。人机交互方式:例如从键盘上的输入,人机交互方式:例如从键盘上的输入,通常是少量的数据输入。通常是少量的数据输入。文件方式:当数据量较大时,通常将数据文件方式:当数据量较大时,通常将数据事先存放到一个数据文件中,需要时在程事先存放到一个数据文件中,需要时在程序中打开该数据文件,从文件中读出数据。序中打开该数据文件,从文件中读出数据。输入输入/输出输出
24、处理输入输出计算机程序与程序设计程序设计语言 程序设计过程及方法 算法基础 主要内容程序设计过程及方法程序设计过程及方法 程序设计基本过程 问题建模问题建模编译调试编译调试设计设计编写代码编写代码程序设计过程及方法程序设计过程及方法执执执执行行行行程程程程序序序序的的的的一一一一般般般般过过过过程程程程 程序设计过程及方法程序设计过程及方法编辑一个程序就是在一个文本编辑器中输入或修改源程序的过程。编辑一个程序就是在一个文本编辑器中输入或修改源程序的过程。1 1编辑编辑编译程序的过程是对编辑好的源程序进行语法分析,并将源程序翻编译程序的过程是对编辑好的源程序进行语法分析,并将源程序翻译成二进制形
25、式的目标代码的过程。译成二进制形式的目标代码的过程。2 2编译编译编译生成的目标程序是不能运行的,需要连接生成一个扩展名为编译生成的目标程序是不能运行的,需要连接生成一个扩展名为EXEEXE的可执行文件才能执行。的可执行文件才能执行。3 3连接连接运行程序就是执行经连接生成的扩展名为运行程序就是执行经连接生成的扩展名为EXEEXE的可执行文件。的可执行文件。4 4运行和调试运行和调试程序设计过程及方法程序设计过程及方法测试就是尽可能地发现程序中的错误。测试就是尽可能地发现程序中的错误。5 5测试测试从是否执行程序的角度分为:静态测试。不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程
26、、接口等来检查程序的正确性,对可能出错的程序段进行认真的阅读。动态测试。通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,该方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。分类一程序设计过程及方法程序设计过程及方法测试就是尽可能地发现程序中的错误。测试就是尽可能地发现程序中的错误。5 5测试测试从是否关心程序内部结构和具体实现的角度分为:白盒测试。白盒测试也称结构测试或逻辑驱动测试,它是按照程序的内部结构测试程序,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。黑盒测试。他是以用户的角度,从输入数据与输出数据
27、的对应关系出发进行测试的。通过测试来检测每个功能是否都能正常使用。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。分类二v原则:在软件设计和实现过程中,采用自顶向下、逐步求精、模块化。原则:在软件设计和实现过程中,采用自顶向下、逐步求精、模块化。v程序设计模式:程序设计模式:“数据结构算法数据结构算法”v基本结构:顺序、选择、循环三种基本控制结构,避免使用基本结构:顺序、选择、循环三种基本控制结构,避免使用GOTOGOTO语句。语句。顺序结构顺序结构选择结构选择结构程序设计过程及方法程序设计过程及方法结构化程序设计结构化程序设计循环结构循环结构程序设计过程及
28、方法程序设计过程及方法结构化程序设计结构化程序设计v面向对象方法具有与人类习惯的思维方法一致,稳定性好,可重用性好,可维护性好,易于开发大型软件。v面向对象方法和技术将问题分解为对象对象对象对象,以对象对象对象对象为核心。对象是由数据和容许的操作组成的封装体封装体封装体封装体。对象之间通过传递消息消息消息消息互相联系。v程序设计模式:“对象消息”程序设计过程及方法程序设计过程及方法面向对象程序设计面向对象程序设计对对 象(象(ObjectObject)程序设计过程及方法程序设计过程及方法系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作
29、组成。例如,一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号、载重量等)及其操作(如启动、刹车等)。面向对象程序设计面向对象程序设计类(类(ClassClass)和)和 实例(实例(InstanceInstance)程序设计过程及方法程序设计过程及方法类类类类是具有相同类型对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例实例实例实例。人是一个类,而每一个具体的人则是这个类中的一个对象,一个名为李敏的人就是这个类中的一个具体的对象,即实例。封封 装装封装是一种信息隐蔽技术,它使数据和加工该数据的方法(函数)封装为一个整体。封装的目的在于把对象的设计者和对象
30、的使用者分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。继继 承承 性(性(InheritanceInheritance)程序设计过程及方法程序设计过程及方法继承性是子类自动共享父类之间数据和方法的机制,它由类的派生功能体现,是一种联结类与类的层次模型。一个新类可以从现有类中派生,这个过程称为类继承。新类继承了原来类的特性,称为原来类的派生类(子类),原来类称为新类的基类(父类)。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多
31、个父类)。多多 态态 性(性(PolymorphismPolymorphism)程序设计过程及方法程序设计过程及方法多态性是指对于不同数据类型的相似操作使用相同的命名。多态是指不同事物具有不同表现形式的能力。消消 息(息(MessageMessage)一个对象向另一个对象发出的请求被称为“消息”。当对象接收到发给它的消息时,就调用有关的方法,执行相应的操作。面向对象程序设计技术中必须提供一种机制允许一个对象与另一个对象的交互,这种机制叫消息传递。计算机程序与程序设计程序设计语言 程序设计过程及方法 算法基础 主要内容算法基础算法基础 v算法与数据结构是计算机程序的两大基础。算法与数据结构是计算
32、机程序的两大基础。数据结构是为了研究数据运算而存在的,它直接影响计算机进行数据结构是为了研究数据运算而存在的,它直接影响计算机进行数据处理的效率;数据处理的效率;算法是为了实现数据运算,算法的好坏也直接影响计算机的效率。算法是为了实现数据运算,算法的好坏也直接影响计算机的效率。算法算法+数据结构数据结构=程序程序 算法算法+数据结构数据结构=程序程序 算法算法+数据结构数据结构=程序程序 算法算法+数据结构数据结构=程序程序 算法算法+数据结构数据结构=程序程序 算法基础算法基础 算算法法特特性性确确 定定 性性指算法中的每一个指算法中的每一个规则、每一个操作步、每一个操作步骤都都应当是确定当
33、是确定的,不允的,不允许存在多存在多义性和模棱两可的解性和模棱两可的解释。有有 穷 性性指任意一个算法必指任意一个算法必须在在执行有限步行有限步骤后后结束。束。输 入入在在执行算法行算法过程中,从外界程中,从外界获得的信息就是得的信息就是输入。一个入。一个算法有算法有0个、个、1个或多个个或多个输入。入。输 出出一个算法所得到的一个算法所得到的结果就是果就是该算法的算法的输出。一个算法必出。一个算法必须有有1个或多个个或多个输出,否出,否则该算法就没有算法就没有实际意意义了。了。可可执行性行性算法的每一步操作都算法的每一步操作都应该是可是可执行的。例如,当行的。例如,当B=0时,A/B就无法就
34、无法执行,不符合可行,不符合可执行性的要求。行性的要求。算法基础算法基础 算算法法要要求求正正 确确算法的算法的执行行结果果应当当满足足预先先规定的功能和性能要求。定的功能和性能要求。可可 读一个算法一个算法应当思路清晰、当思路清晰、层次分明、次分明、简单明了、易明了、易读易易懂。算法主要是懂。算法主要是为了人的了人的阅读、理解和交流,其次才是、理解和交流,其次才是机器机器执行。行。健健 壮壮当当输入数据不合法入数据不合法时,应能适当作出反能适当作出反应或或进行行处理,理,而不会而不会产生莫名其妙的生莫名其妙的输出出结果果 高效与低高效与低存存储量量效率指的是算法效率指的是算法执行的行的时间,
35、存,存储量需求是指算法量需求是指算法执行行过程中所需的最大存程中所需的最大存储空空间。同一。同一问题若有多种算法可若有多种算法可以解决,以解决,执行行时间短的算法效率高,而效率与低存短的算法效率高,而效率与低存储量量需求都与需求都与问题的的规模有关模有关。算法基础算法基础主要用于科学计算,其目的是求数值解。例如,求方程的根有二分法、迭代法或牛顿法;计算数值积分有梯形法、辛普生法和柯特斯法。算法的特点是少量的输入和输出,算术运算占主要地位。数值计算算法数值计算算法主要用于数据管理、实时控制以及人工智能等领域,其目的是对数据的处理。算法的特点是大量的输入和输出,逻辑判断通常占主导地位,算术运算则居
36、于相对次要的地位。非数值计算算法非数值计算算法算法的种类算法的种类算法基础算法基础算法的描述算法的描述v自然语言:用人们使用的语言描述算法。自然语言:用人们使用的语言描述算法。【实例实例5 5】求任意三个正整数求任意三个正整数a a、b b、c c中的最大者。中的最大者。用自然语言描述的算法如下:输入a,b,c;a和b比较,若ab则max=a,否则max=b;c和max比较,若cmax,则max=c;输出max。算法基础算法基础算法的描述算法的描述v流程图:用图形来表示算法。流程图:用图形来表示算法。算法基础算法基础算法的描述算法的描述v流程图:用图形来表示算法。流程图:用图形来表示算法。【实
37、例实例5 5】求任意三个正整求任意三个正整 数数a a、b b、c c中的最大者。中的最大者。算法基础算法基础算法的描述算法的描述vN-SN-S结构流程图:去掉了结构流程图:去掉了传统流程图中带箭头的传统流程图中带箭头的线,全部算法以一个大线,全部算法以一个大的矩形框表示,框内还的矩形框表示,框内还可以包含一些从属于它可以包含一些从属于它的小矩形框,适于结构的小矩形框,适于结构化程序设计。化程序设计。算法基础算法基础算法的描述算法的描述vN-SN-S结构流程图:结构流程图:【实例实例5 5】求任意三个正整数求任意三个正整数a a、b b、c c中的最大者。中的最大者。算法基础算法基础算法的描述
38、算法的描述v伪代码:伪代码:Pseudo-codePseudo-code又称又称PDLPDL语言,是用介于自然语语言,是用介于自然语言和计算机语言之间的文言和计算机语言之间的文字和符号来描述算法。伪字和符号来描述算法。伪代码不能被计算机所理解,代码不能被计算机所理解,但接近于某种语言编写的但接近于某种语言编写的程序,便于转换成编程语程序,便于转换成编程语言。言。read a,b,cif ab a=maxelse b=maxif cmax c=maxprint max【实例实例5 5】求任意三个正整求任意三个正整 数数a a、b b、c c中的最大者。中的最大者。算法基础算法基础依题目的部分条件
39、确定答案的大致范围,在此范围内依题目的部分条件确定答案的大致范围,在此范围内对所有可能的情况逐一验证,直到全部情况验证完。对所有可能的情况逐一验证,直到全部情况验证完。若某个情况经验证符合题目的全部条件,则为本题的若某个情况经验证符合题目的全部条件,则为本题的一个答案。一个答案。若全部情况经验证后都不符合题目的全部条件,则本若全部情况经验证后都不符合题目的全部条件,则本题无答案。题无答案。算法设计基本方法算法设计基本方法 列举法列举法算法基础算法基础算法设计基本方法算法设计基本方法 【实例实例6 6】百钱买百鸡。鸡翁一,值钱五;鸡母一,值钱三;百钱买百鸡。鸡翁一,值钱五;鸡母一,值钱三;鸡雏三
40、,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?假设鸡翁、鸡母、鸡雏分别为a,b,c只,可得如下两方程:a+b+c=100 (1)(a的取值范围为020,b为033)5a+3b+c/3=100 (2)列举法依次对a,b,c取值范围内的各数一一试探,找出满足方程(1)和(2)的组合。列举法列举法算法基础算法基础通过列举少量特殊情况,经过分析,归纳出一般的关系。通过列举少量特殊情况,经过分析,归纳出一般的关系。它比列举法更能反映问题的本质,并且可以解决列举量它比列举法更能反映问题的本质,并且可以解决列举量为无限的问题。为无限的问题。算法设计基本
41、方法算法设计基本方法 归纳法归纳法算法基础算法基础从已知的初始条件出发,逐次推出所要求的各中间结果从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。和最后结果。递推的过程就是找出旧值和新值之间的关系,每次都从递推的过程就是找出旧值和新值之间的关系,每次都从旧值推出新值,然后用新值代替旧值。旧值推出新值,然后用新值代替旧值。算法设计基本方法算法设计基本方法 递推法递推法【实例实例7 7】猴子吃桃问题。猴子吃桃问题。一只猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再
42、吃时,见只剩下一个桃子了。求第一天共摘了多少?算法基础算法基础算法设计基本方法算法设计基本方法 递推法递推法假设dn为第n天的桃子数,则可得到递推公式:dn-1=(dn+1)2【实例实例8 8】年龄问题。年龄问题。有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人的岁数,他说比第3个人大2岁。问第3个人的岁数,他说比第2个人大2岁。问第2个人,他说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大?算法基础算法基础算法设计基本方法算法设计基本方法 递归法递归法递归是一个特殊的循环。算法基础算法基础有A,B,C 三根柱子,A柱子上插有3个大小不等的圆盘(这些圆盘中
43、间都是空的),大的在下,小的在上,游戏是要把这3个圆盘从A柱子移到 C 柱上。游戏的规则如下:先让我们先让我们做一做一个游戏个游戏(3)任何时刻都不能把一个较大的圆盘压在较小的圆盘上。(1)每次只能移动一个圆盘;(2)圆盘可以从任一根柱子移到另一根柱子上;有有2 2个变量个变量a a和和b b,给,给2 2个变量输入数据后,要求交换两变量的值。个变量输入数据后,要求交换两变量的值。变量值变量值的交换的交换算法基础算法基础A AB BC C怎么才能达到交换的目的呢?怎么才能达到交换的目的呢?要完成该游戏,必须借助要完成该游戏,必须借助B B柱子,具体实现柱子,具体实现:A AB BC C算法基础
44、算法基础A AB BC CA AB BC CA AB BC C算法基础算法基础A AB BC CA AB BC CA AB BC C算法基础算法基础 根据前面的游戏可知,要实现交换,需要引入一个中间变量t,即借助另外一个内存单元。算法基础算法基础v算法分析是对算法效率的分析,分析算法所要占用的计算机资源,算法分析是对算法效率的分析,分析算法所要占用的计算机资源,即运行时间和占用空间。即运行时间和占用空间。运行时间是指一个算法在计算机上运行所花费的时间,采用时运行时间是指一个算法在计算机上运行所花费的时间,采用时间复杂度来度量;间复杂度来度量;占用空间是指算法编制成程序后,在计算机中占用存储空间
45、的占用空间是指算法编制成程序后,在计算机中占用存储空间的大小,用空间复杂度来度量。大小,用空间复杂度来度量。算法分析算法分析时间复杂度是指执行算法所需要的计算工作量。空间复杂度用于度量算法所需的存储空间。小 结vv掌握计算机程序的概念。掌握计算机程序的概念。掌握计算机程序的概念。掌握计算机程序的概念。vv了解程序设计语言的发展。了解程序设计语言的发展。了解程序设计语言的发展。了解程序设计语言的发展。vv重点掌握程序设计的过程及方法。重点掌握程序设计的过程及方法。重点掌握程序设计的过程及方法。重点掌握程序设计的过程及方法。vv掌握算法的特性、种类和描述。掌握算法的特性、种类和描述。掌握算法的特性、种类和描述。掌握算法的特性、种类和描述。vv重点掌握算法设计的基本方法。重点掌握算法设计的基本方法。重点掌握算法设计的基本方法。重点掌握算法设计的基本方法。