大计基课本素材第八章_第1页
大计基课本素材第八章_第2页
大计基课本素材第八章_第3页
大计基课本素材第八章_第4页
大计基课本素材第八章_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、人民卫生二九年三月二十二日日 5:18:40 PM第八章程序设计基础第一节 Visual Basic 程序设计语言简介第二节 Visual Basic 语言基础拼写 上标 下标 公式 分节、页 首字下沉效果、带圈序号项目符号段落对齐、边框设置一、数据类型Visual Basic 提供了多种标准的数据类型,用户可根据自己 program 设计中的需要,选用相应的数据类型。1数值型(Numeric)Visual Basic 中的数值数据类型有:eger(整型)、Long(长整型)、 Single(单精度浮点型)、 Double(双精度浮点型) Currency(货币型)。(1)eger(整型)、L

2、ong (长整型)eger 类型占两个字节,除去符号位,整数的范围从-32768(215)32767(215-1),数值超过范围时,产生溢出错误。,用%作为整型的类型符,如:253%。Long 类型占节,除去符号位,整数的范围从-232+232-1,数值超过范围时,产生溢出错误。在 Visual Basic 中;用&作为长整型的类型符,如:897231&。(2) (2) Single(单精度浮点型)、Double(双精度浮点型):浮点类型数值范围较大。浮点类型可表示整数、小数、指数。单的形式表示,小数和幂之间加 E。正数精度浮点数(Single)占 4 个字节,精度是 7 位。用小数加幂(以

3、10 为底)的范围: 1.401298E-45 3.402823E38 ;负数的范围: -3.402823E38-1.401298E-45。在 Visual Basic 中,用!作为单精度浮点型的类型符。例如:523.12、523.12! 和 0.52312E+3 (等价与 0.52312103) 都表示同值的单精度浮点数。双精度浮点数(Double)占 8 个字节,精度是 16 位。表示形式同单精度浮点类型,不同之处是用 D 代替 E。正数的范围:4.94065645841247D-324:1.79769313486232D308;负数的范围-1.79769313486232D308 -4.

4、94065645841247D-324 。在 Visual Basic 中,用#作为双精度浮点型的类型符;在指数形式中用 D 代替 E,或在指数形式后加#。例如:523.12#、 0.52312D+3 和 0.52312E+3#为同值的双精度浮点数。返回(3) (3) Currency(货币型):货币型数据类型是定点数据类型,保留小数点右面 4 位和小数点左面 15位,适用于货币计算。在 Visual Basic 中,用作为货币型数据的类型符。2字节型(Byte)字节型用于返回二进制数。二、变量1变量的定义在 program 执行过,需要临时一些数据。在Visual Basic 中,用变量数据

5、。变量有名字和数据类型。变量名用于变量;变量的数据类型用于确定变量所能的数据种类。变量是内存中存放未知值的容器。program 每次运行时,产生的值存放到变量中。2变量名变量名名规则:必须以字母开头;不能包含;不得超过 255 个字符;在同一范围内必须是唯一的。返回在变量命名时,可给变量加前缀,表明变量的数据类型。数据类型的前缀和类型符如下所示:无 数 双 日 货 字 逻 数据 精 期 币 节 辑 据类 度 型 型 型 型 类返回型 型型前缀前缀类型符无类型符无无变 字 单 对 长 整体 符 精 象 整 型型 型 度 型 型型无eger Long Object Single String Va

6、riant%lng obj sng str vnt&blnByte byt Currency Date Time Double!cur dtm dbl$#四、数组数组是一组相同数据类型的变量的集合。数组有一个数组名,用数组名和下标(元素在数组中的序号)来数组中的每个元素。数组有上下界,数组的元素在上下界中是连续的。系统为每个元素分配空间。在同类型大批数据处理时,数组和循环语句结合使用,使 program 更为简洁。例如: 一个数组 A 有 5 个元素,在数学上以数集的形式 表 示 为A=ei i=1,2,3,4,5 , 其 中12,345a1=e ,a2=e a3=e ,a4=e ,a5=e

7、。返回五、常用函数Visual Basic 提供了大量的函数(标准函数)。这些函数都是一些常用的函数或算法, 系统已编好 program,放入库中供用户 program 调用。用户调用时,给出参数即可。函数库中的函数分为数值型函数、字符型函数、日期函数、转换函数和格式输出函数。以下将介绍一些常用的函数,其他的函数用户可浏览“帮助”菜单。1 数值型函数数值型函数的定义与用例见表 8-1:表 8-1数值型函数平方根函数Sqr(n)函数名称函数函 数 值示例绝对值函数Abs(n)nn0-nn0Abs(23)=23 Abs(-123)=123指数函数Exp(n)enExp(2)= 7.3890对数函数

8、Log(n)n0Log(7.389)=1.99999间的数取整函数(n)取不大于 n 的整数(12.5)=12(-12.5)=-13四舍五入取整函数Roun d(n)n 先四舍五入再取整Round(15.5)=16 Round(-15.5)=-16正弦函数Sin(n)n 的正弦函数值Sin(3.14/2)=0.9 9999余弦函数Cos(n)n 的余弦函数值Cos(0)=1正切函数Tan(n)n 的正切函数值Tan(3.14/4)=0.9 9920六、运算符与表达式program 中计算的算式(表达式)是用运算符和运算对象所组成的。Visual Basic 中运算符和算式有自身的组成规则。1运

9、算符Visual Basic 中有四类运算符:算术运算符、字符串运算符、关系运算符和逻辑运算符。(1) 算术运算符:算术运算符有:加(+)、减(-)、乘(*)、除(/)、整除()、乘方()、取模(Mod)。有些运算符与通常运算符的符号不同,但功能与通常意义上的运算符基本相同。减号“-”有两个运算对象(双目运算)时,作减号;在单目运算时,作负号。除法分为一般的除法和整除两种,并用不同的除号加以区分。乘方的符号()加在底数和幂之间。例如:53 表示 53。取模(Mod)的结果是两个数相除的余数。例如:20 Mod 6=2。算术运算符的优先级(高低):乘方负号(单目减号)乘、除整除取模加、减例如:1

10、00+”123”=223100+”ab” 系统给出“类型不匹配”的信息字符运算符:字符运算符有:&和+。这两个运算符的功能是将字符串连接起来。关系运算符:关系运算符的功能是对运算对象进行大小的比较,当关系成立时,返回 True;关系不成立时,返回 False。在 Visual Basic 中,True 用-1 表示;False用 0 表示。运算对象可以是数值型、字符型。关系运算符有:等于(=)、大于()、大于等于(=)、小于()、小于等于(=)、不等于()、字符串匹配 Like。关系运算符的优先级相同,其中 Like 的功能是在运算符左边的字符串中查找运算符右边的字符串,有就返回“True”;

11、没有就返回“False”。Like 可与通配符“?”、“*”、“#”、字符列表、!字符列表结合使用,进行模糊查询。逻辑运算符:逻辑运算符有:取反(Not)、与(And)、或(Or)。主要用于多个关系表达式的逻辑判断。其中 Not 为单目运算。逻辑运算的结果返回逻辑值:True 或 False。返回Not:只有一个运算对象(单目运算),对运算对象做取反操作。And:所有运算对象为 True 时,结果为 True;否则,结果为 False。Or :所有运算对象中,仅当所有的运算对象为 False,结果才会为 False;其它为 True;逻辑运算符的优先级(高低):NotAndOr。例如: Not

12、 “abc”ef” 的结果为:True。“abc”ef” And 1234”123”的结果为:False。“abc”ef” Or 1234”123”的结果为:True。2表达式表达式的定义:表达式是由常量、变量、运算符、函数和圆括号等组成。通过运算,表达式最终有一个结果,即表达式的值。表达式值的类型取决运算对象和运算符。表达式的表示:表达式的书写应根据Visual Basic中的规定。还应注意: 乘号不能省略。 只能使用圆括号。在一个表达式中可以出现多对圆括号;左右括号要配对。 表达式所有内容在同一行上。例如:第三节 基本控制语句第四节 过程将 program 分割成较小的逻辑就可以简化 pr

13、ogram 设计任务。称这些为过程,它们可以变成增强和扩展 Visual Basic 的构件。过程可用于压缩重复任务或共享任务,例如,压缩频繁的计算、文本与控件操作和数据库操作。采用过程进行编程的优点:过程将 program 划分成离散的功能模块,独立的模块使整个program 容易调试。一个 program 中的过程,可以容易地成为另一个 program 的构件。在 Visual Basic 中通常有几种过程: Sub (子过程)、Function(函数)过程、 Property (属性)过程和 event(事件)过程。前面已多次使用了事件过程,当发生某事件(如 Click、DblClick

14、、Load 等)时,对该事件做出响应的 program 段称作事件过程。这种事件过程了 Visual Basic 应用 program 的主体。当多个不同的事件过程需要使用一段相同的 program 代码时,把这一段代码独立出来,作为一个过程,这种过程则称为“通用过程”( General procedure),它可以单独建立,供事件过程调用。通用过程告诉应用 program 如何完成一项指定的任务。一旦确定了通用过程,就必须专由应用 program 来调用。而 Visual Basic 中,通用过程又分为两类,即子过程(Sub 过程)和函数过程(Function 过程)。本节将介绍通用过程的定

15、义、调用和参数传送。一、子(Sub)过程的定义、调用子过程是在响应事件时执行的代码块。将模块中的代码分成子过程后,在应用 program 中查找和修改代码变得更容易了。1.子过程的定义子过程的结构与前几节介绍的事件过程的结构类似,其定义语句的语法格式:Private | Public | Friend S语句块 Exit Sub 语句块End Sub其中:ic Sub 过程名(参数列表)(1)Sub 语句用来子过程的名称、参数和其主体的代码。每个子过程以 Sub 关键字开头,以 End Sub 关键字结束。在 Sub 和 End Sub 之间是描述过程操作的语句块,称为“过程体”,每次调用过程

16、都会执行过程体。当 program 执行到 End Sub 时,将退出该过程,返回到调用语句的下一语句;如果过程体中含有 Exit Sub 语句,当 program 执行到 Exit Sub 时,也退出该过程,返回到调用语句的下一语句。例如定义一个计算半径为 4 厘米的圆面积的子过程,定义格式如下:Private Sub circle_area() s=3.14159*42End Sub过程名,是一个长度不超过 40 个字符的变量名,在同一个模块中,同一个变量名不能既作子过程名又用作函数过程名。参数列表(可选的),代表在调用时要传递给子过程的参数的变量列表。在变量列表中含有在调用时传送给该过程

17、的简单变量名或数组名,各名字之间用逗号隔开。“参数列表”指明了调用时传送给过程的参数类型和个数,每个参数的格式为:ByVal | ByRef 变量名( )As 数据类型“变量名”前面的“ByVal | ByRef”是可选的,如果加上“ByVal”,则表明该参数是“传值”(Passed by Value)参数,没有加“ByVal”或加“ByRef”的参数称为“”(Passed by reference)参数。“变量名”如果是数组,则要在数组名后加上一对括号。“数据类型”指的是变量的类型,可以是 Byte、eger、Long、Currency、Single、Double、Decimal(目前尚不支

18、持)、Date、String、 Object 或 Variant。或用户定义的类型。如果省略“As 数据类型”,则缺省为 Variant。例如定义一个计算任意半径的圆面积的带参子过程,定义格式如下:Private Sub circle_area(ByVa s=3.14159*r2End Subsingle)(4) Sic 指定过的局部变量在内存中的缺省方式。使用了 Sic,则过的局部变量就是“Sic”型的,即在每次调用过程时,局部变量的值保持不变;如果省略“Sic”,则局部变量就缺省为“自动”的,即在每次调用过程时,局部变量被初始化为 0 或空字符串。Sic 属性对在 Sub 过程之外定义的同

19、名变量没有影响,即使这些变量在过使用。(5) Private | Public | Friend参数的含义。Public 表示子过程是公有过程,所有模块的所有其它过程都可这个子过程。Private 表示子过程是私有过程,只能被包含其的模块中的其它过程,不能被其它模块中的过程。子过程可以放入标准模块、类模块和窗体模块中(有关模块说明详见本节“过程的作用域”的小字注释)。按照缺省规定,所有模块中的子过程为 Public(公用的),这意味着在应用 program 中可随处调用它们。注意:子过程不能嵌套定义,但可以嵌套调用。即在子过程的定义内,不能定义子过程或函数过程,但可以调用它们。2. 在 Vis

20、ual Basic 中建立一个过程的操作定义 Sub 过程的操作方法有如下两种。返回方法一,利用工具菜单中的“添加过程”命令定义过程:单击“工程/添加模块”菜单命令,弹出“模块(代码)”窗口;再单击“工具/添加过程”,弹出“添加过程”所示。框,如图 8-38在“名称”框内输入要建立的过程的名字;在“类型”栏内选择要建立的过程的类型,如果建立子过程,则应选择“子 program(S)”;在“范围”栏内选择过程的适用范围为“公有的(B)”;单击“确定”按钮,将打开模块代码窗口。如图 8-39 此时可以在 Sub 和 End Sub之间键入 program 代码(与事件过程的代码输入相同)。方法二,

21、通过“工程/添加模块”命令打开标准模块代码窗口,然后在“(通用)/()”状态下直接输入过程。如进行圆面积过程的定义,进入模块代码窗口后,在“(通用)/(声明)”状态下,直接在窗口内输入:“Public Sub circle_area()”,然后按回车键,窗口内显示:Public Sub circle_area()End Sub此时在 Sub 与 End Sub 之间输入过程体代码。如果建立窗体级的通用过程,则双击窗体进入窗体代码窗口,然后在“(通用)/(3. 子过程的调用)”状态下直接输入过程。(1)调用子过程有两种格式: Call 子过程名(实参列表)子过程名 实参列表注意,当使用 Call

22、 语法时,参数必须在括号内。若省略 Call 关键字,则必须省略参数两边的括号。若实参要获得子过程的返回值,则实参只能是变量,不能是常量、表达式或控件名。实参列表与形参列表中的实参与形参的个数必须相同,类型也必须相同。(2)调用其它模块中的过程在“过程作用域”部分介绍。例 8.16 已知多边形的各条边的长度,要计算多边形的面积,如图8-40 所示。分析:任意多边形可以分解为若干个三角形,多边形面积就是这若干个三角形面积之和。计算机三角形面积的公式是:返回其中,x、y、z 为任意三角形的三条边,c 为三角形周长的一半。图 8-40 所示的多边形由 4 个三角形组成,而三角形面积的计算公式是相同的

23、,因此,可以编写一个通用的三角形面积计算过程,对不同边长的三角形分别调用此过程即可求出它们的面积,然后再累加,就得到多边形的面积。解:三角形面积计算为带参子过程,定义如下*三角形面积计算的 Sub 过程Public Sub area(s, x, y, z)c =s = End1 / 2 * (x + y + z)sqrt(c * (c - x) * (c - y) * (c - z) Sub设计一窗体为主 program 运行,含多边形边长输入和启动多边形面积计算的触发按钮,如图 8-41 所示。Dim dat(10) Private SubFor j = 1 To 9d1_Click()la

24、1$ = 第 + Str(j) + 条线dat(j) = InputBox(la1$, 边长划线输入) Next jEnd SubPrivate Subd2_Click()a = dat(1): b = dat(2): c = dat(3)Call area(s, a, b, c) 第tota = 0式调用过程For j = 1 To 4 -1tota = s +a = c: b =tota dat(jb, c* 2 + 2): c = dat(j * 2 + 3)第二种方式调用过程areaNext Prs, a,j多边形面积=; totaEnd Sub二、函数(Function)过程的定义、

25、调用Visual Basic 除了提供许多函数(如:Sqr、Cos、Chr)供使用者调用之外,还允许使用者用 Function 语句编写自己的Function 过程。1.定义函数过程函数过程定义的语法格式:Private|Public S As 类型语句块过程名=返回值 Exit Function 语句块过程名=返回值End Function函数过程由 Function 语句码,其中:ic Function 过程名 (参数列表)它的名称、参数以及其主体的代函数过程以 Function 关键字开头,以 End Function 关键字结束,两者之间的语句是描述过程操作的“函数过程体”。格式中的“

26、过程名”、“参数列表”、“Public”、“Private”、“Sic”、“Exit Function”的含义与子过相同。“As 类型”定义函数过程返回值的数据类型,可以是 Byte、布尔eger、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。如省略,则为 Variant。与子过程不同,函数过程直接返回一个值到调用处,因此在函数过程体中至少要对“过程名”赋一次返回值,语句形式为:“过程名=表达式”。如果没有对过程名赋值,则过程将返回一个缺省值:数值函数返回 0,字符串函数

27、返回一个零长度字符串 (),Variant函数则返回 Empty。实参列表与形参列表中的实参与形参的个数必须相同,类型也必须相同。函数过程不能嵌套定义,但能在过程内调用通用过程。函数过程可以递归调用。2.建立函数过程的操作建立函数过程的操作与建立子过程的操作方法相同,只是当用第一种方法建立时,在“添加过程”如图 8-42 所示。3.调用函数过程函数过程的调用同 Visual Basic下:函数过程名(参数列表)框的“类型”栏内选择“函数”。函数调用的方法一样。格式如由于函数过程名返回一个值,所以函数过程不能作为单独的语句使用,只能作为表达式或表达式中的一部分来使用。三、参数传送在调用一个过程时

28、,必须把实际参数传递给过程,完成形式参数(简称:形参)和实际参数(简称:实参)的结合,然后用实参执行调用的过程。形参是在子过程或函数过程的定义中出现的变量名,实参则是在调用子过程或函数过程时传送给子过程或函数过程的常数、变量、表达式或数组。在 Visual Basic 中,实参和形参结合的方法有:传址(ByRef)或传值(ByVal),其中传址又称为。区分两种参数传送方式的方法是在定义的形参前加“ByDef”或 “ByVal”关键字。1.传址传址的结合过程是:调用一个过程时,将实参的地址传递给形参,这就使过程体的是对应的实际变量。因此,实参的值会随过程体内对形参的改变而改变。传址方式是通过关键

29、字 ByRef 来定义的。在定义通用过程时,如果形参前面有关键字 ByRef 或缺省,则该参数用传址方式传送。VisualBasic 在缺省情况下,变量(简单变量、数组或数组元素以及)都是通过“”传送给子过程或函数过程,因此可以通过改变过相应的参数来改变该变量的值。2.传值传值的结合过程是,调用一个过程时,将实参的值而不是地址传递给形参。被调用过程的操作是在形参自己的单元中进行,当过程调用结束时,这些形参所占用的单元也同时被。由于通用过程没有实参的原始地址,因而不会改变原来实参的值,所有变化都是在实参的副本上进行的。3.数组参数的传送Visual Basic 允许参数是数组,数组一般通过传址方

30、式传送。在传送数组时,除了遵守参数传送的一般规则外,还应注意以下事项: (1)在实参列表和形参列表中放入数组名,忽略维数的定义,但圆括号不能省略。(2)如果被调用过程不知道实参数组的上下界,可用 Lbound 和Ubound 函数确定实参数组的下界和上界。例 8.19 编写一函数过程,求任意一维数组的最小值元素。用窗体单击事件调用函数。解:函数过程 programPublic Function Fmin(a() Aseger)Dim minFormin Aseger, i Aseger= a(LBound(a)i = LBound(a) To UBound(a)If min a(i) Then

31、 min = a(i) Next iFmin = min End Function窗体单击事件过程 Private Sub Form_Click() Dim a%(3 To 9), i%For i = 3 To 9la1$ a(i) NextPr= 第 + Str(i - 2) + 个数= InputBox(la1$, 数组输入) i最小值:; Fmin(a()End Sub返回(3)如果只传送数组中某个元素给被调用过程,则在实参列表的数组名后的括号中写上指定元素的下标。4.其他参数传送VB 提供了十分灵活和安全的参数传送方式,允许使用可变参数和指名参数传送。在调用一个过程时,可以向过程传送可

32、选的参数或者任意数量的参数,并可指定要传送的参数的名字。有关这方面的使用请参阅 Visual Basic 的语言参考手册。四、过程的作用域Visual Basic 的应用 program 由若干个过程组成,这些过程一般保存在窗体文件(.frm)、标准模块文件(.bas)或类模块中*。一个 VB应用 program 的一般组成描述如图 8-43 所示。一个过程所处的位置不同,可被的范围就不同。过程可被的范围称为过程的作用域。过程的作用域分为:窗体/模块级和全局级。1.窗体/模块级的过程在某个窗体或标准模块内定义子过程或函数过程时,在其语句(Sub 语句或 Function 语句)前加上关键字 P

33、rivate,则称过程为窗体或模块级过程。这些过程只能被本窗体(在本窗体内定义)或本标准模块(在本标准模块内定义)中的过程调用,其调用方法见本节子过程、函数过程的定义和调用介绍。2.全局级的过程在某个窗体或标准模块内定义子过程或函数过程时,在其语句(Sub 语句或 Function 语句)前加上关键字 Public(或缺省),则称过程为全局级(公用)过程。全局级过程可供该应用 program 的所有窗体和所有标准模块中的过程调用,但过程定义所在的位置不同,其调用方式则不同。全局级过程的调用方法:对于窗体中定义的全局级过程,外部过程(本窗体之外的其他过程)要调用时,必须在被调用的过程名前加该过程

34、所处的窗体名。如窗体模块 Form1 中包含了 SomeSub 过程,则可使用下面的语句调用 Form1 中的过程:Call Form1.SomeSub(arguments)对于在标准模块中定义的全局级过程,外部过程均可调用。如果过程名是唯一的(过程仅出现在一个地方,这个过程就是唯一的),调用时则直接过程名。如果两个以上的模块都包含同名的过程,调用时就要在过程名前该过程所处的模块名。例如,对于 Module1和 Module2 中名为 CommonName 的过程, 从 Module2 中调用CommonName 则运行 Module2 中的 CommonName 过程, 而不是Module1

35、 中的 CommonName 过程。若在 Module1 中调用中的 CommonName 过程,要用下面的语句:Module2CallmonName (arguments)不同作用域的过程调用有关规则见表 8-27。表 8-27 不同作用范围的两种过程定义及调用规则作用范围模块级全局级窗体标准模块窗体标准模块定义方式过程名前加 Private例:Private Sub My1(形参表)过程名前加 Public 或缺省例:Public Sub My (形参表)能否被本模块其他过程调用能能能能能否被本应用 program 其他模块调用不能不能能,但必须在过程名前加窗体名,例:Call 窗体名.M

36、y (实参表)能,过程名唯一,直接,过程名不唯一,则必须在过程名前加标准模块名,例:Call 标准模块名. My (实参表)返回五、递归1.递归的概念用自身的结构来描述自身就称为“递归”。例如对阶乘运算的定义,显然,用“阶乘”本身定义阶乘,这样的定义就称为递归定义。2.子过程和函数过程的递归调用所谓递归调用就是一个过程调用过程本身。在递归调用中,一个过程执行的某一步要用到它自身的上一步(或上几步)的结果。VisualBasic 允许一个自定义的子过程或函数过程在过程体的调用自己,这样的子过程或函数过程称为递归子过程或递归函数过程。对于具有递归特性,可以采用递归调用描述和解决它们。递归调用在完成

37、阶乘运算、级数运算、幂指数运算等方面非常方便。递归分为两种类型,一种是直接递归,即在过调用过程本身;一种是间接递归,即间接地调用一个过程。例如第一个过程调用了第二个过程,而第二个过程又回过头来调用第一个过程。Visual Basic 支持上述两种类型的递归。但由于内存的限制,对于低版本的 VB,如果超过规定的递归次数,则产生“堆栈溢出”错误。例 8.21 编写计算 n!的递归函数过程,用窗体单击事件启动数据输入和调用阶乘递归函数过程。分析:根据阶乘的数学定义,负数的阶乘没有定义,0 的阶乘为 1,正数 n 的阶乘为:n*(n-1)*(n*2)*2*1可以写成如下形式:解:利用上式,求n 的阶乘

38、可以转换为求n(n-1)!,因此,fact(n)=n!的函数过程如下。PublicFunction fact(n As1 Or n = 0 Then 1eger) AsegerIf n fact Elsefact=n * fact(n - 1)End IfEnd Function窗体单击事件过程(输入数据和调用函数过程)Private Sub Form_click()Dima =a Aseger, accu AsegerInputBox(输入求阶乘数:)If a = 0 And a 1 时,连续调用 fact()自身共n-1 次,直到 n=1 为止。假设 n=4,fact(4)的执行过程如图

39、8-44所示。可见,在 fact(4)的求解过递推与回归各持续了三次。因此,递归求解分为两个阶段。第一阶段是“递推”,即把求 n 的阶乘表示为求(n-l)阶乘的函数,而(n-1)的阶乘仍然不知道,还要“递推”,直到 1 的阶乘。此时 Fact(1)的值为已知,不必再“推”了。然后开始第二阶段,采用“回归”方法,从 1 的阶乘(1)推算出 2 的阶乘(2),再推算出 3 的阶乘(6),一直到推算出 n 的阶乘值为止。在计算机中,递归处理是通过栈来实现的。栈中存放形参、局部变量、调用结束时的返回地址。每调用一次自身,计算机把当前参数压进栈,直到达到递归结束条件,这个过程叫递推过程;然后不断从栈出当

40、前参数,直到栈空,这个过程叫回归过程。那么,递归处理要经过多少次递推与回归才结束递归过程?显而易见,如果不要求递归过程进行下去,就必须有一个结束递归过程的条件。在例 8.21 中是通过“If n = 1 Or n = 0 Then fact= 1”语句实现递归的结束。由此可见(1)递归结束条件及结束时的值;递归的条件如下:(2)能用递归形式表示,并且递归向结束条件发展。 注意:递归算法设计简单,但消耗的计算机机时和占据的内存空间比非递归的 program 大。设计一个正确的递归子过程或函数过程必须注意两个要点:一要具备递归条件;二要具备递归结束的条件。第五节 窗体与基本控件第六节 综合应用举例

41、常用算法是学习 program 设计的基础,结合临床医学与基础医学的研究需求,本节将介绍一些常用算法的应用,并结合窗体控件和界面设计方法进行综合举例。一、排序排序是将一组数按递增或递减的次序排列。常用的排序算法有:选择法排序、冒泡法排序、 法排序、合并排序等,这里介绍冒泡法排序。冒泡法排序的算法步骤是:(1)每轮排序从最后的两个数开始,将相邻的数比较,当次序不对就交换两数的位置,出了内循环,最小数就冒出来排在第一位置。 (2)除第 1 个数外,其余 n-1 个数再按步骤(1)的方法冒出次小的数排在第二位置。(3)重复步骤(1)n-1 次,就二、数据查找递增序列。查找是性表中,根据指定关键值,找出与其值相同的元素,一般有顺序查找和二分查找。方法来检索需要的书。馆内的书籍数据库就可以用查找的三、数值积分与曲线下的面积计算数值积分是用近似计算方法,解决定积分计算问题,常用的方法有矩形法、梯形法、抛物(又称生法)等。按积分划分的区间,又有定长和变长的不同实现方法。这里介绍用定长的梯形法计算的积分。在医学研究中,时常会遇到要求某信号曲线下的面积,此时,可以运用上面的积分求解过程来解决此类问题。四、分类统计分类统计也是经常遇到的运算,它是在一批数据中按分类的条件统计每一类中包含

温馨提示

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

评论

0/150

提交评论