新版第4章计算机程序设计与语言_第1页
新版第4章计算机程序设计与语言_第2页
新版第4章计算机程序设计与语言_第3页
新版第4章计算机程序设计与语言_第4页
新版第4章计算机程序设计与语言_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 计算机程序设计与语言计算机程序设计与语言程序设计的基本概念程序设计的基本概念模型的建立、算法的设计和表达模型的建立、算法的设计和表达程序的编写、测试和维护程序的编写、测试和维护程序文档的建立程序文档的建立程序设计语言的应用程序设计语言的应用4.1 概述概述4.1.1 计算机程序计算机程序4.1.2 程序设计程序设计语言语言4.1.3 程序设计程序设计步骤步骤4.1.1 计算机程序计算机程序程序是计算机执行任何操作的驱动力,是计算机程序是计算机执行任何操作的驱动力,是计算机为完成某一任务所必须执行的一系列指令。没有程为完成某一任务所必须执行的一系列指令。没有程序,计算机就像原地待命的

2、士兵,什么也不会做。序,计算机就像原地待命的士兵,什么也不会做。从存储的角度来看,程序就是保存在磁盘上的指从存储的角度来看,程序就是保存在磁盘上的指令序列。令序列。除了少量特殊程序外,程序在没有启动时大多以除了少量特殊程序外,程序在没有启动时大多以文件的形式存储在磁盘等外存储器上。文件的形式存储在磁盘等外存储器上。4.1.2 程序设计程序设计语言语言计算机语言是人与计算机之间传递信息的媒介。计算机语言是人与计算机之间传递信息的媒介。为了使计算机进行各种工作,必须将人们的意图为了使计算机进行各种工作,必须将人们的意图用计算机语言告诉计算机。电脑做的每个动作、用计算机语言告诉计算机。电脑做的每个动

3、作、执行的每个步骤,都是按照用计算机语言编好的执行的每个步骤,都是按照用计算机语言编好的程序来执行的,所以,要控制计算机就必须通过程序来执行的,所以,要控制计算机就必须通过计算机语言向计算机发出命令。计算机语言向计算机发出命令。自从有了计算机,计算机程序设计语言就出现了,自从有了计算机,计算机程序设计语言就出现了,人们针对不同的应用领域开发出了上千种编程语人们针对不同的应用领域开发出了上千种编程语言。言。4.1.2 程序设计程序设计语言语言 计算机语言的发展经历了机器语言、汇编语言和高级语计算机语言的发展经历了机器语言、汇编语言和高级语言三个阶段。言三个阶段。机器语言是计算机能直接执行的二进制

4、形式的语言。机器语言是计算机能直接执行的二进制形式的语言。汇编语言的实质和机器语言是相同的,都是直接对硬件操汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。忆。高级语言更接近自然语言和数学语言,和汇编语言相比,高级语言更接近自然语言和数学语言,和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,如使用堆栈、寄与具体操作有关但与完成工作无关的细节,如使用堆栈、寄存器等,这样就大大简化

5、了程序中的指令,使程序员可以离存器等,这样就大大简化了程序中的指令,使程序员可以离开机器层次,在更抽象的层次上表达意图,以接近问题本质开机器层次,在更抽象的层次上表达意图,以接近问题本质的方式去思考和描述问题。的方式去思考和描述问题。4.1.2 程序设计程序设计语言语言高级语言所编制的程序不能直接被计算机识别,必须经高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。过转换才能被执行。高级语言并不是特指某种具体的语言,而是包括了很多高级语言并不是特指某种具体的语言,而是包括了很多种编程语言,如目前流行的种编程语言,如目前流行的VB、C+、Java、Perl 等,等,这些语言的语法

6、、命令格式都各不相同。这些语言的语法、命令格式都各不相同。高级语言的发展也经历了从早期语言到结构化程序设计高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到面向对象程序设计语言的过程。相应语言,从面向过程到面向对象程序设计语言的过程。相应地,软件的开发也由最初的个体手工作坊式的生产,发展地,软件的开发也由最初的个体手工作坊式的生产,发展为产业化、流水线式的工业化生产。为产业化、流水线式的工业化生产。高级语言的下一个发展目标是面向应用,只需要告诉程高级语言的下一个发展目标是面向应用,只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,序你要干什么,程序就能自动生成算法,

7、自动进行处理,也就是智能化的程序设计语言。也就是智能化的程序设计语言。4.1.3 程序设计程序设计步骤步骤(1)建立模型:从实际问题抽象出数学模型,即由物理模)建立模型:从实际问题抽象出数学模型,即由物理模型到抽象模型,用形式化方法描述现实世界。型到抽象模型,用形式化方法描述现实世界。(2)算法设计:给出解决问题的方法和步骤,即算法。同)算法设计:给出解决问题的方法和步骤,即算法。同一个问题可以有不同的解决办法,从中选取一种最合适的。一个问题可以有不同的解决办法,从中选取一种最合适的。(3)算法表达:选择一种或几种表达算法的工具,对算法)算法表达:选择一种或几种表达算法的工具,对算法进行清晰的

8、表达。进行清晰的表达。(4)编写程序:选择程序设计语言,把算法程序化。)编写程序:选择程序设计语言,把算法程序化。(5)程序测试和调试:对编写好的程序进行测试,修改程)程序测试和调试:对编写好的程序进行测试,修改程序中的错误。序中的错误。(6)程序文档编写与程序维护:整理和编写程序文档,以)程序文档编写与程序维护:整理和编写程序文档,以便更好地维护程序。便更好地维护程序。鸡兔同笼问题鸡兔同笼问题 鸡兔同笼,看头鸡兔同笼,看头36个,看脚个,看脚96只,问笼中有只,问笼中有鸡和兔各几只?鸡和兔各几只? 4.2.1 建立模型建立模型4.2.2 算法设计算法设计4.2.3 算法表达算法表达4.2.1

9、 建立模型建立模型模型是对现实系统的一种描述,是对现实系统的模型是对现实系统的一种描述,是对现实系统的抽象和简化。抽象和简化。模型由现实系统的有关元素组成,能够反映这些模型由现实系统的有关元素组成,能够反映这些元素之间的关系,从而反映现实系统的本质。元素之间的关系,从而反映现实系统的本质。模型分为物理模型和数学模型两大类。模型分为物理模型和数学模型两大类。u物理模型由物理元素构成,又称为形象模型。物理模型由物理元素构成,又称为形象模型。u数学模型由关系、函数等数学对象符号组成,又称数学模型由关系、函数等数学对象符号组成,又称为逻辑模型或抽象模型。为逻辑模型或抽象模型。4.2.1 建立模型建立模

10、型物理模型的建立:对客观存在的事物进行形象的物理模型的建立:对客观存在的事物进行形象的描述,列出已知的所有物理元素及其关系,明确需描述,列出已知的所有物理元素及其关系,明确需要解决的问题。物理模型中应该忽略对解决问题没要解决的问题。物理模型中应该忽略对解决问题没有意义的客观事实,如鸡、兔的大小,笼子的大小有意义的客观事实,如鸡、兔的大小,笼子的大小等。等。数学模型的建立:在物理模型的基础上,忽略不数学模型的建立:在物理模型的基础上,忽略不重要的细节(如在一个笼子里这个事实与要解决的重要的细节(如在一个笼子里这个事实与要解决的问题无关),抓住本质性的元素,对其符号化后,问题无关),抓住本质性的元

11、素,对其符号化后,再用数学的方法描述出来。再用数学的方法描述出来。4.2.1 建立模型建立模型模型是对现实系统的一种描述,是对现实系统的模型是对现实系统的一种描述,是对现实系统的抽象和简化。抽象和简化。模型由现实系统的有关元素组成,能够反映这些模型由现实系统的有关元素组成,能够反映这些元素之间的关系,从而反映现实系统的本质。元素之间的关系,从而反映现实系统的本质。模型分为物理模型和数学模型两大类。模型分为物理模型和数学模型两大类。u物理模型由物理元素构成,又称为形象模型。物理模型由物理元素构成,又称为形象模型。u数学模型由关系、函数等数学对象符号组成,又称数学模型由关系、函数等数学对象符号组成

12、,又称为逻辑模型或抽象模型。为逻辑模型或抽象模型。鸡兔同笼问题的物理模型鸡兔同笼问题的物理模型 鸡、兔放在同一笼子里,头有鸡、兔放在同一笼子里,头有36个,脚有个,脚有96只,要计算出有鸡和兔子各多少只。当然,要解只,要计算出有鸡和兔子各多少只。当然,要解决这个问题还要用到大家已熟知的事实:每只鸡决这个问题还要用到大家已熟知的事实:每只鸡是是1个头个头2只脚,每只兔子是只脚,每只兔子是1个头个头4只脚。只脚。 鸡兔同笼问题的数学模型鸡兔同笼问题的数学模型对以上例子,设鸡为对以上例子,设鸡为x只,兔子为只,兔子为y只,则有:只,则有:4.2.2 算法设计算法设计 算法是解决问题的方法和步骤。若待

13、解决的算法是解决问题的方法和步骤。若待解决的问题比较复杂,可能需要将问题进行分解,即将问题比较复杂,可能需要将问题进行分解,即将复杂问题分解为简单问题的集合。简单问题对应复杂问题分解为简单问题的集合。简单问题对应的算法较简单,设计起来也就比较容易。这里讲的算法较简单,设计起来也就比较容易。这里讲的算法设计,涉及程序功能的设计和数据结构的的算法设计,涉及程序功能的设计和数据结构的设计等。设计等。鸡兔同笼问题的鸡兔同笼问题的算法设计算法设计鸡兔同笼问题实际上是求二元一次方程组的解的鸡兔同笼问题实际上是求二元一次方程组的解的问题,可以用加减消元法解决。问题,可以用加减消元法解决。考虑到算法的通用性,

14、我们可以对一般二元一次考虑到算法的通用性,我们可以对一般二元一次方程组求解。方程组求解。鸡兔同笼问题的鸡兔同笼问题的算法设计算法设计若若a1b2-a2b1 0,方程组有唯一解。用加,方程组有唯一解。用加减消元法求得减消元法求得鸡兔同笼问题的鸡兔同笼问题的算法设计算法设计(1)输入系数)输入系数a1,b1,c1,a2,b2,c2;(2)计算)计算d = a1b2 - a2b1;(3)如果)如果d = 0,打印,打印“方程组无解或有无穷组解方程组无解或有无穷组解”,转,转 (7) ;(4)计算)计算x = (c1b2 - c2b1) /d;(5)计算)计算y = (a1c2 - a2c1) /d;

15、(6)输出)输出x,y;(7)输入是否继续解其他方程组的标记)输入是否继续解其他方程组的标记s (s = “Y”或或s =“N” ) ;(8)如果)如果s = “Y”,转,转 (1) ;(9)结束。)结束。算法的评价算法的评价对于同一个问题,可能有若干种不同的算法来解决。对于同一个问题,可能有若干种不同的算法来解决。对于算法评价的基本的标准有两个:对于算法评价的基本的标准有两个:u时间标准(时间复杂度),简单说来,即执行这个算法需要时间标准(时间复杂度),简单说来,即执行这个算法需要多少时间,基本的原则是时间越短越好。对于同样的问题,多少时间,基本的原则是时间越短越好。对于同样的问题,如果用算

16、法如果用算法A和和B分别进行处理,结果算法分别进行处理,结果算法A所用的时间更所用的时间更短,那么就认为算法短,那么就认为算法A更好一些。更好一些。u空间标准(空间复杂度),即执行这个算法需要占用多少资空间标准(空间复杂度),即执行这个算法需要占用多少资源(可以理解为占用了多少计算机存储单元),基本的原则源(可以理解为占用了多少计算机存储单元),基本的原则是占用的资源越少越好。对于同样的问题,如果用算法是占用的资源越少越好。对于同样的问题,如果用算法A和和B分别进行处理,结果算法分别进行处理,结果算法A占用的资源更少,那么就认为占用的资源更少,那么就认为算法算法A更好一些。更好一些。算法的评价

17、算法的评价 随着计算机技术的发展,硬件性能不断提高,随着计算机技术的发展,硬件性能不断提高,程序的规模越来越庞大,算法的清晰程度变成了程序的规模越来越庞大,算法的清晰程度变成了一个非常重要的问题。对于一个比较复杂的问题一个非常重要的问题。对于一个比较复杂的问题来说,如果所给出的算法让人无法读懂,那么它来说,如果所给出的算法让人无法读懂,那么它也不能算是一个好的算法,因为按照这样的算法也不能算是一个好的算法,因为按照这样的算法所编制出来的程序非常难以维护。因此,算法的所编制出来的程序非常难以维护。因此,算法的易懂性也是衡量算法好坏的一个重要指标。易懂性也是衡量算法好坏的一个重要指标。算法的评价算

18、法的评价设计算法时,还要注意以下几点:设计算法时,还要注意以下几点:u通用性。一个算法总是针对某类问题设计的,所以对于求解通用性。一个算法总是针对某类问题设计的,所以对于求解某类问题中的任何一个问题应该是有效的。例如,上面给出某类问题中的任何一个问题应该是有效的。例如,上面给出的解二元一次方程组的算法就有一定的通用性。的解二元一次方程组的算法就有一定的通用性。u确定性。算法中的每个步骤都是确定的,在什么情况下做什确定性。算法中的每个步骤都是确定的,在什么情况下做什么也非常明确,没有含糊不清的地方。么也非常明确,没有含糊不清的地方。u有限性。一个算法在执行时,必须经过有限步后停下来,结有限性。一

19、个算法在执行时,必须经过有限步后停下来,结束算法执行,给出结果,而不能无限地执行下去。尽管这里束算法执行,给出结果,而不能无限地执行下去。尽管这里所说的有限步可能是几十步或者几百步,也可能是几万步或所说的有限步可能是几十步或者几百步,也可能是几万步或者几亿步,但它仍然是有限步者几亿步,但它仍然是有限步 (严格说来,这里所说的(严格说来,这里所说的“有有限限”只是说明了它和只是说明了它和“无限无限”的区别。在实际工作中还有一的区别。在实际工作中还有一个更严格的限制,即实际工作所要求的时间的限制。算法和个更严格的限制,即实际工作所要求的时间的限制。算法和根据算法所编制的程序,必须在实际工作所规定的

20、时间内给根据算法所编制的程序,必须在实际工作所规定的时间内给出相应的运算结果)。出相应的运算结果)。4.2.3 算法表达算法表达为了提高算法表达的清晰程度,需要选择一种合为了提高算法表达的清晰程度,需要选择一种合适的描述算法的工具。常用的描述工具有流程图、适的描述算法的工具。常用的描述工具有流程图、N-S图、图、PAD图和伪码等。图和伪码等。这些工具不是程序设计语言,不能直接被计算机这些工具不是程序设计语言,不能直接被计算机执行,使用它们的目的就是把算法表述出来。执行,使用它们的目的就是把算法表述出来。流程图流程图 流程图(也称为程序流程图)是最常用的一种算法表示方流程图(也称为程序流程图)是

21、最常用的一种算法表示方法,它是描述计算机按一定步骤完成任务的图表,能直观法,它是描述计算机按一定步骤完成任务的图表,能直观地描述程序执行的控制流程。流程图中地描述程序执行的控制流程。流程图中u 方框表示方框表示“处理处理”,所有处理步骤都可以用这个符号表示;,所有处理步骤都可以用这个符号表示;u 菱形框表示菱形框表示“判断判断”,需要对逻辑条件进行判断并选择下,需要对逻辑条件进行判断并选择下一步执行的路线时用这个符号表示;一步执行的路线时用这个符号表示;u 圆角矩形框表示圆角矩形框表示“开始开始”和和“结束结束”;u 平行四边形框表示平行四边形框表示“输入输入”和和“输出输出”;u 有向线段表

22、示有向线段表示“控制流控制流”。鸡鸡兔兔同同笼笼问问题题的的流流程程图图伪码伪码伪码表示法相当于算法的注释系统,由编程语言和自然语伪码表示法相当于算法的注释系统,由编程语言和自然语言混合而成。言混合而成。伪码的语法通常沿用某种高级编程语言的语法规则,如关伪码的语法通常沿用某种高级编程语言的语法规则,如关键字、控制结构等。另外,在描述程序的处理功能时使用键字、控制结构等。另外,在描述程序的处理功能时使用自然语言的语句。自然语言的语句。所以伪码表示法是一种类高级编程语言,但它含有大量的所以伪码表示法是一种类高级编程语言,但它含有大量的自然语言的语句,计算机并不能执行。用自然语言描述处自然语言的语句

23、,计算机并不能执行。用自然语言描述处理功能,易读易写,不必考虑语法规定,有利于设计人员理功能,易读易写,不必考虑语法规定,有利于设计人员把精力放在描述算法的逻辑上。把精力放在描述算法的逻辑上。 鸡鸡兔兔同同笼笼问问题题的的伪伪码码表表示示PROCEDURE求解二元一次方程组求解二元一次方程组 TYPE a1,b1,c1,a2,b2,c2,x,y IS REAL TYPE s IS CHAR DO WHILE TRUE /*输入方程组系数输入方程组系数 READ a1,b1,c1,a2,b2,c2 d=a1*b2-a2*b1 IF d = 0 THEN WRITE 方程组无解或有无穷组解方程组无

24、解或有无穷组解 ELSE /*求方程组的唯一解并输出求方程组的唯一解并输出 BEGIN x=(c1*b2-c2*b1)/d y=(a1*c2-a2*c1)/d WRITE x, y END ENDIF /*控制循环是否结束控制循环是否结束 INPUT 若继续循环输入若继续循环输入Y,否则输入,否则输入N TO s READ S IF sY THEN EXIT ENDIF ENDDOEND 4.3 程序设计实现程序设计实现4.3.1 程序举例程序举例4.3.2 编写程序编写程序4.3.1 程序举例程序举例 鸡兔同笼问题的鸡兔同笼问题的VFP程序实现程序实现DO WHILE .T. CLEAR &

25、 清屏清屏 ? 输入方程组的系数输入方程组的系数 INPUT a1= TO a1 INPUT b1= TO b1 INPUT c1= TO c1 INPUT a2= TO a2 INPUT b2= TO b2 INPUT c2= TO c2 d=a1*b2-a2*b1 IF d=0 ? 方程组无解或有无穷组解方程组无解或有无穷组解 ELSE *求方程组的唯一解并输出求方程组的唯一解并输出 x=(c1*b2-c2*b1)/d y=(a1*c2-a2*c1)/d ? 鸡为鸡为,x,只只, 兔为兔为,y,只只 ENDIF *控制循环是否结束控制循环是否结束 INPUT 若继续循环输入若继续循环输入Y

26、,否则输入,否则输入N TO s IF upper(s)Y EXIT ENDIFENDDORETURN 4.3.2 编写程序编写程序 程序的编写就是用程序设计语言实现算法的程序的编写就是用程序设计语言实现算法的过程。程序编写人员应该根据算法的要求,选择过程。程序编写人员应该根据算法的要求,选择一种程序设计语言对算法进行编码。对程序设计一种程序设计语言对算法进行编码。对程序设计语言,必须要深刻地理解,熟练地掌握,语言,必须要深刻地理解,熟练地掌握, 正确地正确地运用,这样才能编出高质量的程序代码。运用,这样才能编出高质量的程序代码。4.3.2 编写程序编写程序 编写程序的基本要求:首先是保证语法

27、的正编写程序的基本要求:首先是保证语法的正确性。只有语法正确的程序才能通过编译系统的确性。只有语法正确的程序才能通过编译系统的语法检查。其次是保证语义的正确性,也就是通语法检查。其次是保证语义的正确性,也就是通过运行程序,得到需要的正确结果。但这一点对过运行程序,得到需要的正确结果。但这一点对一个复杂的程序来说并不容易,通常需要经过程一个复杂的程序来说并不容易,通常需要经过程序测试和修改才能达到序测试和修改才能达到。4.3.2 编写程序编写程序 只做到以上两点还称不上高质量的程序代码,只做到以上两点还称不上高质量的程序代码,高质量的程序还应体现在以下四个方面:可靠性高质量的程序还应体现在以下四

28、个方面:可靠性高、运行速度快、占用存储空间小和易懂性。高、运行速度快、占用存储空间小和易懂性。 通常这四个方面不能同时满足,要根据具体通常这四个方面不能同时满足,要根据具体情况权衡利弊。情况权衡利弊。4.3.2 编写程序编写程序 在计算机速度越来越快,内存越来越大的今在计算机速度越来越快,内存越来越大的今天,程序的易懂性显得更为重要。这是因为一个天,程序的易懂性显得更为重要。这是因为一个程序除了能在计算机上运行外,还要求人能够看程序除了能在计算机上运行外,还要求人能够看懂。只有看懂程序,才能对程序中出现的问题进懂。只有看懂程序,才能对程序中出现的问题进行修改,才能根据需要扩充其功能和改善其性能

29、。行修改,才能根据需要扩充其功能和改善其性能。4.3.2 编写程序编写程序 编写容易读懂的程序代码,要求程序有良好的编写容易读懂的程序代码,要求程序有良好的结构性和程序设计风格。结构性和程序设计风格。 所谓程序有良好的结构性是指程序仅由三种基所谓程序有良好的结构性是指程序仅由三种基本的控制结构构造出来。本的控制结构构造出来。u顺序控制结构顺序控制结构u选择控制结构选择控制结构u重复控制结构重复控制结构 所谓良好的程序设计风格,是要求编写的程序所谓良好的程序设计风格,是要求编写的程序清晰明了,容易被人理解。清晰明了,容易被人理解。顺序控制结构顺序控制结构顺序控制结构含顺序控制结构含有多个连续的步

30、骤,有多个连续的步骤,如右图所示。如右图所示。在此控制结构中在此控制结构中的的A和和B是顺序执是顺序执行的。顺序控制结行的。顺序控制结构是最简单的一种构是最简单的一种基本结构。基本结构。选择控制结构选择控制结构 选择控制结构也称选择控制结构也称为分支结构,计算机为分支结构,计算机根据所列条件选择执根据所列条件选择执行路径,如右图所示。行路径,如右图所示。在此控制结构中有在此控制结构中有一个判断框,它只能一个判断框,它只能有两个分支,根据条有两个分支,根据条件件P 是否满足而分别是否满足而分别执行执行A或或B。重复控制结构重复控制结构重复控制结构又称循环结构,可以重复执行一条重复控制结构又称循环

31、结构,可以重复执行一条或多条指令,直到满足退出条件。或多条指令,直到满足退出条件。重复控制结构主要有以下两种:重复控制结构主要有以下两种:u当型(当型(WHILE DO型)循环结构型)循环结构u直到型(直到型(UNTIL型)循环结构型)循环结构当型(当型(WHILE DO型)循环结构型)循环结构 当条件当条件P满满足时,反复执行足时,反复执行A。一旦条件。一旦条件P不满足就不再执不满足就不再执行行A,而执行它,而执行它下面的操作。如下面的操作。如果在开始时条件果在开始时条件P就不满足,则就不满足,则A一次也不执行。一次也不执行。直到型(直到型(UNTIL型)循环结构型)循环结构 先执行先执行A

32、,然,然后判断条件后判断条件P是否是否满足,如条件满足,如条件P不不满足,则反复执行满足,则反复执行A,直到某一时刻,直到某一时刻,条件条件P满足则停止满足则停止循环,执行下面的循环,执行下面的操作。可以看到,操作。可以看到,不论条件不论条件P是否满是否满足,至少执行一次足,至少执行一次A。这三种基本控制结构的共同特点这三种基本控制结构的共同特点(1)只有一个入口,如图)只有一个入口,如图4-2至图至图4-5中的中的a点。点。(2)只有一个出口,如图)只有一个出口,如图4-2至图至图4-5中的中的b点。点。(3)结构内的每一部分都有机会被执行到。)结构内的每一部分都有机会被执行到。(4)结构内

33、没有死循环(无终止的循环)。)结构内没有死循环(无终止的循环)。 尽管在表达形式上不完全一样,但各种编程尽管在表达形式上不完全一样,但各种编程语言都提供了对三种基本控制结构的支持。语言都提供了对三种基本控制结构的支持。不满足基本要求的两种情况不满足基本要求的两种情况B永远执行不到永远执行不到死循环死循环良好的程序设计风格良好的程序设计风格1)文档化()文档化(documentation)要有效、适当地使用注释。注释语句是每种程序设计语言都要提供要有效、适当地使用注释。注释语句是每种程序设计语言都要提供的语句。注释语句对程序的执行结果没有影响,是用来帮助读程序的语句。注释语句对程序的执行结果没有

34、影响,是用来帮助读程序的人理解程序的。一些规范的程序中,注释行的数量占到整个源程的人理解程序的。一些规范的程序中,注释行的数量占到整个源程序的序的1/3到到1/2,甚至更多。在程序的开头可以添加对程序整体进,甚至更多。在程序的开头可以添加对程序整体进行说明的注释;在程序模块(如子程序、函数、过程等)行说明的注释;在程序模块(如子程序、函数、过程等) 前添加解前添加解释该模块作用的注释;在较难理解的语句前添加解释该语句的注释。释该模块作用的注释;在较难理解的语句前添加解释该语句的注释。要使用含义明确的符号名。符号名包括子程序名、函数名、变量名、要使用含义明确的符号名。符号名包括子程序名、函数名、

35、变量名、常量名等。这些名字应能反映它所代表的实际东西,有实际意义,常量名等。这些名字应能反映它所代表的实际东西,有实际意义,使其能见名知意。例如,表示总量用使其能见名知意。例如,表示总量用Total,表示平均值用,表示平均值用Average,表示和用,表示和用Sum,等等。,等等。良好的程序设计风格良好的程序设计风格2)格式化()格式化(layout)尽量使程序布局合理、清晰、明了。一个程序如果写尽量使程序布局合理、清晰、明了。一个程序如果写得太密,没有留出空白,往往是很难读懂的。恰当地利得太密,没有留出空白,往往是很难读懂的。恰当地利用空格、空行和缩进可使程序清晰明了。用空格、空行和缩进可使

36、程序清晰明了。自然程序段之间用空行分开。缩进也称为向右缩格或自然程序段之间用空行分开。缩进也称为向右缩格或移行。程序中的各行不必左对齐,因为这样做的话程序移行。程序中的各行不必左对齐,因为这样做的话程序的层次关系就分不清了。对于选择语句和循环语句,应的层次关系就分不清了。对于选择语句和循环语句,应该把其中的程序段语句向右做阶梯式移行。格式化可使该把其中的程序段语句向右做阶梯式移行。格式化可使程序的逻辑结构更加清晰,层次更加分明。程序的逻辑结构更加清晰,层次更加分明。良好的程序设计风格良好的程序设计风格3)模块化()模块化(modularization) 把复杂的程序分解为功能独立的程序模块,把

37、复杂的程序分解为功能独立的程序模块,每一个程序模块只完成一个独立的功能,尽量每一个程序模块只完成一个独立的功能,尽量减少模块之间的联系。这样,当我们读一个复减少模块之间的联系。这样,当我们读一个复杂的程序时,只要分别去读懂各个简单的功能杂的程序时,只要分别去读懂各个简单的功能模块即可。模块即可。4.4 程序的测试、调试与维护程序的测试、调试与维护4.4.1 程序测试程序测试4.4.2 程序调试程序调试 4.4.3 程序维护程序维护4.4.1 程序测试程序测试程序测试是为了发现程序错误而执行程序的过程。程序测试是为了发现程序错误而执行程序的过程。测试时需要选择测试数据作为输入,运行程序后测试时需

38、要选择测试数据作为输入,运行程序后看是否会输出预期的结果。看是否会输出预期的结果。如果没有产生正确的结果,则程序员必须查找并如果没有产生正确的结果,则程序员必须查找并修改程序中的错误,然后再测试修改后的程序,修改程序中的错误,然后再测试修改后的程序,可能要经过多次反复,才能得出正确的结果。可能要经过多次反复,才能得出正确的结果。4.4.1 程序测试程序测试对于一组测试数据,即使程序产生了正确的结果,对于一组测试数据,即使程序产生了正确的结果,也还不能立即断定程序是正确的,因为还不能保也还不能立即断定程序是正确的,因为还不能保证输入其他的数据时,程序会产生正确结果。证输入其他的数据时,程序会产生

39、正确结果。但是这个但是这个“所有可能的数据所有可能的数据”集合一般是非常大集合一般是非常大的,可能是几十亿个数据甚至更多,都测试一遍的,可能是几十亿个数据甚至更多,都测试一遍是不现实的,所以要求我们根据某些原则选择有是不现实的,所以要求我们根据某些原则选择有代表性的测试数据进行测试,以相对较少的测试代表性的测试数据进行测试,以相对较少的测试次数发现程序中的错误次数发现程序中的错误黑盒测试法黑盒测试法 把程序看成一个把程序看成一个“黑盒子黑盒子”,测试人员完全不,测试人员完全不考虑程序的内部结构和处理过程,只考虑程序的考虑程序的内部结构和处理过程,只考虑程序的功能,通过选择一些测试数据,看程序的

40、功能是功能,通过选择一些测试数据,看程序的功能是否都已实现否都已实现。黑盒测试的测试数据选择(鸡兔同笼问题)黑盒测试的测试数据选择(鸡兔同笼问题)把输入的二元一次方程组的系数分为以下四类,每一类设计一个测试用例。把输入的二元一次方程组的系数分为以下四类,每一类设计一个测试用例。合理的系数:合理的系数:(1)方程组有唯一解:)方程组有唯一解: a1 = 1,b1 = 1,c1 = 1,a2 = 0,b2 = 1,c2 = 2(2)方程组无解:)方程组无解: a1 = 1,b1 = 1,c1 = 1,a2 = 1,b2 = 1,c2 = 2(3)方程组有无穷组解:)方程组有无穷组解: a1 = 1

41、,b1 = 1,c1 = 1,a2 = 2,b2 = 2,c2 = 2不合理的系数:不合理的系数:(4)输入的不全是数值:)输入的不全是数值: a1 = a,b1 = 5,c1 = 0,a2 = 6,b2 = 8,c2 = 7选择合理的输入数据验证程序的功能、性能是否符合设计的要求。选择合理的输入数据验证程序的功能、性能是否符合设计的要求。选择不合理的输入数据对程序进行测试也非常重要,这是对程序可靠性的考选择不合理的输入数据对程序进行测试也非常重要,这是对程序可靠性的考验。验。白测试的测试数据选择(鸡兔同笼问题)白测试的测试数据选择(鸡兔同笼问题) 为了让程序中的每条语句至少执行一次,使每个判

42、断条为了让程序中的每条语句至少执行一次,使每个判断条件取一次件取一次“真真”或取一次或取一次“假假”,选择如下测试用例:,选择如下测试用例:(1)d = 0,s =“ Y”: a1 = 1,b1 = 1,c1 = 1,a2 = 2,b2 = 2,c2 = 2, s =“ Y”(2)d 0,s =“ N”: a1 = 1,b1 = 0,c1 = 1,a2 = 0,b2 = 1,c2 = 2, s =“ N” 这两个例子测试后,使得程序中的每条语句至少执行了这两个例子测试后,使得程序中的每条语句至少执行了一次,每个判断条件分别取了一次一次,每个判断条件分别取了一次“真真”和一次和一次“假假”。测试

43、的步骤测试的步骤一个复杂的程序往往由若干个子程序模块组成,要保证一个复杂的程序往往由若干个子程序模块组成,要保证程序整体的正确性,不仅需要各个模块是正确的,还要求程序整体的正确性,不仅需要各个模块是正确的,还要求各模块之间的接口是正确的。测试工作要制定出测试规划,各模块之间的接口是正确的。测试工作要制定出测试规划,包括测试的步骤、范围、进度和所用的资源(硬件、软件)包括测试的步骤、范围、进度和所用的资源(硬件、软件)等。等。测试工作先对每个模块进行测试,一般采用白盒测试法测试工作先对每个模块进行测试,一般采用白盒测试法保证每个程序模块内部的正确性,然后再把测试后的模块保证每个程序模块内部的正确

44、性,然后再把测试后的模块组装在一起进行整体测试,主要测试各模块是否能正常配组装在一起进行整体测试,主要测试各模块是否能正常配合工作,方法多采用黑盒测试法。对模块的接口进行测试,合工作,方法多采用黑盒测试法。对模块的接口进行测试,适当辅以白盒测试法,以便对主要执行路径进行测试。适当辅以白盒测试法,以便对主要执行路径进行测试。 4.4.2 程序调试程序调试 调试的任务是进一步诊断和改正程序中的错误(调试的任务是进一步诊断和改正程序中的错误( 一般是一般是测试时发现的错误),它是在完成了测试之后进行的。测试时发现的错误),它是在完成了测试之后进行的。调试活动首先确定程序中可疑错误的确切性质和位置,调

45、试活动首先确定程序中可疑错误的确切性质和位置,然后对程序(设计、编码)进行修改,排除错误。然后对程序(设计、编码)进行修改,排除错误。调试工作是一个具有很强技巧性的工作。软件运行失效调试工作是一个具有很强技巧性的工作。软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现或出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系,要找出真正的原因,与内在原因之间常常没有明显的联系,要找出真正的原因,排除潜在的错误,不是一件易事。排除潜在的错误,不是一件易事。可以说,调试是通过现象找出原因的分析过程。可以说,调试是通过现象找出原因的分析过程。 调试步骤调试步骤(1

46、)对测试发现的错误现象进行分析,确定程序)对测试发现的错误现象进行分析,确定程序中的出错位置;中的出错位置;(2)研究有关部分的程序,找出错误的内在原因)研究有关部分的程序,找出错误的内在原因(有的错误不一定是编码错误,可能是设计错(有的错误不一定是编码错误,可能是设计错误);误);(3)修改设计或代码,以排除这个错误;)修改设计或代码,以排除这个错误;(4)重复进行暴露了这个错误的原始测试和其他)重复进行暴露了这个错误的原始测试和其他有关测试。有关测试。 调试步骤调试步骤当在程序中发现一个错误时,它可能是语法错误,也可能是语义错误。当在程序中发现一个错误时,它可能是语法错误,也可能是语义错误

47、。语法错误是由于指令没有按照程序设计语言的语法规则编写所致。例如,语法错误是由于指令没有按照程序设计语言的语法规则编写所致。例如,要打印一个消息时,需要使用要打印一个消息时,需要使用PRINT命令字。命令命令字。命令IF AGE = 16 THEN You can drive.将产生语法错误,因为少了命令字将产生语法错误,因为少了命令字PRINT。正确的写法是正确的写法是IF AGE = 16 THEN PRINT You can drive.。在编译执行的系统中,编译时就能检查出语法错误。在解释执行的系统在编译执行的系统中,编译时就能检查出语法错误。在解释执行的系统中,执行到语法错误的语句时

48、输出错误信息。语法错误是比较容易发现和中,执行到语法错误的语句时输出错误信息。语法错误是比较容易发现和纠正的。纠正的。语义错误是编写的程序虽然能运行,但不能输出正确的结果。出错的原语义错误是编写的程序虽然能运行,但不能输出正确的结果。出错的原因可能是多方面的,模型的建立、算法的设计和表达、编码各个过程都可因可能是多方面的,模型的建立、算法的设计和表达、编码各个过程都可能出错,语义错误比语法错误更难检查、修改。例如,把能出错,语义错误比语法错误更难检查、修改。例如,把IF A = 100 THEN PRINT A中的中的“”写成了写成了“”,就属于语义方面的错误。,就属于语义方面的错误。 4.4

49、.3 程序维护程序维护通常把程序的修改称为程序维护。程序维护一般有三种类型通常把程序的修改称为程序维护。程序维护一般有三种类型u改正性维护改正性维护 在程序测试时,有的错误没被发现,交付使用后,程序中某些错误在程序测试时,有的错误没被发现,交付使用后,程序中某些错误暴露出来,此时就要对程序进行改正性维护。暴露出来,此时就要对程序进行改正性维护。u适应性维护适应性维护假如程序运行的外在环境(假如程序运行的外在环境( 硬件配置和软件配置等)发生了变化,硬件配置和软件配置等)发生了变化,为了使程序适应这种环境变化而修改程序的过程叫适应性维护。为了使程序适应这种环境变化而修改程序的过程叫适应性维护。u

50、完善性维护完善性维护在程序使用的过程中,用户往往会对程序提出增加新功能或改善性在程序使用的过程中,用户往往会对程序提出增加新功能或改善性能的要求,这就需要修改程序,使程序更加完善,这个过程称为完能的要求,这就需要修改程序,使程序更加完善,这个过程称为完善性维护。善性维护。 4.4.3 程序维护程序维护程序维护在软件生命周期中占相当重要的地位,大程序维护在软件生命周期中占相当重要的地位,大约约75%的费用都产生在程序维护阶段。的费用都产生在程序维护阶段。不管对程序进行哪种维护,都需要维护人员熟悉程不管对程序进行哪种维护,都需要维护人员熟悉程序的工作过程和使用方法,读懂原有的程序。修改程序的工作过

51、程和使用方法,读懂原有的程序。修改程序的人员往往不是编写程序的人员,有时候时间久了序的人员往往不是编写程序的人员,有时候时间久了就是编写程序的本人也记不清当时是怎样编写程序的。就是编写程序的本人也记不清当时是怎样编写程序的。因此,为了能顺利地进行维护,必须建立详尽的程序因此,为了能顺利地进行维护,必须建立详尽的程序文档。文档。程序文档解释了程序的工作过程及使用方法。创建程序文档解释了程序的工作过程及使用方法。创建的文档为修改程序或使用程序提供帮助。的文档为修改程序或使用程序提供帮助。 程序文档程序文档程序文档有两种形式:插入到程序代码中的注释和专门制作程序文档有两种形式:插入到程序代码中的注释

52、和专门制作的文档。的文档。u注释是插入到计算机程序代码行中的解释性注解,它能注释是插入到计算机程序代码行中的解释性注解,它能为改写程序的人阅读程序、理解程序提供帮助。为改写程序的人阅读程序、理解程序提供帮助。u专门制作的文档不属于程序,它包含的是一些对程序员专门制作的文档不属于程序,它包含的是一些对程序员和用户都有用的关于程序的信息。对程序员有用的文档为和用户都有用的关于程序的信息。对程序员有用的文档为程序手册,对用户有用的文档为用户参考手册。程序手册,对用户有用的文档为用户参考手册。p程序手册中包含问题描述、数学模型、算法及算法表达、程序程序手册中包含问题描述、数学模型、算法及算法表达、程序

53、代码、测试程序的过程和记录等,它是程序开发和维护的重要代码、测试程序的过程和记录等,它是程序开发和维护的重要资料。资料。p用户参考手册中包含对程序的功能说明,操作程序的方法、步用户参考手册中包含对程序的功能说明,操作程序的方法、步骤、故障分析与排除等,它是帮助用户学会使用软件的重要资骤、故障分析与排除等,它是帮助用户学会使用软件的重要资料。用户参考手册还有电子版和在线帮助等形式料。用户参考手册还有电子版和在线帮助等形式。4.5 程序设计语言应用程序设计语言应用4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择4.5.2 软件开发工具软件开发工具4.5.3 VB程序设计语言程序设计语言

54、4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择 通常根据程序设计语言发展的历程将其划分为通常根据程序设计语言发展的历程将其划分为四代。四代。1)机器语言)机器语言第一代语言第一代语言2)汇编语言)汇编语言第二代语言第二代语言3)高级程序设计语言)高级程序设计语言第三代语言第三代语言4)智能语言)智能语言第四代语言第四代语言4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择1)机器语言)机器语言第一代语言第一代语言 机器语言是计算机能直接执行的二进制形式机器语言是计算机能直接执行的二进制形式的低级语言。它是由机器指令组成的语言,不同的低级语言。它是由机器指令组成的语言,不

55、同的机器有不同的机器语言。机器语言对人来说既的机器有不同的机器语言。机器语言对人来说既难理解又难掌握,编出的程序不易查错纠错。计难理解又难掌握,编出的程序不易查错纠错。计算机刚出现时用的就是机器语言。算机刚出现时用的就是机器语言。4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择2)汇编语言)汇编语言第二代语言第二代语言 汇编语言比机器语言直观,它的每一条符号指令与相汇编语言比机器语言直观,它的每一条符号指令与相应的机器指令有对应关系,同时又增加了一些宏、符号地应的机器指令有对应关系,同时又增加了一些宏、符号地址等功能。存储空间的安排可由机器解决,减少了程序员址等功能。存储空间的安排

56、可由机器解决,减少了程序员的工作量,也降低了出错率。由于用汇编语言可以直接操的工作量,也降低了出错率。由于用汇编语言可以直接操纵处理器、寄存器和内存地址等硬件资源,这对于编写设纵处理器、寄存器和内存地址等硬件资源,这对于编写设备驱动程序、编译程序和操作系统等系统软件非常有用。备驱动程序、编译程序和操作系统等系统软件非常有用。不同指令集的处理器系统有自己相应的汇编语言。如微机不同指令集的处理器系统有自己相应的汇编语言。如微机上常用的上常用的Microsoft的汇编语言的汇编语言MASM。汇编语言相对来。汇编语言相对来讲还是比较晦涩,所以也被列为低级语言。讲还是比较晦涩,所以也被列为低级语言。4.

57、5.1 程序设计语言的分类与选择程序设计语言的分类与选择 3)高级程序设计语言)高级程序设计语言第三代语言第三代语言 高级程序设计语言从高级程序设计语言从20世纪世纪50年代就开始出现,它年代就开始出现,它提供给程序员的指令更像人类语言,为计算机应用的普及提供给程序员的指令更像人类语言,为计算机应用的普及起到了重要作用。人们用高级程序设计语言编程直观、方起到了重要作用。人们用高级程序设计语言编程直观、方便,但计算机最终执行的还是二进制表示的机器指令,这便,但计算机最终执行的还是二进制表示的机器指令,这中间需要编译程序或解释程序来做翻译工作。高级程序设中间需要编译程序或解释程序来做翻译工作。高级

58、程序设计语言不再与具体的计算机硬件相对应,同一高级程序设计语言不再与具体的计算机硬件相对应,同一高级程序设计语言,只要给出不同的编译程序或解释程序,就可以应计语言,只要给出不同的编译程序或解释程序,就可以应用于不同类型的计算机上。这就是高级程序设计语言的通用于不同类型的计算机上。这就是高级程序设计语言的通用性。用性。4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择 3)高级程序设计语言)高级程序设计语言第三代语言第三代语言 高级程序设计语言种类很多,可以把它们分为过程性高级程序设计语言种类很多,可以把它们分为过程性语言、面向对象的语言、专用语言和脚本语言。这里仅就语言、面向对象的语

59、言、专用语言和脚本语言。这里仅就最典型的、用途最广的几种语言进行介绍。最典型的、用途最广的几种语言进行介绍。(1)过程性语言:)过程性语言:(2)面向对象的语言:)面向对象的语言:(3)专用语言:)专用语言:(4)脚本语言:)脚本语言:4.5.1 程序设计语言的分类与选择程序设计语言的分类与选择 3)高级程序设计语言)高级程序设计语言第三代语言第三代语言(1)过程性语言:)过程性语言:过程性编程语言适合于顺序执行的算法。用过程性语言编写的程序有过程性编程语言适合于顺序执行的算法。用过程性语言编写的程序有一个起点和一个终点,程序的执行是流水线式的,在一个模块被执行一个起点和一个终点,程序的执行是

60、流水线式的,在一个模块被执行完成前,不能处理其他任务,也无法动态地改变程序的执行过程。完成前,不能处理其他任务,也无法动态地改变程序的执行过程。uBASIC,简单易学简单易学,包括包括GW-BASIC、QBASIC 和和Turbo BASIC等。等。uCOBOL,适合于大型计算机系统上的事务处理。,适合于大型计算机系统上的事务处理。uFORTRAN,广泛应用于科学和工程计算领域。广泛应用于科学和工程计算领域。uPASCAL,主要用于结构化程序设计的教学主要用于结构化程序设计的教学。uC语言语言,功能强大且十分灵活,以其高效、简洁、可移植性强。功能强大且十分灵活,以其高效、简洁、可移植性强。4.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论