2019年监理工程师考试建设工程合同管理试卷ppt课件_第1页
2019年监理工程师考试建设工程合同管理试卷ppt课件_第2页
2019年监理工程师考试建设工程合同管理试卷ppt课件_第3页
2019年监理工程师考试建设工程合同管理试卷ppt课件_第4页
2019年监理工程师考试建设工程合同管理试卷ppt课件_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 过程和变量的作用域 4.1 Visual Basic 的代码模块 结构化程序设计思想: 把较大的程序划分为若干个模块(窗体); 每个模块(窗体)只完成一个或若干个功能; Visual Basic 应用程序的结构: VB应用程序 .VBP 窗体模块 .Frm 类模块 .Cls 标准模块 .Bas 函数过程Sub过程事件过程函数过程Sub过程 1. 1. 引例引例4-24-2 已知多边形的各条边的长度,已知多边形的各条边的长度, 要计算多边形的面积。要计算多边形的面积。 计算多边形面积,可将多边形分解计算多边形面积,可将多边形分解 成若干个三角形。成若干个三角形。 计算三角形面积的公式如下

2、:计算三角形面积的公式如下: a b c de f g S1 S2 S3 )( 2 1 )()(zyxczcycxccarea x y z S=S1+S2+S3 传统方法:下面的公式写三次 4.2.1 4.2.1 函数过程的创建和调用函数过程的创建和调用 除了系统提供的内部函数过程和事件除了系统提供的内部函数过程和事件 过程外,用户可自定义过程:过程外,用户可自定义过程: 以以SubSub保留字开始的为子过程通用保留字开始的为子过程通用 过程);过程); 以以FunctionFunction保留字开始的为函数过保留字开始的为函数过 程。程。 1 1函数过程的创建函数过程的创建 函数过程形式:函

3、数过程形式: Function Function 函数过程名函数过程名(参数列表参数列表( (形参形参) As ) As 类型类型 局部变量或常数定义局部变量或常数定义 语句块语句块 函数名函数名 = = 返回值返回值 函数过程函数过程 体体 Exit FunctionExit Function 语句块语句块 函数名函数名 = = 返回值返回值 End Function End Function 自定义函数过程有两种方法:自定义函数过程有两种方法: (1)(1)利用利用“工具工具菜单下的菜单下的“添加过程添加过程命令定义,命令定义, 生成一个函数的框架。生成一个函数的框架。 (2)(2)利用代

4、码窗口直接定义。利用代码窗口直接定义。 2.2.函数过程的调用函数过程的调用 函数过程调用同标准函数调用,函数过程调用同标准函数调用, 形式:函数过程名形式:函数过程名(参数列表参数列表) ) 参数列表:称为实参,它必须与形参个数相同,位置参数列表:称为实参,它必须与形参个数相同,位置 与类型一一对应。可以是同类型的常量、变量、表达与类型一一对应。可以是同类型的常量、变量、表达 式。式。 Private Sub Command1_Click() A=val ( Inputbaox(“”) ) End sub 定义一个函数:多次调用 a b c de f g S1 S2 S3 x y z 定义函

5、数过程area: Public Function area(x!, y!, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqr(c * (c - x) * (c - y) * (c - z) End Function 调用函数过程: Sub command1_click() 输入若干个三角形边长 S=area(a,b,c)+area(c,d,e) S=S+area(e,f,g) Print S End Sub 例例4-3 编写定义计算任意整数编写定义计算任意整数a阶乘的函数过程阶乘的函数过程fac(n). 参考代码:参考代码: Pub

6、lic Function fac(a as Integer) as Long dim p as Long, i as Integer p=1 累乘初值为累乘初值为1 For i=1 to a p=p * i Next i fac=p 程序中对函数名赋值程序中对函数名赋值 End Function 调用:a=fac(10) 4.2.2 4.2.2 子子 过过 程的创建和调用程的创建和调用 2.2.子过程创建子过程创建 Sub Sub 子过程名子过程名(参数列表参数列表) 局部变量或常数定义局部变量或常数定义 语句语句 Exit SubExit Sub 语句语句 End SubEnd Sub 3.

7、3.子过程的调用子过程的调用 子过程名子过程名 参数列表参数列表 或或 Call Call 子过程名子过程名( (参数列表参数列表) ) 1.引例 编写一个两个数交换的过程供多次调用。 Swap (x,y)子过程的定义主调程序调用Swap子过程 Public Sub Swap(x, y) Private Sub Form_Click() Dim t Dim a, b t = x a = 10 x = y b = 20 y = t Call Swap (a, b) End Sub Print a=;a,,b=; b End Sub 例4-1,编写一个能找出两个数中大数的子过 程,然后在应用程序中

8、调用它。 4.2.3 4.2.3 参数传递参数传递 指主调过程的实参传递给被调过程的形参。指主调过程的实参传递给被调过程的形参。 形参和实参对应关系:形参和实参对应关系: 1 1对应变量名不必相同,但变量个数对应变量名不必相同,但变量个数 相等;相等; 2 2各实参的书写顺序必须和对应的形各实参的书写顺序必须和对应的形 参顺序一致,且类型相符。参顺序一致,且类型相符。 1. 1. 传址与传值传址与传值 传址:传址: 形参得到的是实参的地址,当形参值形参得到的是实参的地址,当形参值 的改变同时也改变实参的值。的改变同时也改变实参的值。 传值:传值:ByValByVal 形参得到的是实参的值,形参

9、值的改形参得到的是实参的值,形参值的改 变不会影响实参的值。变不会影响实参的值。 4.2.3 4.2.3 参数传递参数传递 。 例例4-5 4-5 两个变量的交换。两个变量的交换。 Sub Swap1(ByVal x%, ByVal y%)Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t t% = x: x = y: y = t End SubEnd Sub Private Sub Command1_Click()Private Sub Command1_Click() a% = 10: b% = 20: Swap1 a, b a% = 10

10、: b% = 20: Swap1 a, b 传值传值 Print A1=; a, B1=; bPrint A1=; a, B1=; b a = 10: b = 20: Swap2 a, b a = 10: b = 20: Swap2 a, b 传址传址 Print A2=; a, B2=; bPrint A2=; a, B2=; b End SubEnd Sub Sub Swap2(x%, y%) t% = x: x = y: y = t End Sub a的地址 10 10 10 aa x x 形参 实参 ByVal 传值传地址 4.3 变量、过程的作用域 作用域:变量、过程随所处的位置不同

11、, 可被访问的范围。 1.过程的作用域(理解) 窗体/模块级:加Private关键字 的过程,只能被定义的窗体或模块中的过 程调用。 全局级:加Public关键字缺省 的过程,可供该应用程序的所有窗体和所 有标准模块中的过程调用。 2. 2. 变量的作用域变量的作用域 局部变量:在过程内用声明的变量,只局部变量:在过程内用声明的变量,只 能在本过程中使用。能在本过程中使用。 窗体窗体/ /模块级变量:在模块级变量:在“通用声明通用声明段段 中用中用DimDim语句或用语句或用PrivatePrivate语句语句 声明的变量声明的变量, ,可被可被 本窗体本窗体/ /模块的任何过程访问。模块的任

12、何过程访问。 全局变量:在全局变量:在“通用声明通用声明段中用段中用 PublicPublic语句声明的变量,可被本应用程序的任何语句声明的变量,可被本应用程序的任何 过程或函数访问。过程或函数访问。 例如在下面一个标准模块文件中不同级的变量声明: option explicit Public Pa As integer 全局变量 Private Mb As string *10 窗体/模块级变量 Sub F1( ) Dim Fa As integer 局部变量 可以访问Pa,Mb,不能访问Fb End Sub Sub F2( ) Dim Fb As Single 局部变量 可以访问Pa,Mb

13、,不能访问Fa End Sub Sub f1(x) x=f2(xx)*3 End Sub Sub Command1_Click() Call f1(y) End Sub Function f2(x) f2=f3(x)+3 End Sub Function f3(x) f3=x*x End Sub Sub f1(x) Call f1(y) End Sub 过程的直接调用过程的直接调用 Sub Command1_Click() Call f1(y) End Sub 过程的递归调用过程的递归调用 4.4 4.4 递归递归 1.1.递归的概念递归的概念 用自身的结构来描述自身就称为用自身的结构来描述自

14、身就称为“递归递归”。例对阶乘的。例对阶乘的 定义:定义: )!2() 1()!1( )!1(! nnn nnn 2. 递归过程递归过程 过程在自身定义的内部调用自己。过程在自身定义的内部调用自己。 例例4-8 编编fac(n)=n! 的递归函数的递归函数 Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End If End Function 11)fac(* 11 )fac( nnn n n Sub Command1_Click() Print “fac(4)=”;fa

15、c(4) End Sub 结果:结果:fac(4)=24 递推回归 fac(2)=2*fac(1) fac(1)=1 fac(4)=4*6fac(3)=3*2fac(2)=2*1 fac(3)=3*fac(2)fac(4)=4*fac(3) 11)fac(* 11 )fac( nnnn n n 问题: 递归方程: 写出递归函数 考虑 若上述fac函数中少了 : If n = 1 Then fac = 1 即仅有语句:fac = n * fac(n - 1) 程序运行将造成何结果?由此可见构成递归的结构如下: 1、递归结束条件及结束时的值; 2、自身的调用,并且递归向终止条件发展。 若在不同级声

16、明相同的变量名如: Public Temp As integer 全局变量 Sub Form_Load() Dim Temp As Integer 局部变量 Temp=10 访问局部变量 Form1.Temp=20 访 问全局变量必须加窗体名 Print Form1.Temp, Temp 显示 20 10 End Sub 2. 2. 数组参数的传递数组参数的传递 当参数是数组通过传址方式进行传递。注意:当参数是数组通过传址方式进行传递。注意: 在实参和形参中写数组名,忽略维数的定义,但圆在实参和形参中写数组名,忽略维数的定义,但圆 括号不能省。括号不能省。 被调过程可通过被调过程可通过Lbou

17、ndLbound和和UboundUbound函数确定实参数组函数确定实参数组 的下、上界。的下、上界。 LboundLbound和和UboundUbound函数的形式如下:函数的形式如下: L|Ubound(L|Ubound(数组名数组名) ) 例 6.7 编一函数tim,求任意一维数组中各元素之积。 调用tim,求 和 Function tim(a() As Integer) Dim t#, i% t = 1 For i = Lbound(a) To Ubound(a) t = t * a(i) Next i tim = t End Function 5 1 1 i i at 8 3 2 i

18、 i bt 调用:调用: Sub Command1_Click() Dim a%(1 To 5),b%(3 To 8) t1# = tim(a() t2 #= tim(b() Print t1, t2 End Sub 4.4.子过程与函数过程区别:子过程与函数过程区别: (1)(1)函数过程名有值,有类型,在函数体内至少赋值函数过程名有值,有类型,在函数体内至少赋值 一次;一次; 子过程名无值,无类型,在子过程体内不能对子子过程名无值,无类型,在子过程体内不能对子 过程名赋值;过程名赋值; (2)(2)调用时,子过程调用是一句独立的语句。调用时,子过程调用是一句独立的语句。 函数过程不能作为单

19、独的语句加以调用,必须函数过程不能作为单独的语句加以调用,必须 参与表达式运算。参与表达式运算。 (3)(3)一般当过程有一个返回值,使用函数过程较直观一般当过程有一个返回值,使用函数过程较直观 ; 反之若过程无返回值,或有多个返回值,使用子反之若过程无返回值,或有多个返回值,使用子 过程较直观。过程较直观。 4.4 用户自定义类型 自定义数据类型自定义数据类型 一组不同类型变量的集合。相当于一组不同类型变量的集合。相当于C语言语言 中的结构中的结构(Struct)类型;类型; 当遇到简单数据类型不能表示问题的时候,使当遇到简单数据类型不能表示问题的时候,使 用复合数据类型来表示用复合数据类型

20、来表示 由若干基本数据类型组成。由若干基本数据类型组成。 1.1.自定义类型的定义自定义类型的定义 形式如下:形式如下: Type Type 自定义类型名自定义类型名 元素名元素名(下标下标) As ) As 类型名类型名 元素名元素名(下标下标) As ) As 类型名类型名 End Type End Type 例如,以下定义了一个有关学生信息的自定义类例如,以下定义了一个有关学生信息的自定义类 型型 Type StudTypeType StudType No As IntegerNo As Integer 学号学号 Name As String Name As String * * 20

21、20 姓名姓名 Sex As String Sex As String * * 1 1 性别性别 Mark(1 To 4) As SingleMark(1 To 4) As Single 4 4门课程成门课程成 绩绩 Total As SingleTotal As Single 总分总分 End TypeEnd Type 元素名:表示自定义类型元素名:表示自定义类型 中的一个成员中的一个成员 下标:表示是数组下标:表示是数组 类型名:为标准类型类型名:为标准类型 2 2自定义类型变量的声明和使用自定义类型变量的声明和使用 (1) (1) 声明形式:声明形式: Dim Dim 变量名变量名 As

22、 As 自定义类型名自定义类型名 例例 Dim Student As StudType Dim Student As StudType (2) (2) 引用引用 形式:变量名形式:变量名. .元素名元素名 例例 表示表示StudentStudent变量中的姓名,第变量中的姓名,第4 4门课程门课程 的成绩,则表示如下:的成绩,则表示如下: Student.NameStudent.Name,Student.Mark(4)Student.Mark(4) 3 3自定义类型数组的应用自定义类型数组的应用 例例4-12 4-12 利用自定义类型数组,编写一个输入、显示程利用自定义类型数组,编写一个输入、

23、显示程 序。序。 例 打印分形图 二叉树 加密和解密加密和解密 简单加密的思想是:简单加密的思想是: 将每个字母将每个字母C C加一序数加一序数K K,式子,式子 c=chr(Asc(c)+k),c=chr(Asc(c)+k), 例如序数例如序数k k为为5 5,这时,这时 “ “A”A”“F”“F”,“a”a”“f”“f”,“B”B”“G”“G” 当加序数后的字母超过当加序数后的字母超过“Z Z或或“z z那么那么 c=chr(Asc(c)-k)c=chr(Asc(c)-k)。 解密为加密的逆过程。解密为加密的逆过程。 常用算法常用算法 1.数制转换 例 将一个十进制整数m转换成 r (21

24、6)进制字 符串。 方法:将m不断除 r 取余数,直到商为零,以反 序得到结果。 4.54.5常用算法常用算法 ( (三)三) 3.3.查找查找 (1)(1)顺序查找顺序查找 例。例。 顺序查找根据查找的关键值与数组中的元素逐一比顺序查找根据查找的关键值与数组中的元素逐一比 较较( (数组可无序数组可无序) ) Public Sub Search(a() As Variant, ByVal key As Public Sub Search(a() As Variant, ByVal key As Variant, index%)Variant, index%) Dim i% Dim i% Fo

25、r i = LBound(a) To UBound(a) For i = LBound(a) To UBound(a) If key = a(i) Then If key = a(i) Then 找到,元素找到,元素 的下标在的下标在indexindex中,结束查找中,结束查找 index = iindex = i Exit Sub Exit Sub End If End If Next i Next i index = -1 index = -1 找不到,找不到, indexindex形参的值为形参的值为-1-1 End SubEnd Sub 平均查找次数平均查找次数 n/2n/2 Keya

26、(mid) low=mid+1 查找区域缩小一半,继续 直到找到或查找区域中无元素. 本例用递归实现6.16 Sub birsearch(a(), low%, high%, key , index%) (2)二分法查找 要查找的数组必须有序。 思想:要查找的关键值Key同数组的中间mid项元素比较: 12 34 56 78 111 222 333 444 555 666 777 888 Low high mid 444 Key 4.4.排序排序 选择、冒泡、插入法排序等。选择、冒泡、插入法排序等。 前两种排序欲排序的数据全部输入后,再进行排序;前两种排序欲排序的数据全部输入后,再进行排序; 插

27、入法排序每输入一项,马上插入到数组应在的位置,数组插入法排序每输入一项,马上插入到数组应在的位置,数组 始终有序。始终有序。 例例6.17 6.17 实现的步骤:实现的步骤: (1)(1)输入欲排序的数据项输入欲排序的数据项x x;在数组;在数组a a中找中找x x应所处的位置应所处的位置 j;j; (2) (2)从数组的最后一个元素开始到下标从数组的最后一个元素开始到下标j j依次往后移,使依次往后移,使j j 位置空出;位置空出; (3)(3)将将x x放入位置放入位置j j处,一个数据插入完成;处,一个数据插入完成; (4)(4)有若干个数重复有若干个数重复(1)(1)(3)(3)。 )

28、( )( 1 i i ii xf xf xx 5. 5. 例例6.18 6.18 高次方程求根高次方程求根 有牛顿迭代法、二分法、弦截法等有牛顿迭代法、二分法、弦截法等 (1 1牛顿迭代法牛顿迭代法 迭代公式:迭代公式: 思想:思想: 对方程给定一个初值对方程给定一个初值x0 x0作为方程的作为方程的 近似根,利用迭代公式,求得近似根,利用迭代公式,求得x1, x1, 当当 x1x1为求得的近似根,否则为求得的近似根,否则x1x1作为作为x0 x0再迭代。再迭代。 01 xx x0 x1 )( xf (2) (2) 二分法求根二分法求根 思想:思想: 已知求根区间已知求根区间a,ba,b有一根

29、,每次把求根区间缩小有一根,每次把求根区间缩小 一半,直到找到解或求根区间足够小。一半,直到找到解或求根区间足够小。 方法:求方法:求a,ba,b的中点的中点c c,判断:,判断: f(c)=0,f(c)=0,,c c为求得的根,完毕;为求得的根,完毕; f(a)f(a)与与f(c)f(c)同号,那么同号,那么a,ca,c无根,代替无根,代替a a; 否则否则c,bc,b无根,无根,c c代替代替b b; 使求根区间缩小一半,重复上述步骤,直到区使求根区间缩小一半,重复上述步骤,直到区 间小于精度。间小于精度。 x b a a c f(x) Public Function halfRoot(B

30、yVal a!, ByVal b!) Dim c! Do While Abs(b - a) 0.00001 c = (a + b) / 2 If f(c) = 0 Then Exit Do ElseIf f(a) * f(c) 0 Then a = c Else b = c End If Loop halfRoot = c End Function 6.6.例例6.196.19数值积分数值积分 有矩形法、梯形法、抛物线法又称辛卜生法等。有矩形法、梯形法、抛物线法又称辛卜生法等。 梯形法积分的思想是:梯形法积分的思想是: 将积分区间将积分区间aa,bnbn等分,小区间的长度为,等分,小区间的长度

31、为, 第第i i块小矩形的近似面积为:块小矩形的近似面积为: 整个积分的结果为这整个积分的结果为这n n块小面积的累加,即块小面积的累加,即 : n ab h h xfxf s ii i 2 )()( 1 h xfxf S n i ii 1 1 2 )()( Public Function trapez(ByVal a!, ByVal b!, ByVal n%) As Single Dim sum!, h!, x! h = (b - a) / n sum = (f(a) + f(b) / 2 For i = 1 To n - 1 x = a + i * h sum = sum + f(x) Next i trapez = sum * h End Functi

温馨提示

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

评论

0/150

提交评论