[高一生]监理工程师考试建设工程合同管理试卷_第1页
[高一生]监理工程师考试建设工程合同管理试卷_第2页
[高一生]监理工程师考试建设工程合同管理试卷_第3页
[高一生]监理工程师考试建设工程合同管理试卷_第4页
[高一生]监理工程师考试建设工程合同管理试卷_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

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

2、ycxccareaxyzs=s1+s2+s3传统方法:下面的公式写三次传统方法:下面的公式写三次4.2.1 4.2.1 函数过程的创建和调用函数过程的创建和调用除了系统提供的内部函数过程内部函数过程和事件过程外事件过程外,用户可自定义过程自定义过程:l 以sub保留字开始的为子过程子过程(通用过程);l 以function保留字开始的为函数过程函数过程。1 1函数过程的创建函数过程的创建 函数过程形式: function 函数过程名函数过程名(参数列表(形参) as 类型 局部变量或常数定义局部变量或常数定义 语句块语句块 函数名函数名 = 返回值返回值 函数过程体函数过程体 exit fun

3、ction 语句块语句块 函数名函数名 = 返回值返回值 end function 自定义函数过程有两种方法:自定义函数过程有两种方法: (1)利用“工具工具”菜单下的菜单下的“添加过程添加过程”命令命令定义,生成一个函数的框架。 (2)利用代码窗口直接定义。2.2.函数过程的调用函数过程的调用 函数过程调用函数过程调用同标准函数调用,形式形式:函数过程名函数过程名(参数列表参数列表) 参数列表参数列表:称为实参,它必须与形参个数相同,位置与类型一一对应。可以是同类型的常量、变量、表达式。private sub command1_click()a=val ( inputbaox(“”) )en

4、d sub定义一个函数:多次调用abcdefgs1s2s3xyz定义函数过程area:public function area(x!, y!, z!) as single dim c! c = 1 / 2 * (x + y + z) = 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 send sub例例4-3 编写定义计算任意整数编写定义计算任意整数a阶乘

5、的函数过程阶乘的函数过程fac(n).参考代码:public function fac(a as integer) as longdim p as long, i as integerp=1 累乘初值为累乘初值为1for i=1 to a p=p * inext ifac=p 程序中对函数名赋值程序中对函数名赋值end function调用:a=fac(10)4.2.2 4.2.2 子子 过过 程程的创建和调用的创建和调用2.2.子过程创建子过程创建 sub 子过程名子过程名(参数列表) 局部变量或常数定义 语句 exit sub 语句 end sub3.3.子过程的调用子过程的调用 子过程名

6、子过程名 参数列表 或 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,编写一个能找出两个数中大数的子过程,然后在应用程序中调用它。4.2.3 4.2.3 参数传递参数传递 指主调过程的实

7、参主调过程的实参传递给被调过程的形参被调过程的形参。形参和实参对应关系:形参和实参对应关系:1)对应变量名不必相同,但变量个数相等;2)各实参的书写顺序必须和对应的形参顺序一致,且类型相符。1. 1. 传址与传值传址与传值 传址:传址: 形参得到的是实参的地址地址,当形参值的改变同时也改变实参的值也改变实参的值。 传值:传值:byval 形参得到的是实参的值值,形参值的改变不会影响实参的值不会影响实参的值。4.2.3 4.2.3 参数传递参数传递。例例4-5 两个变量的交换。sub swap1(byval x%, byval y%) t% = x: x = y: y = tend subpri

8、vate sub command1_click() a% = 10: b% = 20: swap1 a, b 传值传值 print a1=; a, b1=; b a = 10: b = 20: swap2 a, b 传址传址 print a2=; a, b2=; bend subsub swap2(x%, y%) t% = x: x = y: y = tend suba的地址 10 10 10aa x x形参实参byval 传值传地址4.3 变量、过程的作用域作用域:变量、过程随所处的位置不同,可被访问的范围。 1.1.过程的作用域过程的作用域( (了解了解) ) 窗体窗体/模块级模块级:加p

9、rivate关键字的过程,只能被定义的窗体或模块中的过程调用。 全局级全局级:加public关键字(缺省)的过程,可供该应用程序的所有窗体和所有标准模块中的过程调用。2. 2. 变量的作用域变量的作用域 局部变量局部变量:在过程内用声明的变量,只能在本过程中使用。 窗体窗体/模块级变量模块级变量:在“通用声明”段中用dim语句或用private语句 声明的变量,可被本窗体/模块的任何过程访问。 全局变量全局变量:在“通用声明”段中用public语句声明的变量,可被本应用程序的任何过程或函数访问。例如在下面一个标准模块文件中不同级的变量声明:option explicitpublic pa as

10、 integer 全局变量全局变量private mb as string *10 窗体窗体/模块级变量模块级变量sub f1( ) dim fa as integer 局部变量局部变量可以访问可以访问pa,mb,不能访问不能访问fbend subsub f2( ) dim fb as single 局部变量局部变量可以访问可以访问pa,mb,不能访问不能访问faend subsub f1(x) x=f2(xx)*3end subsub command1_click() call f1(y)end subfunction f2(x) f2=f3(x)+3end subfunction f3(x

11、) f3=x*xend subsub f1(x) call f1(y)end sub过程的直接调用过程的直接调用sub command1_click() call f1(y)end sub过程的过程的递归调用递归调用4.4 4.4 递归递归1.1.递归的概念递归的概念 用自身的结构来描述自身就称为“递归递归”。例对阶乘的定义: )!2() 1()!1()!1(!nnnnnn2. 递归过程递归过程 过程在自身定义的内部调用自己。 例例4-8 编fac(n)=n! 的递归函数 function fac(n as integer) as integer if n = 1 then fac = 1 e

12、lsefac = n * fac(n - - 1) end if end function11)fac(*11)fac(nnnnnsub command1_click() print “fac(4)=”;fac(4)end sub结果:fac(4)=24递推回归fac(2)=2*fac(1)fac(1)=1fac(4)=4*6fac(3)=3*2fac(2)=2*1fac(3)=3*fac(2)fac(4)=4*fac(3)11)fac(*11)fac(nnnnnn问题: 递归方程:写出递归函数思考若上述fac函数中少了少了 : if n = 1 then fac = 1 即仅有语句:fac

13、= n * fac(n - 1) 程序运行将造成何结果?由此可见构成递归的结构如下由此可见构成递归的结构如下: 1、递归结束条件及结束时的值;、递归结束条件及结束时的值;2、自身的调用自身的调用,并且递归向终止条件发展递归向终止条件发展。若在不同级声明相同的变量名不同级声明相同的变量名如: public temp as integer 全局变量 sub form_load() dim temptemp as integer 局部变量 temp=10 访问局部变量访问局部变量 form1.temp=20 访问全局变量必须加窗体名访问全局变量必须加窗体名 print form1.temp, tem

14、p 显示 20 10 end sub2. 2. 数组参数的传递数组参数的传递 当参数是数组通过传址方式数组通过传址方式进行传递。注意: 在实参和形参中写数组名,忽略维数的定义,但圆实参和形参中写数组名,忽略维数的定义,但圆括号不能省。括号不能省。 被调过程可通过lbound和和ubound函数函数确定实参数组的下、上界。lbound和ubound函数的形式如下:l|ubound(数组名)例 6.7 编一函数tim,求任意一维数组中各元素之积。 调用tim,求 和 function tim(a() as integer) dim t#, i% t = 1 for i = lbound(a) to

15、 ubound(a)t = t * a(i) next i tim = tend function511iiat832iibt调用:调用:sub command1_click() dim a%(1 to 5),b%(3 to 8) t1# = tim(a() t2 #= tim(b() print t1, t2 end sub4.4.子过程与函数过程区别子过程与函数过程区别:(1)函数过程名有值,有类型函数过程名有值,有类型,在函数体内至少赋值一次; 子过程名无值,无类型子过程名无值,无类型,在子过程体内不能对子过程名赋值;(2)调用时,子过程调用是一句独立的语句子过程调用是一句独立的语句。

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

17、义类型名元素名(下标) as 类型名 元素名(下标) as 类型名 end type 例如,以下定义了一个有关学生信息学生信息的自定义类型 type studtype no as integer 学号 name as string * 20 姓名 sex as string * 1 性别 mark(1 to 4) as single 4门课程成绩 total as single 总分 end type元素名:表示自定义类型元素名:表示自定义类型中的一个成员中的一个成员下标:表示是数组下标:表示是数组类型名:为标准类型类型名:为标准类型2 2自定义类型变量的声明和使用自定义类型变量的声明和使用(

18、1) 声明形式: dim 变量名 as 自定义类型名 例 dim student as studtype (2) 引用 形式:变量名变量名.元素名元素名 例 表示student变量中的姓名,第4门课程的成绩,则表示如下:student.name,student.mark(4)3 3自定义类型数组的应用自定义类型数组的应用 例例4-12 利用自定义类型数组,编写一个输入、显示程序。例 打印分形图 二叉树加密和解密加密和解密简单加密的思想是: 将每个字母c加一序数k,式子 c=chr(asc(c)+k), 例如序数k为5,这时 “a”“f”,“a”“f”,“b”“g” 当加序数后的字母超过“z”或

19、“z”则 c=chr(asc(c)-k)。 解密为加密的逆过程。常用算法常用算法 1.1.数制转换数制转换 例 将一个十进制整数m转换成 r (216)进制字符串。 方法:将m不断除 r 取余数,直到商为零,以反序得到结果。4.54.5常用算法常用算法 ( (三)三)3.3.查找查找 (1)顺序查找 例例。 顺序查找根据查找的关键值与数组中的元素逐一比较(数组可无序)public sub search(a() as variant, byval key as variant, index%) dim i% for i = lbound(a) to ubound(a) if key = a(i)

20、 then 找到,元素的下标在index中,结束查找 index = i exit sub end if next i index = -1 找不到, index形参的值为-1end sub平均查找次数平均查找次数 n/2keya(mid) low=mid+1 查找区域缩小一半,继续直到找到或查找区域中无元素.本例用递归实现6.16 sub birsearch(a(), low%, high%, key , index%)(2)二分法查找二分法查找要查找的数组必须有序必须有序。 思想:要查找的关键值key同数组的中间mid项元素比较:123456781112223334445556667778

21、88lowhighmid444key4.4.排序排序选择、冒泡、插入法排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。例例6.17 6.17 实现的步骤: (1)输入欲排序的数据项x;在数组a中找x应所处的位置j; (2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出; (3)将x放入位置j处,一个数据插入完成; (4)有若干个数重复(1)(3)。)( )(1iiiixfxfxx5. 5. 例例6.18 6.18 高次方程求根高次方程求根 有牛顿迭代法、二分法、弦截法等(1)牛顿迭代法迭代公式:思想: 对方程给定一个

22、初值x0作为方程的 近似根,利用迭代公式,求得x1, 当 x1为求得的近似根,否则x1作为x0再迭代。01xx x0 x1 )(xf (2) (2) 二分法求根二分法求根 思想: 已知求根区间a,b有一根,每次把求根区间缩小一半,直到找到解或求根区间足够小。 方法:求a,b的中点c,判断: f(c)=0,,c为求得的根,结束; f(a)与f(c)同号,则a,c无根,代替a; 否则c,b无根,c代替b; 使求根区间缩小一半,重复上述步骤,直到区间小于精度。 x b a a c f(x) public function halfroot(byval a!, byval b!) dim c! do

23、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 = cend function6.6.例例6.196.19数值积分数值积分有矩形法、梯形法、抛物线法(又称辛卜生法)等。梯形法积分的思想是: 将积分区间a,bn等分,小区间的长度为, 第i块小矩形的近似面积为: 整个积分的结果为这n块小面积的累加,即 :nabhhxfxfsiii2)()(1hxfxfsniii112)()(public function trapez(byval a!, byval b!, by

温馨提示

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

评论

0/150

提交评论