程序设计基础(理工).pptx
计算机基础教程,第 4章 程序设计基础,程序与程序设计语言 算法程序设计过程程序设计思想常用程序设计语言(自学),内容提要,基本要求掌握什么是程序和程序设计;掌握程序设计的过程;了解常见程序设计语言的特点;掌握算法的概念、特性及表示方法;掌握结构化程序设计的方法;了解面向对象程序设计的概念。重点算法的概念、特性及表示方法。结构化程序设计的方法。,学习要求,4.1 程序与程序设计,程序与程序设计,程序:是计算机为完成某一个任务所必须执行的一系列指令的集合。如厨师炒菜。,程序设计是根据计算机要完成的任务,提出需求,设计数据结构和算法,编制程序和调试程序,使计算机程序能够正确完成所设定的任务。简单地讲,程序设计是设计和编写程序的过程。程序设计实际上是安排计算机按人们的意志去工作,程序设计是一个过程,这个过程主要包括:,如何描述程序程序=算法+数据结构程序=语言工具环境+算法+程序设计方法+数据结构计算机程序主要特点目的性:程序有明确的目的,能完成赋予它的功能。分步性:程序由一系列计算机可执行的步骤组成。有序性:程序的执行步骤是有序的,不可随意改变程序步骤的执行顺序。有限性:程序是有限的指令序列,程序所包含的步骤是有限的。操作性:有意义的程序总是对某些对象进行操作,使其改变状态,完成其功能。,程序设计语言,程序设计语言:是人与计算机交流和沟通的工具。是用来编写计算机程序的工具。又称计算机语言。程序设计语言的演变:经历了由低级向高级发展的过程。对程序设计语言的分类可以从不同的角度进行。其中,最常见的分类方法是根据程序设计语言与计算机硬件的联系程度将其分为三类:机器语言、汇编语言和高级语言。,机器语言每一条语句是一条二进制形式的指令代码。其指令格式如图:特点是难学、难记、难写,难修改、难调试,但执行速度快,占空间小。,示例:计算AL=9+8,机器语言程序如下:10110000 00001001:把9放入累加器AL中00000100 00001000:8与累加器AL中的值相加,结果仍放入AL中11110100:停止操作,汇编语言:用一些容易记忆和辨别的有意义的符号即“助词符”代替机器指令的语言叫汇编语言。需要由汇编语言系统将程序汇编(翻译)成机器语言,才能执行。是一种面向机器的语言,但比机器语言易读、易改,执行速度与机器语言相仿。,示例:计算AL=9+8,汇编语言程序如下:MOV AL,9 ADD AL,8HLT,高级语言一种与机器指令系统无关,独立于机器的程序设计语言。使用的符号非常接近人类的自然语言与数学语言,表达形式接近于被描述的问题。程序的算法也接近于对问题的求解过程。便于书写、易于掌握,可移植性强。,示例:用高级语言C编程如下:main()int AL;AL=8+9;printf(“%d”,AL);,高级语言的分类:面向过程的语言:用计算机能够理解的逻辑来描述需要解决的问题和解决问题的具体方法和步骤。即写程序时,不仅要说明做什么,还要非常详细地告诉计算机如何做。如高级语言C、QB等。面向问题的语言:也称非过程化语言。它摆脱了计算机的内部逻辑,不关心问题的求解算法和求解过程,只需指出问题是要计算机做什么,数据的输入和输出形式,就能得到所需结果。如数据库查询语言SQL。面向对象的语言:将客观事物看成是具有属性和行为的对象,通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态可以很方便地实现代码重用,提高程序的复用能力和程序开发效率。如VB、VFP、VC、Java等。,语言处理程序,语言处理程序:除机器语言编制的程序能够被计算机直接理解和执行外,其他的程序设计语言编写的程序都必须经过一个翻译过程才能转换为计算机所能识别的机器语言程序,实现这个翻译过程的工具是语言处理程序,即翻译程序。不同的程序设计语言有不同的翻译程序,互不通用。,汇编程序:是将汇编语言编制的程序(称为源程序)翻译成机器语言程序(称为目标程序)的工具。其工作过程如图示:,高级语言处理程序翻译程序是将高级语言编写的源程序翻译成目标程序的工具。两种工作方式:解释方式:工作由“解释程序”来完成。解释程序对源程序进行逐句分析,若没有错误,将该语句翻译成一条或多条机器语言指令,然后立即执行这些指令;若当它解释时发现错误,会立即停止,报错并提醒用户更正代码。也就是说,解释程序对源程序逐条地解释执行,不产生目标代码。程序执行时,解释程序和源程序一起参加运行。工作过程如图所示。,编译方式:翻译工作由“编译程序”来完成。这种方式如同“笔译”,在纸上记录翻译后的结果。编译程序对整个源程序经过编译处理后,产生一个与源程序等价的目标程序,但目标程序还不能立即装入机器执行,因为还没有连接成一个整体。在目标程序中还可能要调用一些其他语言编写的程序和标准程序库中的标准子程序,所有这些程序通过连接程序将目标程序和有关的程序库组合成一个完整的可执行程序,如图所示。,程序设计语言的支持环境,程序设计语言的基本成分与语法,程序的基本成分字符集:是构成程序设计语言的最小语法单位。数据类型:基本数据类型(数值、字符、逻辑等)和构造数据类型(数组、记录、枚举等)两大类。其使用目的,一是决定该类型数据的取值形式、范围和在计算机中的存储与表示方式。二是决定了该类型的数据所能执行的操作种类,表达式变量和常量:运算符:算术、字符、关系、逻辑。函数:数学、字符串、日期、转换等函数。赋值语句:=,数据输入和输出程序的框架一般是“输入/处理/输出”,即输入计算的原始数据,通过计算,将结果输出。程序的输入输出分为两大类:一类是程序之间以文件形式传送数据一类是人机交互在不同的程序设计语言中用不同的语句或函数来实现。如C语言的数据输入和输出:printf(“%d”,x);C语言的数据输出 scanf(“%d”,C语言的数据输入,基本控制结构顺序结构:程序的执行是按照语句出现的先后顺序依次执行。选择结构:指根据条件判断,决定程序的执行顺序。循环结构:是指重复执行某个操作。,4.2 算 法,算法概述,算法:在计算机中,把解题过程准确而完整地描述称为解该题的算法。程序是用计算机语言表述的算法。流程图是图形化的算法。注意:算法虽然是解决问题的方法和步骤,但它不是计算机可以直接执行的,只是编制程序代码前对问题处理思想的一种描述,只有将算法转变为程序才能让计算机求解问题!,有穷性:算法在执行有穷个计算步骤后必须终止。确定性:算法中的操作,要含义确切、无二义性。有效性:算法中的每一个步骤都必须是可执行的,并得到正确有效的结果。输入:算法需从外界得到必要的信息,一个算法有零个或多个输入。输出:算法必须告知外界获得的结果,一个算法有一个或多个输出。,算法的性质,算法评价,正确性算法的时间特性:是指依据算法编制成程序后在计算机中运行所耗费时间的长短。算法的空间特性:是指依据算法编制成程序后在计算机中运行所占用的空间的大小。算法的易理解性:是衡量一个算法优劣的重要指标,因为算法需要提供给别人去阅读、编写相应的程序以及进行修改和维护。,算法的表示方法,五种方法自然语言传统的流程图法N-S流程图法伪代码法计算机语言,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,自然语言:用人们常用的语言表示。示例:输入100个学生的数学成绩,求总成绩和平均成绩。算法表示:步骤1:置初态,累加器sum为0,学生人数i为1,平均分ave为0;步骤2:输入第一个学生的数学成绩;步骤3:进行累加,求学生成绩的和;步骤4:重复步骤2步骤3,直到处 理完全部学生成绩;步骤5:求平均成绩;步骤6:输出总成绩和平均成绩;步骤7:结束。,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,传统的流程图法:用图框、线条及文字表示。流程图符号含义:,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,三种基本结构:,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,示例4.1算法表示:,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,三种基本结构:,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,示例4.1算法表示:,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。“伪”意味着假,因此伪代码是一种假的代码,不能被计算机所理解,但接近于某种语言编写的程序,便于转换成编程语言。根据编程语言的不同,有对应的类Pascal、类C等。伪代码书写格式比较自由,容易表达设计者的思想,同时伪代码写的算法容易修改,但伪代码不如流程图直观,可能出现逻辑上的错误。,自然语言传统的流程图法N-S流程图法伪代码法计算机语言,示例4.2算法表示main()int mark,sum=0,i=1;float ave=0.0;while(i=100)printf(请输入学生成绩);scanf(“%d”,4.3 程序设计过程,程序设计过程,五个过程问题定义算法设计程序编制程序测试文档编写,问题定义算法设计程序编制程序测试文档编写,应该完成工作:严格、准确定义所要解决的实际问题;明确定义问题的输入和输出;确定问题在技术上、经济上是否可行;建立计算机可实现的系统模型。示例:统计一个班级的学生的考试成绩总分及平均分,并选出优秀学生。要解决如下问题:多少科目的成绩?优秀的定义:是根据总分?还是平均分?还是总分排名前5 名?数据如何录入?结果如何输出?,问题定义算法设计程序编制程序测试文档编写,应该完成工作给出各个功能模块的详细描述设计实现各个功能模块的算法,问题定义算法设计程序编制程序测试文档编写,应该完成工作:选择程序设计语言;编辑程序代码;运行程序;示例:交换两个变量的程序代码。main()int a,b;a=10;b=20;swap(,问题定义算法设计程序编制程序测试文档编写,程序测试:是为了发现已编写好的程序中的错误而执行的过程。程序测试方法:黑盒测试:也称为功能测试或数据驱动 测试。白盒测试:又称为结构测试或逻辑驱动调试,是把程序看成一个透明的白盒子,也就是要完全了解程序的内部结构和处理过程。,问题定义算法设计程序编制程序测试文档编写,两项工作:写程序使用说明书程序运行需要的软硬件环境;程序的安装、启动方法;程序的功能;需要输入的数据类型、格式和取值范围;涉及文件数量、名称、内容、存放的路 径等。写程序技术说明书程序各模块的描述;程序使用硬件的有关信息;主要算法的解释和描述;各变量的名称、作用,程序代码清单。,4.4 程序设计思想,两种程序设计方法,结构化程序设计,面向对象程序设计,结构化程序设计的原因,SP概念最早由EW Dijkstra提出。结构化程序设计方法产生动力在于出现“软件危机”。所谓“软件危机”实际上指软件生产出现严重供不应求的状况。由于软件危机迫使人们在软件开发方法上进行变革。,结构化程序设计的目标,程序设计的目标不应再集中于如何充分发挥硬件的效率方面,新的程序设计方法应以能设计出结构清晰、可读性强、易于分工合作编写和调试的程序。原先程序设计目标为:追求程序的运行速度快和所占用的存储空间小。结构化程序设计将程序设计目标定为:追求程序的结构清晰、可读性强、易于分工合作编写。,结构化程序设计思想,思想:采用“自顶向下,逐步求精”的程序设计方法。三个要点:采用自顶向下、逐步求精的设计方法。求精过程中只使用顺序、选择、循环控制结构。一个程序(或模块)只有一个入口和一个出口。,自顶向下、逐步求精含义自顶向下:将复杂的综合的大问题分解为相对简单具体的小问题,其核心本质是“分解”。逐步求精:求解(抽象)过程可以划分为若干个阶段,一个阶段又一个阶段逐步将问题精确求解。其核心是“模块化”,即将程序分解为若干个模块,这里的模块是指功能相对简单、独立。目的:降低程序的复杂度,使设计出来的程序便于阅读、调试和维护。,只使用顺序、选择、循环控制结构顺序结构:整个顺序结构只有一个入口点和一个出口点,程序从入口点开始,按顺序执行所有操作,直到出口点处。选择结构:表示程序的处理步骤出现了分支。选择结构有单选择、双选择和多选择三种形式。无论有多少个分支,只能选择一条且必须选择一条执行,但不论选择哪一条分支执行,最后流程都一定到达结构的出口点处。循环结构:循环结构也只有一个入口点和一个出口点,循环终止是指流程执行到了循环的出口点。目的:使程序结构清晰,便于理解,便于调试。,模块的含义模块:可以是一条语句、一段程序、一个函数等。基本特征:仅有一个入口和一个出口。目的:保证模块相互独立,内聚性很强,一个模块完成一个功能,便于理解、调试和分工协作开发程序,从而总体上加快软件开发的速度,提高软件质量。,面向对象程序设计基本思想,面向过程的程序设计(Structure Programming)以功能(语句)为中心,程序中的一切操作都是通过调用过程和函数来实现。程序=过程+调用面向对象的程序设计(Object-Oriented Programming)以对象(数据)为中心,程序中的一切操作都是通过向对象发送相应的消息来实现。程序=对象+消息,面向对象程序设计(OOP)的基本概念,对象(Object):是最基本的实体,对象的概念就是对现实世界中对象的模型化,它是数据和代码的组合,具有自己的特征和行为。类(Class):类是创建对象实例的模板,是同种对象的集合与抽象,它包含所创建对象的属性描述和行为特征的定义,对象是类的实例。属性(Property):用来表示对象的特性,不同的对象有不同的属性。方法(Method):是对象的属性的各种操作。将一些通用的过程或函数编写好并封装起来,作为方法直接供用户调用。,事件、事件过程和事件驱动事件是面向对象程序设计中对应于“消息”的术语。对象的事件是指由系统事先设定的、能被对象识别和响应的动作。同一事件,作用于不同的对象,就会引发不同的反应,产生不同的结果。事件过程是当在对象上发生了事件后,应用程序就要处理这个事件,而处理的步骤就是事件过程。事件驱动的编程机制是程序执行后系统等待某个事件的发生,然后去执行处理此事件的事件过程,待事件过程执行完后,系统又处于等待某事件发生的状态。,封装(Encapsulation):封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。封装性可降低开发过程的复杂性,提高了效率和质量,也保证了程序中数据的完整性和安全性。(数据抽象+代码抽象)继承(Inheritance):表示类之间的相似性的机制。继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。优点是提高软件复用、降低编码和维护的工作量。,多态性(Polymorphism):是事物具有不同形式的能力。对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。多态机制使具有不同内部结构的对象可以共享相同的外部接口。其特点可大大提高程序的抽象程度和简洁性,降低类和模块之间的耦合性,有利于程序的开发和维护。消息传递:一个面向对象的程序由许多对象组成,这些对象之间需要相互沟通。对象之间通过收发信息相互沟通。,面向对象程序设计基本过程,分析现实世界问题域。建立模型(类属性/方法的确定及类之间关系的确定)。编程建立类数据类型(属性、方法)。用类声明对象,通过对象间传递消息(方法调用)完成预定功能。,4.5常用程序设计语言,4.5常用程序设计语言,面向过程的程序设计语言 FORTRAN语言COBOL语言Pascal语言BASIC语言C语言 MATLAB,面向对象的程序设计语言 Visual Basic语言Visual C+语言Java语言C#,