大学计算机基础课件.PPT
大学计算机基础,大学计算机基础,2006年11月28日,Fundamentals of Computers,第五章 程序设计,2,程序设计是工科学生计算机学习中的一项重要内容,各专业根据自身的需要选择不同的语言类型的程序设计课程。程序设计是一门综合性很强的课程,希望通过四个学时掌握相关内容是不现实的。因此本章节的主要目的是为今后的相关内容开设作一些准备,重点在介绍概念,对于具体语言的理解与掌握要求课后能够参考相关的资料作更多的了解。,3,(1)理解程序设计语言的功能与要素;(2)理解程序设计的基本过程;(3)理解程序编译/解释/语言转换的概念;(4)理解抽象数据类型与数据结构的概念;(5)理解算法的概念与表示;(6)理解程序控制的三种基本结构;,4,(1)理解抽象数据类型与数据结构的概念;(2)理解算法的概念与表示;(3)理解程序控制的三种基本结构;,5,(1)了解程序设计语言的历史与分类;(2)了解结构化程序设计的基本思想;(3)了解面向对象程序设计的基本思想;(4)了解软件开发生命周期的概念。,6,第一节 程序设计概述,第二节 程序设计语言,第三节 程序设计方法,Content,第四节 算法、数据结构及VB程序设计,7,第一节 计算机程序概述,软件工程介绍,程序的一般概念(1),程序设计的基本过程(2),8,计算机科学中的研究成果都可以用于软件工程,但计算机科学着眼于原理和理论,软件工程着眼于如何建造一个软件系统。软件工程要用工程科学中的技术来进行成本估算、安排进度及制定计划和方案;软件工程还要利用管理科学中的方法原理来实现软件生产的管理;并用数学的方法建立软件开发中的各种模型和算法,如可靠性模型、说明用户要求的形式化模型等。,软件工程是用工程概念进行软件度量和管理,9,介绍软件的基本概念和软件工程的目标,通过对传统的面向过程的软件开发方法和面向对象的软件开发方法的介绍,使学生掌握开发高质量软件的方法;通过对软件开发过程和过程管理技术的学习,使学生了解如何进行软件度量和管理,怎样进行质量保证活动,从而能够有效地策划和管理软件开发活动。,10,软件是一种逻辑实体,不是具体的物理实体。因而它具有抽象性。,软件工程特点,这个特点使它和计算机硬件,或是其他工程对象有着明显的差别。人们可以把它记录在介质上,但却无法看到软件的形态,必须通过观察、分析、思考、判断,去了解它的功能、性能及其他特性。,11,软件的生产与硬件不同,它没有明显的制造过程。也不象硬件那样,一旦研制成功,可以重复制造,在制造过程中进行质量控制,以保证产品的质量。通过人们的智力活动,把知识与技术转化成信息的一种产品。一旦某一软件项目研制成功,可以大量地复制同一内容的副本。软件的质量控制,必须在软件开发方面下功夫。,12,在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。所以软件的维护比硬件的维护要复杂得多,与硬件的维修有着本质的差别。任何机械、电子设备在运行和使用中,其失效率大都遵循型曲线(即浴盆曲线)。而软件的情况与此不同,因为它不存在磨损和老化问题。然而它存在退化问题,要多次修改(维护)软件。,13,软件分类,按软件使用功能分类,按软件规模分类,按软件工作方式分类,14,按软件使用功能分类,支撑软件,应用软件,系统软件,15,用户,计算机层次结构,应用软件,系统软件,机器语言,硬件系统,16,系统软件(OS),支撑软件,应用软件,软件层次,17,微型软件,小型软件,中型软件,大型软件,甚大型软件,极大型软件,按软件规模分类,几天,500行以内,半年,2000行以内,多人,5千5万行以内,多人,5万10万行以内,多人,100万行以内,多人,1000万行以内,18,按软件工作方式分类,实时处理软件,分时软件,交互式软件,19,正如同任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程。我们称其为计算机软件的生存期。,软件生存期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。,20,制定计划,需求分析,算法设计,程序编码,程序测试,维护运行,软件开发实践表明,各项活动之间并非完全是自上而下,呈线性图式。实际情况是,每项开发活动均处于一个质量环中(输入-处理-输出-评审),定义阶段,开发阶段,维护阶段,计算机程序设计是指用计算机语言编写一些代码(指令)来驱动计算机完成特定的功能,也就是说,用计算机能理解的语言告诉计算机如何工作。,21,程序的概念:,完成指定动作的代码的集合,1、对于数据(操作对象)的描述介绍,2、对于操作的描述(通过操作得预期结果),对于数据的描述是关键,22,程序设计是什么?,使用计算机解决实际问题,通常是先把问题建立起数学模型,可以用算法描述,然后用计算机语言编制使计算机直接或间接接受的解决问题的一系列指令集(称为程序),最后调试程序,使之输入已知数据后,能产生预期的结果。上述整个过程,称为程序设计。,23,烹饪一盆榨菜肉丝汤。,、准备100克榨菜和50克精猪肉。、将榨菜和精肉切细丝。、向锅中倒入25克色拉油。、将锅中油加温至八成熟。、将榨菜和精肉丝放入锅中烧熟。、放少许盐和适当水并烧开。、尝咸、淡否?、若咸,则加少许开水,转。、若淡,则加少许精盐,转。、烹饪结束,出锅。,24,流 程,参加会议,25,程序的特征性质,目的性,有明确的目的,分步性,由一系列的动作完成,有序性,动作有先后顺序,有限性,动作有限度,不能无穷无尽,操作性,动作能够操作,26,计算机可以做任何事情;只要能把实际问题抽象、制作为计算机可求解的程序。,程序设计的过程,27,分析抽象,模型求解,命令编程,调试程序,实际问题,问题模型,求解算法,编制程序,问题实现,28,分析问题:,问题的提出,期望的结果,具体要求,29,通常把指示计算机进行某一工作的命令称为指令,而为完成某一任务的若干条指令的有序集合称为程序。,对数据的描述,对操作的描述,求解的算法,数据结构,30,问题:,多少科目的成绩?优秀的定义(总分?平均分?第一名?前五名?)数据如何录入?如何输出?,统计一个班学生的考试成绩,并选出优秀学生,问题定义确定了未来程序的输入、处理、输出(IPO,即Input,Process,Output),31,算法设计:,(1)算法(Algorithm)是对解决问题步骤的描述(2)算法不能被计算机理解、执行(3)算法的表示方法1)自然语言描述2)伪代码(Pseudo code)3)流程图(Flow chat),32,流程图是采用图形的方法描述算法的一种算法描述工具,习惯称框图。流程图是使用较为普遍的算法描述工具,其优点是描述简洁、清晰和直观,缺点是由于转移箭头的无约束使用,影响算法的可靠性。通过规范图形符号和对转移箭头的约束使用可削弱流程图的缺点,提高算法的可靠性。,起止框,输入输出框,判断框,处理框,流程线,连接点,注释框,33,步骤1:输入全部学生姓名、学号、英语成绩、计算机成绩;步骤2:对各个学生成绩求合计;步骤3:按合计对学生进行排序;步骤4:取排序的学生列表中第一个学生步骤5:该学生有不及格吗?没有则打印姓名并结束;有不及格,则取下一个学生并重复步骤5,算法自然语言描述示例,34,步骤1:输入一个学生的姓名、学号、英语成绩、计算机成绩;步骤2:该学生有不及格吗?有则转步骤1步骤3:该合计大于以前学生的合计吗?大于则记录姓名、学号、合计成绩;步骤4:重复步骤1直到输入全部学生成绩 步骤5:打印姓名、学号、合计成绩,算法自然语言描述示例,35,算法的流程图表示,x+1=x,打印x,x5,0=x,0=x,x5?,打印x值,x+1=x,Y,N,Y,N,36,程序编码:,编码就是用计算机能够识别的语言编写源程序的过程。不同语言提供的功能、性能有较大差距。,37,#include/包含文件void main()/主函数int i,j,max;/声明整型变量i,j,max cinij;/从键盘输入i和j的值 if(ij)/判断a和b中的较大数 max=i;elsemax=j;cout“max=”max;/输出较大数,例:求两个数中的较大数,C+程序,38,例:求两个数中的较大数,BASIC程序,Input“a,b=“,a,B 输入已知数据if ab then 确定a,b的关系 print A 如果a大,则输出aelse print b 如果b大则输出b endif 判断工作结束end 程序结束,39,例:求两个数中的较大数,FORTRAN程序,read(*,*)a,B 输入已知数据write(*,*)max(A,b)输出两个数中的大数end 程序结束,40,例:求两个数中的较大数,VB程序,Private sub form_click()定义一个过程 Dim x As Single,y As Single定义x,y变量类型 x=InputBox(“请输入x的值”)通过对话框输入x y=InputBox(“请输入y的值”)通过对话框输入y If xy then 比较x与y的大小 Print x x大于y,则输出xElse Print y y大于x,则输出yEnd IfEnd Sub 过程结束,41,调试运行:,程序设计语言的检查功能只能查出语法错误,即程序是否按规定的格式书写,但更为困难的是排除逻辑错误,而这可能直接导致错误的结果。,集成开发环境(IDE,Integrated Development Environment),指将程序的编辑、编译、运行、调试集成在同一环境下,使程序设计者既能高效地执行程序,又能方便地调试程序,甚至是逐条调试和执行源程序。,42,编译环境对程序的出错报告,定义的变量是i,使用的是I,不相符,出错信息提示,43,FORTRAN77提示,出错信息提示,44,文档编写:,文档由程序说明文件和用户操作手册组成。程序中的注释就是一种很好的文档,注释并不要求计算机理解它们,但可被读程序的人理解。,C语言的注释放在“/*/”之间C+的注释用“/”开头BASIC的注释则用REM开头,45,!a,b为从键盘输入的两个实数 read(*,*)a,B 输入已知数据 write(*,*)max(A,b)输出两个数中的大数 end 程序结束,说明程序中a,b分别表示的概念,46,不同语言处理方式有所不同:将一个大程序分成若干小程序块(子程序)每一个子程序完成相对单一的功能一个程序可以调用别的子程序不同语言的处理也不同,如C+中对应函数,47,如何用语句表达思想(算法)?,(初级)了解语句、语法(高级)熟悉语言提供的功能,不同语言提供的功能、性能有较大差距,如何组织程序代码,开始点执行过程(子程序拆分、调用)结束点,48,调试运行,(1)IDE(集成开发环境),(2)程序错误类型,语法错误逻辑错误,49,正确性,可读性,通用性,高效率,程序设计算法评价标准,50,第二节 程序设计语言,程序设计语言概述(3),程序设计语言的分类及组成(2),常用设计语言介绍(4),51,程序设计语言是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的“符号系统”。,程序设计语言分类,52,机器语言,计算机语言是人机交流的工具。最初的计算机语言是机器语言,由二进制代码(0和1组成的一序列数字代码)组成,这种代码能够被计算机直接识别执行,称为机器语言。尽管执行效率高,但可移植性差,难学难懂,出错后难修改。,53,例如:计算2+3-4,并从屏幕上输出,机器语言描述程序:,0010001100000010,-将2送累加器A,0000001100000011,-将3与累加器相加,结果在累加器,00110111,-将累加器数取反,求反码,00010111,-将累加器数加1,求补码,结果为-5,0000001100000100,-将4与累加器相加,结果-1在累加器,00110111,-将累加器数取反,求反码,00010111,-将累加器数加1,求补码,结果为1,00000010,-将累加器数1从总线输出,54,汇编语言,汇编语言是用一些易于理解的符号来取代机器语言中难于理解的二进制编码,但程序代码在字符型上看起来非常不直观,与机器指令相对应,都属于低级语言。如:用“ADD”代替加法的二进制编码“00000011”。用汇编语言替代机器语言编写程序,可大大提高程序的可理解性、可读性、可靠性、可维护性和可移植性。,55,例如:计算2+3-4,并从屏幕上输出,汇编语言描述程序:,MOV A,2H,-将2送累加器A,ADD A,3H,-将3与累加器相加,结果在累加器,CPL A,-将累加器数取反,求反码,INC A,-将累加器数加1,求补码,结果为-5,ADD A,4H,-将4与累加器相加,结果-1在累加器,CPL A,-将累加器数取反,求反码,INC A,-将累加器数加1,求补码,结果为1,OUTL BUS,A,-将累加器数1从总线输出,56,用汇编语言编写的程序不能被计算机直接识别和执行,必须由“汇编程序”(Assembler,能把用汇编语言书写的程序翻译成机器语言程序的软件)将其转换成机器语言之后才能执行,这一过程称为汇编。,汇编过程,汇编语言程序,机器语言程序,结果,汇编程序,汇编,57,汇编程序的功能是将汇编语言所编写的源程序翻译成由机器指令组成的目标程序。汇编程序基本工作包括:(1)将可执行汇编语句转成对应的机器指令;(2)对源程序中的伪指令进行相应处理汇编程序的处理过程通常由两次扫描完成。第一次扫描的主要工作是定义符号的值,以及对与定义符号值有关的伪指令进行处理;第二次扫描将可执行汇编语句翻译成对应的机器指令,产生目标程序。,汇编语言,58,高级语言,高级语言采用人们熟悉的英语和数学公式来表达,它的编写方式比较直观,程序员可以用比较抽象与机器无关的方法来解决问题。这也导致硬件制造跟软件研发分成了不同的专业领域。要执行高级语言编制的程序,必须要经过编译程序进行翻译工作,把高级语言转换成计算机所能识别的机器语言。,59,如常用的高级语言BASIC、PASCAL、C、C+等。随着WINDOWS操作系统的普及,以上基于WINDOWS系统的可视化的程序语言已经相当普遍。,例如:计算2+3-4,并从屏幕上输出,汇编语言描述程序:,write(*,*)2+3-4,end,-计算2+3-4,并输出,-结束,60,#include void main()int a;/声明整型变量a a=5+7;couta=aendl;/显示结果,用C+语言程序实现5+7的运算。,61,高级语言的执行过程,计算机不能直接接受和执行用高级语言编写的源程序,必须通过“翻译程序”翻译成机器语言形式的目标程序。这种“翻译”通常有两种方式:,编译方式,编译(compiling),源程序,目标程序,目标程序,可执行程序,连接(linking),基本基本模块,62,高级语言的执行过程,计算机不能直接接受和执行用高级语言编写的源程序,必须通过“翻译程序”翻译成机器语言形式的目标程序。这种“翻译”通常有两种方式:,解释程序边扫描边解释,逐句输入,逐句翻译,逐句执行,并不产生目标程序。,解释方式,63,解释过程,BASICfoxbaseJava,高级语言源程序,解 释,CPU执行,输入数据,输出结果,高级语言的执行过程,64,解释程序是另一种语言处理程序。以源代码作为输入,不产生源程序的目标代码,直接对源程序的语句进行执行处理,完成该语句规定的动作。通常解释程序并不直接对输入的源程序进行解释执行,而是通过两个步骤完成:(1)对源程序进行词法分析和语法语义分析,把源程序翻译成中间代码;(2)对第一步产生的中间代码解释执行。如Java就是将源程序首先译成一种称为字节码的中间代码,然后解释执行这种字节码。,解释过程,65,PASCALFORTRANCOBOLCC+,高级语言的执行过程,编译过程,高级语言源程序,可执行机器语言程序,输出结果,编译,连 接,机器代码目标程序,通用目标程序模块,输入数据,CPU执行,66,编译过程,编译程序的功能是将高级语言编写的程序翻译成在逻辑上与之等价的目标程序。编译过程一般分成5个阶段:词法分析、语法分析、中间代码生成、代码优化和目标代码生成。,67,高级语言源程序,目标程序,出错处理程序,表格处理程序,68,面向过程的语言,面向问题的语言,SQL(Structured Query Language),面向对象的语言,C+、ObjectC、Object Pascal、Simula、Smalltalk、Eiffel、Actor和Java等。,如FORTRAN、BASIC、PASCAL、C等。,69,未来的语言,程序设计语言的进一步发展是自然语言。向人们所习惯的自然语言靠拢。采用自动编程技术。发展软件构件复用技术。,70,各种程序设计语言尽管应用领域、功能及风格各不相同,然而它们都包括一些共同的成分:,组成,71,基本数据类型:整数类型、实数类型、字符类型、逻辑类型等。,构造数据类型:数组类型、枚举类型、记录类型、集合类型等。,决定该类型数据的取值形式、范围和存储与表示方式。,决定该类型数据所能执行的操作种类,72,表达式和赋值,表达式由常量、变量、函数调用和运算符组成。不同的程序设计语言中有不同的赋值号,一般用等(=)来表示。例:已知圆半径,求其面积用C+语言描述的语句为:s=3.14*r*r 其中:s、r为变量,3.14为常量,*为运算符,=为赋值号,它的语义是将右端表达式计算出的结果赋给左端的变量。,73,顺序结构,按照语句出现的先后顺序依次执行。,A,B,74,选择结构,根据条件判断,决定程序的执行次序。,A,B,A,P,P,75,选择结构对应的语句,if(条件表达式)语句块Aelse语句块B,例5-8 有一函数,当时x0,y=2x-1;当x0时,y=4x+1,使用C+语言语句表示为,if(x0)y=2*x-1;else y=4*x+1;,76,循环结构,当型循环结构,P,A,不成立,成立,先判断条件P,如果P成立,执行循环体A,如此反复,如果P不成立,退出循环,此类循环的特点:不一定执行循环内容,77,循环结构,A,P,直到型循环结构,不成立,成立,先执行循环体A,然后判断条件P,如果P成立,继续执行循环体A,如此反复,如果P不成立,退出循环,此类循环的特点:至少执行一次循环内容,78,用C+语言实现的当型循环结构如下:,int i=1,sum=0;while(i=100)sum=sum+i;i=i+1;,79,用Visual Basic语言实现的直到型循环结构如下:,Sum=0i=1DoSum=Sum+ii=i+1Loop Until i100,80,C语言中:scanf(“%d,d”,/以“m=”和“n=”的格式/输出变量m和n的值,输入/输出,不同的程序设计语言中由不同的语句或函数来实现,81,一般程序设计语言中有两种过程:函数过程和子过程,两者的主要区别是函数有返回值,子过程没有返回值,过程均要先定义后调用。除了用户定义的过程外,各种语言系统还提供了已定义好的大量标准函数,放在系统的函数库中,供用户直接调用。,例:用C+语言定义函数,实现求两个数中的最大数。int max(int x,int y)int z;if(xy)z=x;elsez=y;return(z);,82,83,FORTRAN语言,最先出现的高级语言(FORmular TRANslation),公式翻译。该语言主要用于科学计算(数值计算)目前使用的工程计算机软件中绝大多数FORTRAN语言编写,典型的结构化程序设计。FORTRAN90以后的版本中增加了强大的图形处理功能及面向对象的编程方式,使它成为目前使用计算机语言中生命力最强的语言,84,BASIC语言(VB),Beginners All-purpose Symbolic Instruction Code,初学者的通用符号指令代码,早期的BASIC语言采用结构化程序设计,以解释方式运行,容易初学者调试掌握,适合初学者学习,目前流行的VB为可视化程序设计,集成开发平台采用事件驱动机制及基于面向对象的设计方法。,85,BASIC语言的发展BASIC语言于1964年问世 作者:John.G.Kemeny 和 Thomos E.Kurtz1、初期的BASIC(第一代)1417个语句,Minimal BASIC;自己操作(输入、运行、修改、输出2、微机BASIC(第二代)Microsoft总裁Bill.Gates编写只有4k字节的解释程序TRS-80 BASIC;Apple BASIC;MSBASIC(BASICA);GWBASIC3、结构化BASIC(第三代)限制GOTO语句,程序模块化True BASIC;Quick BASIC;Turbo BASIC;QBasic(DOS5.0以上)4、面向对象的BASICwindows环境下的Visual BASIC,图形界面,支持多媒体.,86,C与C+语言(VC),美国AT&T(电报与电话)公司为了实现UNIX系统的设计思想而发展起来的语言工具主要特点兼顾了高级语言的特点,简洁、可移植。它可以采用高级语言的设计方法同时也可以通过函数直接对硬件进行操作,因此一般认为它是介于高级语言与机器语言之间的语言。有强大图形支持能力。VC之后的C+为面向对象程序设计的主要代表。,87,Java语言,来源于C+的面向对象的设计语言,特别适合于网络程序的开发,跨平台操作是它的最大特点,“一次编译,到处运行”,它对C+进行了重大我修改使程序更加严谨、可靠目前主要用于动态网页的设计,多用于交互式网络数据库环境中,它的安全机制比VB强大。,88,标记语言和脚本,标记语言(Hyper Text Markup Language)和XML(eXtensible Markup Language,可扩展)是通用的超媒体文档语言,不同与以往的程序设计语言,主要用于网页设计。,脚本语言是将高级语言的部分功能移植于网页设计环境中,使网页设计功能提高的语言体系,目前的主要是VBScript、JAVAScript,89,第三节 程序设计方法,结构化程序设计(2),面向对象的程序设计(1),90,基本结构,结构化设计方法是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块(一个模块可以是一条语句、一段程序、一个函数等),因而可将原来较为复杂的问题化简为一系列简单模块的设计。任何算法都可以通过由程序模块组成的三种基本程序结构的组合顺序结构、选择结构和循环结构来实现。,91,基本思想,结构化程序设计的基本思想是采用“自顶向下,逐步求精”的模块化程序设计原则和“单入口单出口”的控制结构,少用最好不用GOTO语句。,92,结构化程序设计的根本出发点是:为了保证程序设计的质量,应使所设计的程序结构清晰、具有易读性、易理解性、通用性好,易于分工合作编写和调试,而且执行时具有较高的效率。,基本观点,93,进行程序设计时注意:,程序就是一组符合程序设计语言词法、语法和语义规定的计算机指令或语句组成的语句序列。指令序列规定了指令的执行顺序。程序设计语言是全部计算机指令(或语句)的集合。,正确性,可读性,通用性,高效率,94,1、模块化程序结构,(1)模块化 把程序划分为若干个部分,每个部分独立存放、完成一个特定的功能。一个模块可以是一条语句、一段程序、一个函数等(2)目的降低程序的复杂度,使程序便于阅读、调试和维护。(3)基本特征每个模块仅有一个入口和一个出口,95,2、三种基本程序结构,任何复杂的算法都可以通过由程序模块组成的三种基本程序结构实现,(1)顺序结构按程序语句或模块在执行流中的顺序逐个执行(2)选择结构按设定的条件实现程序执行流的多路分支(3)循环结构按给定的条件重复执行指定的程序段或模块,96,(1)顺序结构,程序模块1,程序模块2,新程序模块,2、三种基本程序结构,97,有长10米,宽5米的一块地,地价是每平方米4000元,求总地价,并输出。,!求总地价,并输出integer length,width,area,price write(*,*)输入地块长宽值:read(*,*)length,width area=length*width price=4000*area write(*,*)总地价:,price,元 end,x=10y=5a=x*yb=4000*awrite(*,*)bend,通用性差,特定地块,通用性好,适合任意长宽地块,98,例已知三角形的三条边长a、b和c,求其面积。,,其中S=(a+b+c)/2,算法分析:已知相应的计算公式,则可以根据相应的运算关系,直接进行计算;为了便于进行分析,也可以将计算过程分步进行,如先计算然后再计算面积。,99,program exam1read(*,*)a,b,cs=(a+b+c)/2.0area=sqrt(s(s-a)(s-b)(s-c)write(*,*)a=,a,b=,b,c=,cwrite(*,*)area=,areaend,area=sqrt(s*(s-a)*(s-b)*(s-c),100,2.三种基本程序结构,一路分支:if(表达式),语句序列语句序列可以是一个语句,也可以是复合语句结构。,条件?,语句序列,不成立,成立,101,2、三种基本程序结构,两路分支格式:,if(表达式)语句序列else 语句序列,条件?,语句序列1,语句序列2,成立,不成立,102,2、三种基本程序结构,(3)选择结构之二,多路选择语句格式:switch(整数表达式)case 数值1:语句序列1;.case 数值n:语句序列n;default:语句序列n+1;,计算整型表达式,值=?,模块1,模块2,模块n,103,例已知三个整数A,B,C,输入其值并打印三个数中最大值。解:根据题意设计算法并画程序流程图,如图6-2所示。程序:INTEGER A,B,C,max WRITE(*,“(请输入三个实数:)”)READ(*,*)A,B,C max=A IF(Bmax)max=B IF(Cmax)max=C WRITE(*,100)max 100 FORMAT(1X,max=,I5)END输入:请输入三个实数:12,100,22输出:max=100,104,2.三种基本程序结构,(4)循环结构,当型循环格式:,while(表达式)语句序列/*循环体*/,语句序列,不成立,成立,条件?,105,do 语句序列 while(表达式);,成立,不成立,条件?,语句序列,2.三种基本程序结构,(4)循环结构,直到型循环格式:,106,107,C或C+语言的控制结构,顺序选择(分支)if()else;switch()case;default:;循环while();for(.);do.while(.);出口break;continue;,2.三种基本程序结构,108,例题:验证“哥德巴赫猜想”,问题表述:,任何一个大于等于4的偶数均可以表示为两个素数之和。如:4=2+2 8=3+5,自顶向下、逐步求精,3.结构化程序设计思想,109,第一步 提出问题:,验证哥德巴赫猜想,验证哥德巴赫猜想,X=4,X M?,验证x是否能被分解为两个素数之和,X=X+2,否,是,3.结构化程序设计思想,110,设一上限M,验证从4到M的所有偶数是否能被分解为两个素数之和。1、定义一个变量X,初值为4。2、每次令其加2,并验证X能否 被分解为两个素数之和,直到 X不小于M为止。,第一步 提出问题:,3.结构化程序设计思想,验证哥德巴赫猜想,111,第三步,验证X是否能被分解为两个素数之和,1、从P=2开始;2、判别X-P是否仍为素数:3、若是,打印该偶数的分解式4、否则,若 X-P不是素数,换更大的素数,再继续执行2。如此循环,直到用于检测的素数大于X/2且X 与其之差仍不是素数,则打印“哥德巴赫猜想”不成立。,3.结构化程序设计思想,验证哥德巴赫猜想,112,P=2,PX/2且XP不是素数?,生成下一个素数,是,否,P=x/2?,处理猜想不成立的情况,打印出X的分解情况,是,否,113,第四步,生成下一个素数。,P=P+1,是素数?,P=P+1,否,返回素数 P,是,1)当前素数P加12)判别P是否是素数;3)若是素数,返回P;4)否则,P加1,继续执行2),验证哥德巴赫猜想,3.结构化程序设计思想,114,经过四步分解精化,将“验证哥德巴赫猜想”这个命题已经分解为计算机可以求解的数学模型了。剩下的问题就是编程求解了。如何编程是程序设计课程要解决的问题。,3.结构化程序设计思想,115,面向对象程序设计的基本思想(Object Oriented),面向对象程序设计的基本出发点就是尽可能按照人类认识世界的方法和思维方式来分析和解决问题。对于面向对象来说,它最重要的改进就是把世间万物都描述为对象,而类则描述了同一种对象的特征。在面向对象的方法中,对象是分析、解决问题的核心和最基本的元素,将对象的属性和方法封装成一个整体,供程序设计者使用。对象之间的相互作用通过消息传递来实现。,116,结构化设计存在的问题,*基于功能的设计方法*数据与处理数据的行为或方法(函数)相分离*可复用性差*传统的结构化方法设计的软件维护困难,软件不能真正满足用户的需要。,117,对象(Object),对象是指包含现实世界事物特征的抽象实体,1、面向对象的基本概念,是现实世界的一个具体客观的事物,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体;计算世界中对象是存储器(内存)中一个可标识的区域。,118,属性用于描述对象的状态特征,用数据来表示。不同的对象有不同的属性,用属性值加以区别。,方法用于描述对象的行为特征,是对对象的属性的各种操作,用代码来实现。,对象(Object),119,自行车对象的数据:速度:轮子的转速坐垫高度:升降铃的状态:表示声音,120,学生对象的属性和方法,121,对象、类、消息传递的示例,对象:李艳,实例,抽象,类:教师,人事处向对象发出消息,李艳,调工资到元,方法,抽象,数据值,数据结构,执行的操作,122,面向对象程序设计的特点,抽象(Abstract),封装(Encapsulation),继承(Inheritance),多态性(Polymorphism),123,类与对象基本过程主要特点,124,(1)对象(object),1、类与对象,1)组成客观世界的各种各样的实体2)每个对象有各自的内部属性和操作方法3)每个对象以功能为中心,采用函数来描述4)复合对象:包含其他对象作为其组成部分的对象,125,类是具有相同的属性和操作方法,并遵守相同规则的对象的集合。(表、车、算盘),1)概念,(2)类(Class),1、类与对象,126,1、类与对象,类是对象集合的抽象,规定了这些对象的公共属性(即数据结构)和方法(即操作数据的函数)对象是类的一个实例。例如,学生是一个类,而某个班的某个具体学生则是一个对象。,2)类与对象的关系,(2)类(Class),127,1、类与对象,(2)类(Class),类:具有相同属性和方法的一组对象的集合。类的内部包括属性和方法两个部分。类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实体。所以,一个对象又称作类的一个实例。,128,1、类与对象,(3)消息(message),消息是向某对象请求服务的一种表达方式 对象之间的交互通过发送消息来实现。消息包括:目标对象,请求的方法,参数。,在OOP中,整个程序由一系列相互作用的对象构成,129,1、类与对象,(3)消息(message),消息是对象之间进行通信的一种方式。一条消息需要包含消息的接收者和要求接收者执行某项操作的请求。发送者发送消息,接收者通过调用相应的方法响应消息,这种通信机制称为消息传递。消息传递是对象之间相互联系的唯一途径。消息传递的过程被不断地重复,从而驱动整个程序的运转。,130,2、OOP的基本过程,建立模型(类属性/方法的确定及类之间关系的确定)编程建立类数据类型(属性、方法)用类声明对象,通过对象间传递消息(方法调用)完成预定功能。,分析现实世界问题域,131,3、OOP的基本特征,数据抽象:定义对象的属性和状态代码抽象:定义某类对象的共同行为特征或具有的共同功能,(1)抽象(类)(Abstract),132,抽象是指忽略事物的非本质特征,只注意那些与当前目标有关的本质特征。抽象包括两个方面,一是数据抽象,二是代码抽象。数据抽象定义了对象的属性和状态;代码抽象定义某类对象的共同行为特征或具有的共同功能。例如,在学生成绩管理程序中考查学生对象时,我们只关心学生的班级、学号、成绩等,而学生的身高、体重等信息就可以忽略。,3、OOP的基本特征,(1)抽象(类)(Abstract),133,3、OOP的基本特征,(2)封装(Encapsulation),将数据(属性)和操作数据的过程(方法)绑定在一起,构成一个具有类的类型的对象的描述称为封装。,例如,一个长方体的基本信息可能包含有长、宽、高等,对这些属性的操作行为应包括:获取这些属性的当前值,改变这些属性的当前值等。这样,将描述这些属性的数据和访问这些数据的方法封装在一个对象中,并将其中的数据隐藏起来,不允许外界直接访问,而将其中的方法作为外界访问该对象属性的接口对外开放。,134,使用计算机不需要考虑其中结构是什么?,135,3、OOP的基本特征,(3)继承(Inheritance),类与类之间的层次关系类继承:从现在类派生新类的过程基类(父类):原有的类派生类(子类):自动继承父类的属性和操作,136,3、OOP的基本特征,继承是表示类之间相似性的一种机制。根据继承与被继承的关系,可分为子类和父类,子类又称为派生类,父类也称为基类。一个父类可以派生出若干子类,子类将从父类那里获得所有的属性和方法,并且可以通过继承和改造获得属于自己的一套属性和方法。继承具有传递性,子类又可以派生出下一代子类。继承有效地支持了软件代码的复用。,(3)继承(Inheritance),137,例如,在一个学校管理系统中,我们将“人”作为父类,具有姓名、性别等通用属性和方法,而教师和学生类可作为子类从人类继承,学生类除了具有人类所有的属性和方法外,还可具有学号、成绩等自己的属性和方法;同时学生类又可以作为父类进一步派生本科生和研究生类。,3、OOP的基本特征,(3)继承(Inheritance),138,生物类,人类,139,3.OOP的基本特征,(4)多态性(Polymorphism),对于简单的任务,面向对象会显得比较麻烦;而对于大的任务及构造开发平台,这种封装及其他优势为软件重用提供了绝好的手段。,多态性是指允许不同类的对象对同一消息做出响应。也就是当同样的消息被不同的对象接收时,却导致完全不同的行为。,目的:基类和派生类中使用同样的函数名来定义不同的操作,140,例如同样的加法,把两个时间加在一起和把两个整数加在一起的内涵肯定完全不同。但是如果把它们作为不同类的对象,进行对象的相加运算,就可以实现“一个接口,多种方法”。,3.OOP的基本特征,(4)多态性(Polymorphism),141,第四节 算法数据结构与VB设计,算法,数据结构,程序设计基础介绍,142,求100!算法如下:S1:使t=1 S2:使i=2 S3:使ti,乘积仍然放在变量t中,可表示为tit S4:使i的值加1,即i+1i S5:如果i100,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。,广义地说,为解决一个问题而采取的方法和步骤,都称之为算法。,计算机解决问题的方法和步骤,就是计算机的算法。,计算机算法可分为两大类:数值运算算法和非数值运算算法。,143,算法并不给出问题的精确的解,只是说明怎样才能得到解,144,算术运算,关系运算,逻辑运算,数据传送,145,各操作之间的执行顺序为算法的控制结构,顺序结构,选择结构,循环结构,146,有穷性:指算法应当是有限操作步骤内完成,不能是无限的确定性:算法中的每一步骤都是确定的