江苏计算机等级考试第八章过程_第1页
江苏计算机等级考试第八章过程_第2页
江苏计算机等级考试第八章过程_第3页
江苏计算机等级考试第八章过程_第4页
江苏计算机等级考试第八章过程_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

VisualBasic

(程序选Wl

第8章过程

江苏省计算机等级考试

VisualBasic

教学要求程序送

“掌握VB的两种过程:事件过程和通用过程

“掌握Sub过程的定义

“掌握Function过程的定义

今掌握过程的调用

“掌握参数的传递—按值传递和按地址传递

“掌握递归算法

今掌握变量的作用域

2江苏计算机等

级考试

VisualBasic

教学内容(程序送山|

8.1Sub过程

8.2Fimction过程

8.3过程调用

8.4参数传递

8.5速归过程

8.6变量的作用域

8.7程序示例

3江苏计算机等

级考试

VisualBasic

模块化程序设计程序送

今基本思想:将一个大的程序按功能分割成一些小模块

”特点:

A各模块相对独立、功能单一、结构清晰、接口简单

»控制了程序设计的复杂性

A提高元件的可靠性

»缩短开发周期

A避免程序开发的重复劳动

»易于维护和功能扩充

今开发方法:自上向下,逐步分解,分而治之

4江苏计算机等

级考试

5江苏计算机等

级考试

VisualBasic

8.1Sub过程程序设计/

8.1.1事件过程

•当对象识别某事件后,进行的操作处理——以代码的形式存

储在事件过程中。

•分类:

A窗体事件过程

A控件事件过程

江苏计算机等

级考试

VisualBasic

1定义事件过程程序送H/

•[形式]:

PrivateSubForm_事件名([参数列表])

[局部变量木常数声明]完全由系统

决定,用户

语句块___________________无权修改

EndSub窗体的事件过程名

中不使用其具体名

称,而固定用Form

窗体事件固定有“Private”

关键字,说明它是模块级的

7江苏计算机等

级考试

VisualBasic

2窗体的Initialize、Load、Activate、Gotfocus事省■啰设

•Initialize(初始化)事件——配置窗体时触发

•Load(加载)事件——窗体装入内存时触发

•Activate(激活)事件——窗体被激活时触发

•Gotfocus事件(得到焦点)事件——窗体成为当前焦点时触发

“窗体上无可视控件时,触发窗体的Gotfocus事件;

“窗体上有可视控件时,触发控件的Gotfocus事件;

•执行次序:

Initialize-►Load-►Activate-►Gotfocus

8江苏计算机等

级考试

注意VisualBasic

程序送H/

•窗体的Initialize、Load事件发生在窗体被显示之前,其中可放置

系统初始化命令,但其中语句有所限制;

•窗体加载后,只要不被卸载,就不会再执行Initialize、Load事件,

但Activate事件会多次发生;

•当访问另一窗体上的“非可视”数据或调用其中定义的全局过

程时,只会触发该窗体的Initialize事件,而Load事件不触发;

•当访问另一窗体上的“可视”数据时,会同时触发该窗体的

Initialize和Load事件;

9江苏计算机等

级考试

VisualBasic

3定义控件的事件过程程序山41

•[一般形式]:

PrivateSub控件名—事件名([参数列表])

[局部变量和常数声明]由系统决定,

语句块用户无权修改

EndSub

控件的事件过程名中必须

使用其具体名称

控件事件固定有“Private”

关键字,说明它是模块级的

ro江苏计算机等

级考试

VisualBasic

4建立事件过程程序送H/

•打开“代码编辑器”窗口;

•先选定某对象,再选定事件过程;

•编辑代码;Hi工程1-Forml(Code)_]口国I

三]Load三1

Activate

Click

PrivateSubForm_Load()DblClick

Deactivate

EndSubDragDrop

Di-agOver

GotFocus

Initialize

KeyDown

KeyPress

KeyUp

LinkClose过程

算机等

VisualBasic

PrivateSubCommand1Click。程序山41

使用函数DimmAsInteger,nAsInteger

DimiAsInteger,kAsInteger

DimtAsLong,sAsLong

函数调用(三次)n=Val(Textl.Text)

m=Val(Text2.Text)

~~~fact(n)/(fact(m)*fact(n-m))

Text3.Text=Str(s)

<、EndSub

函数定义PrivateFunctionfact(kAsInteger)AsLong

计算k!DimiAsInteger

<_______fact=1

Fori=1Tok

fact=fact*i

Nexti

EndFunction算机等

级芍依

VisualBasic

过程的引入:程序送

在以下两种情况下,经常使用自定义过程:

(1)应用程序中出现较频繁的处理,仅仅是每次处理的数据不

同而已;

(2)程序中比较复杂的算法,独立出来,增强程序的可读性;

“过程”的引入使得整个程序的结构更加清晰,模块化更强。

14江苏计算机等

级考试

VisualBasic

8.1.2通用过程程序送

•完成某一特定功能的程序段

——通用过程(自定义)

•必须显式调用方可执行;

•分为:

今公有过程(Public)

今私有过程(Private)

15江苏计算机等

级考试

VisualBasic

1通用Sub过程的定义程序送H/

。[一般形式]:

[PrivateIPublic][static]Sub<过程名>([<参数列表>])

<过程体)

EndSub

❖[说明]:

(1)以Sub开头,EndSub结束,,中间是过程体——包括变量声

明和语句块;

(2)以Private为前缀的过程是模块级的,以Public为前缀的过

程是应用程序级的,缺省默认是Public;

(3)Static选项说明过程中的局部变量是静态变量;

(4)过程名的命名规则和变量名相同,在同一个模块中,过程

名必须是唯一的;16江苏计算机等

级考试

说明VisualBasic

程序送H/

(5)参数列表中的参数称为形式参数,可以没有,但无参数时圆

括号不能省略;有多个参数时,参数之间用逗号间隔;

(6)参数说明格式:

[Optional][ByVal|ByRef]v变量名>[()][Asv数据类型刁

其中:

a)若参数是数组,则在变量名后面加一对圆括号,但无维界定义

b)ByVai:指明参数传递方式是传值;

c)ByRef:指明参数传递方式是传地址,为缺省值;

d)若参数是字符型的,必须是不定长字符串;

e)Optional:参数是可选的,必须定义在必选参数后面。

(7)当过程调用结束,即执行到EndSub语句,系统自动返回调

用程序的调用语句处,执行调用语句的下一条语句;

(8)过程不能嵌套定义,但可嵌套调用;

(9)ExitSub语句的功能是提前退出过程调用,返回调用语句。

VisualBasic

程序送H/

伤J:PrivateSubExchange(xAsInteger,yAsInteger)

DimTempAsInteger

Temp=x:x=y:y=Temp

EndSub

该通用过程实现交换功能,包含两

个参数,均是ByRef形式的参数。

18江苏计算机等

级考试

2建立通用Sub过程VisualBasic

方法一:在“代码编辑窗口”的“通用”中自行输入;

方法二:进入代码编辑器窗口,执行“工具”菜单的“添加

过程”,在“添加过程”对话框中输入定义过程的名称、类型

和范围后单击“确定”按钮,系统会自动在代码窗口添加自定

义过程的框架C

19江苏计算机等

级考试

VisualBasic

3Sub过程调用____________________程序送

必须在事件过程或其它通用过程中显示调用。

PrivateSubsubl()PrivateSubsub2(形参表)

......I①

CallSub2(实参表口过程语句

■"■"I5I■■的

EndSub1-EndSub

主调程序被调过程

注意:一个过程或函数可以被调用多次:

20江苏计算机等

级考试

Sub过程调用P164VisualBasic

程序山41

[格式一]:Call<过程名>[(<实在参数表))]

[格式二]:<过程名>[<实在参数表》]

[功能]:对已定义的过程进行调用。

如:

1.CallFact(x)

2.Factx

江苏计算机等

级考试

VisualBasic

说明程序送

(1)调用的过程必须是已经定义的,否则系统会出现“子程

序或函数未定义”的信息提示;

(2)实在参数可以是常量、变量或表达式;

(3)实在参数的数目及类型要和定义时必选参数保持一致,

否则系统会出现“参数不可选”的信息提示,参数之间用逗号

间隔;

(4)若子程序没有参数,则格式一中的括号可以省略;

(5)格式一和格式二的区别在于:格式二的参数表无须括号,

而是和过程名之间用空格隔开;

江苏计算机等

22

级考试

VisualBasic

"程序选id

例8・2试编写一个找出任意一个正整数的因子的程序

P165

23江苏计算机等

级考试

程序说明:

OptionExplicit定义子程序factor

PrivateSubCommandl_Click()求因子,该子程序定义

DimintaAsInteger,stAsString

了两个参数,来传递求

inta=Textl

Callfactorfinta^st)因子实现前的原始数据

Text2=st过程factor和返回功能实现后的结

EndSub果数据;

PrivateSubfactor/ByValnAsInteger,iAsString)

DimiAsInteger定义过程

Fori=1Ton-1

IfnModi=0Thens=s&Str(i)

Nexti

EndSub

优点:程序即Sub过程的使用不仅可以缩短程序的长度,还能

24江苏计算机等

够使程序的结构更加清楚。级考试

VisualBasic

程序设计)

例:定义一个通用过程用以求一维数组中的最小值

PrivateSubvalue(a()AsInteger,minAsInteger)

DimiAsInteger

min=a(l)

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

Nexti

EndSub

25江苏计算机等

级考试

VisualBasic

8•2Function过程程序送H/

Function过程的特点是返回一个值,因此我们通常也称之

为自定义函数。通常我们利用Function过程得到一个数值或一个

字符串或一个逻辑值。

函数返回值的类型

[格式]:

[Private|Public]Functionv函数名〉([参数歹]表D[Asv娄I据类型>]

v函数体〉

EndFunction函数名=表达式

江苏计算机等

26

级考试

VisualBasic

说明程声殳%!

(1)以Function开头,以EndFunction结束,中间是函数体;

(2)函数名命名规则、参数列表的表示都和Sub过程相同;

(3)As数据类型:函数过程修由函数名返回一个值,值的类型

由[As数据类型]定义;★

(4)函数体中一定要有对函数名赋值的语句——函数名=表达式,

否则返回相应类型的初值;★

(5)函数体内可有ExitFunction语句---无条件退出函数过程,

返回主程序。

(6)Function过程不能嵌套定义,但可嵌套调用。

27江苏计算机等

级考试

VisualBasic

程序送H/

例:定义函数:/(x)=3x3—2x2+6x—l

函数返回值的类型

PrivateFunctionf(ByValxAsInteger)AsInteger

f=3*xA3-2*xA2+6*x・l__________

EndFunction函数名=表达式

28江苏计算机等

级考试

ExitFunction

Else

ForK=1ToN

Fact=Fact*K函数名=表达式

NextK

EndIf

EndFunction

江苏计算机等

29

级考试

VisualBasic

2调用Function过程______________程声殳%!

[格式]:〈函数名〉([实在参数表])

♦:♦[功能]:返回一个函数值。

♦:♦[说明]:

(1)一般情况下,函数的调用出现在赋值语句中,并且在赋值号

的右侧;

(2)若函数没有参数,函数名后的括号不能省略;

(3)虽然VB允许象调用Sub过程那样调用Function过程,但这样

调用时系统不返回函数值,建议大家不要使用这种调用方法。

例Callfact(x)

如:Factx这两种方法均放弃函数的返回值

30江苏计算机等

级考试

VisualBasic

例:用函数实现求一维数组中的最小值,对比前例(Sub)

PrivateFunctionmin(a()AsInteger)AsInteger

DimiAsInteger

min=a⑴回数类型

Fori=2ToUBound(a)

Ifa(i)<minThenmin=a(i)

函数名=表达式

Nexti

EndSub

31江苏计算机等

级考试

VisualBasic

程序送H/

例:定义函数用以判断一个数是否是素数一

PrivateFunctionPrime(NAsInteger)AsBoolean

DimiAsInteger

Prime=False-------1----

可省略,因Prime的初始值就是fake

Fori=2ToN-l

IfNModi=0ThenExitFor

Nexti

Ifi=NthenPrime=True-------

函数名=表达式

EndFunction

32江苏计算机等

级考试

VisualBasic

[例]:S=l!+2!+…+10!对比P171

PrivateSubForm_Click()

DimSAsLong,iAsInteger

Fori=1To10

Nexti函数调用:s=s+Fg电。

Print"S=";S

EndSub

江苏计算机等

级考试

VisualBasic

例8-3:利用函数过程编写一个求两个正整数的最大公约数的程序

P166

PrivateFunctionGcd(ByValAAsInteger,ByVaiBAsInteger)AsInteger

DimRAsInteger

R=AModB

DoWhileR<>0PrivateSubForm_Click(),上调过程

A=BDimNAsInteger,MAsInteger,GAsInteger

输入

B=RN=InputBoxC'N")

M=InputBoxC'输入M")

R=AModB

G=Gcd(N,M)

LoopPrintN;"和";M;”的最大公约数是:";G

Gcd=BEndSub

EndFunction

34江苏计算机等

级考试

VisualBasic

834调用其他模块中的过程程序送

1、调用其他窗体模块中的公有过程

[格式]:CallV窗体名>.V过程名>[(V实在参数表,)]

[功能]:调用其他窗体模块中定义的公有过程。

PrivateSubForm_Click()在Form2

中调用

DimaAsInteger

a=10

PrintFurml.Fact(a)

EndSub

江苏计算机等

级考试

VisualBasic

2、调用标准模块中的公有过程程序送H/

[格式]:Call卜标准模块名>.]<过程名刁(v实参表>)]

[功能]:调用其他标准模块中定义的公有过程。

♦[说明]:

♦:♦若公有过程唯一,则直接调用,不加模块名。

♦:♦若存在同名的公有过程,贝上

A调用本模块中过程:直接调用,不加模块名

A调用其它模块中过程:必须加模块名。

A被调用的函数和过程必须是公有的;

A函数也可以这样调用。

36江苏计算机等

级考试

VisualBasic

3调用类模块中的过程程序送H/

*[格式]:(不做要求、

dimdemoclassasnewclassl/—

calldemoclass,clssub([实参表]KZ

♦:♦[注意]:

调用类模块中的共有过程,须用该类的某一实例修饰过程。

37江苏计算机等

级考试

VisualBasic

8.4参数的传递程序送H/

8.4.1形式参数和实在参数

①形式参数:

米过程定义时,在过程名后面的圆括号里的一系列变量;

*过程被调用执行时,系统才给形参分配存储空间;

*可以是除定长字符串外的任一简单变量;

*可以是数组,变量名后接吠

米简称,形参"1stAsString*3X

St()AsString^3N

StAsString<

江苏计算机等

级考试

VisualBasic

①实在参数程序送H/

米主调程序中,调用语句中,出现在过程名后面圆括号里的变

量,是实在参数,可以是常量、变量或表达式;

*过程调用传递参数时,实参按“位置”和形参结合;

*实在参数和形式参数,要求个数一样,位置对应,类型一

致,否则会出错;

*定长字符串变量可以作为实在参数;

*简称“实参”

39江苏计算机等

级考试

VisualBasic

参数结合:(程序送山|

形参实参

变量变量、常量、表达式、数组元素

数组数组

40江苏计算机等

级考试

VisualBasic

举例:程序送H/

常量

41江苏计算机等

级考试

VisualBasic

举例:写出下列程序执行的结果(程序送山|

PrivateSubExamSubf\asinteger,y^asinteger)

x=x+10:y=y-10

过程的先

EndSub后顺序无

PrivateSubForm-click()

o

Dimxasinteger,yasinteger

x=10:y=100—

CallExamSub(y,x)--------------

调用子过程时,进行的实

Print“x=”;x;"y=”;y际操作是丫=丫+10双=乂-10

EndSub

42江苏计算机等

级考试

VisualBasic

842按值传递参数程序送H/

[格式]:ByVaiv变量说明》

[传递方式]:

调用时,系统为形参分配一个临时存储单元,并修实参

的值存储到该临时单元中。

若在被调用的过程体中改变了形参的值,只是改变了临时

存储单元中的数据,对实参的值无任何影响。

43江苏计算机等

级考试

[参数传值传递]举例:VisualBasic

程序送H/

PrivateSubForm_Click()

DimMAsInteger,NAsInteger

M=15:N=20

CallValue_change(M,N)

Print,,M金;MJ,N=,,;N

EndSub

PrivateSubValue_change(ByValxAsInteger,ByVaiyAsInteger)

x=x+20

y=y+20

PrintnX=n;x,"Y=";y

EndSub

44江苏计算机等

级考试

VisualBasic

传值是单向的:(程序送山|

实在参数

形式参数

调用时,实参将值传递给形参,两者就无任何关联。过

程中形参的值发生变化,对实参无任何影响。

45江苏计算机等

级考试

VisualBasic

843按地址传递参数程序送H/

[格式]:ByRefv变量说明》

[传递方式]:

系统在调用执行过程时,为形参分配临时存储单元,并修实

参的内存单元地址传送给形参,存储在临时存储单元中

在被调用的过程体中一切对形参的操作,都是直接对地址保

存在形参中的内存单元中的数据进行的,而实参就是保存在此内

存单元中的数据,所以任何对形参的操作也就是对实参的操作;

按地址传递时,形式参数和实在参数共用同一“内存单元”。

江苏计算机等

级考试

VisualBasic

[参数传址传递]举例:(对比前例)(程序送山|

PrivateSubForm_Click()

DimMAsInteger,NAsInteger

M=15:N=20

CallValue(M9N)

PrintMM=M;M,nN=M;N

EndSub

PrivateSubValue(xAsInteger,yAsInteger)

x=x+20

y=y+20

PrintnX=n;x,nY=n;y

EndSub

47江苏计算机等

级考试

VisualBasic

传地址是双向的:(程序送山|

实在参数

形式参数

48江苏计算机等

级考试

举例:计算5!+4!+3!+2!+1!P171VisualBasic

PrivateSubForm_Click()

DimSumAsInteger,IAsInteger

ForI=5To1Step-1

Sum=Sum+Fact(I)

NextI

PrintnSum=n;Sum

EndSub

PrivateFunctionFact(nAsInteger)AsInteger

DoWhilen>0修改:

Fact=Fact*n方法一:在形参n前加ByVai

n=n-1

Loop方法二:将调用语句中fact⑴改为

EndFunctionfact(⑴)

a人y

注意VisualBasic

程序送H/

参数有两种传递方式:传值(ByVai)和传地址(ByRef)o

若调用时实参为常量或表达式,这两种方式没有区另山无论形

参定义的是按值传递还是按地址传递,系统都是按传值方式传递

系统在调用时为形参分配一个临时存储单元,圈表达式的值

计算出来,存储到该临时单元;调用结束,系统收回临时单元。

调用函数或过程时,将单个变量转换成表达式的方法:将变

量放在一对括号中。如用Fact((I))的方式调用函数,系统会按传

值来处理。

50江苏计算机等

级考试

VisualBasic

注意程声殳%!

♦按地址传递时,当实参是变量时,实参与形参必须类型完

全一致;

♦按地址传递时,当实参是常量或表达式时,VB会自动进

行类型转换,然后再传递相应的值(即类型无须完全一致)函

♦在算术表达式中,函数的优先级最高,若表达式中有函数

的实参,而函数的参数又是按地址传递的,则函数中有可能改变

了实参的值,即改变了表达式中变量的值,会引起混淆。见树

51江苏计算机等

级考试

举例:VisualBasic

程序送H/

PrivateSubForm_Click()

DimSAsSingle

S=125.5

CallConvert(⑸,”12笛.5”)

EndSub

实际的参数传递方式是按

Sing=Sing+23值传递,强制转换后,

Print“Inx=";Inx,"Sing=";Singinx=126sing=12・5

EndSub

52TT77F

级考

练习

4-

(1)写出程序运行结果(2)若改为按值传递,结果又如何?

DimpAsinteger,qAsinteger,rAsinteger

PrivateSubForm_Click()

p=2:q=3

Printp9q,r

Callpq(p,q,r)

Printp,q,r

EndSub

PrivateSubpq(xAsinteger,yAsinteger,zAsinteger)

x=p+q

y=p-q

z=x+y

EndSub

级芍讽

VisualBasic

(程序送山|

写程序运行的结果:------

OptionExplicit・Forml

PrivateSubcommandl_click()二叵区I

工二11产2K=43

DimiAsInteger,jAsInteger

DimkAsInteger

i=l:j=2

k=fun(i,fun(i,j))+i+j.笄逋

Print"1='';i;f,J=n;j;"K='';k

EndSub

PrivateFunctionfun(aAsInteger,ByVaibAsInteger)AsInteger

a=a+b

b=b+a

fun=a+b

EndFunction学

VisualBasic

844数组参数____________________程序送H/

VB允许把数组作为形式参数,声明数组的格式是:

v数组名〉()Asv数据类型〉

[注意]:

(1)数组参数只能按地址传递,即不能用ByVa]来4多饰数组参数

(2)定义数组参数时无须说明数组的维数和下标变化范围;

(3)调用过程时,对应的实在参数也必须是数组,但只需要数

组名,无须后跟括号,且数据类型也要一致。'

(4)在过程体或函数体中无须对数组参数再次说明;

(5)若实参是动态数组,在过程体或函数体中可以使用重定义

语句修改数组的维界;

56江苏计算机等

级考试

举例VisualBasic

PrivateSubForm_Click()PrivateSubPrintArray(x()AsInteger)

Dima()AsInteger,iAsIntegerDimiAsInteger

DimnAsIntegerFori=LBound(x)ToUBound(x)

n=InputBox("请输入数组的初始大小,Printx(i);

ReDima(n)Nexti

Fori=1TonPrint

a(i)=iEndSub

NextiPrivateSubArrayl(a()AsInteger)

CallPrintArray(a)DimmAsInteger,nAsInteger

CallArrayl(a)n=UBound(a)

CallPrintArray(a)m=InputBox—请输入新大小”)

EndSubReDimPreservea(m)

输入5和8,程序执行结果为:DimiAsInteger

Fori=n+1Tom

a(i)=0

Nexti

EndSub

举例:自定义一个将一维数组按从小到大排序的通用过程。

PrivateSubsort(a()AsInteger)PrivateSubCommandl_Click()

DimiAsInteger,jAsIntegerDimiAsInteger,jAsInteger

Fori=1ToUBound(a)-1Dima(10)AsInteger

Forj=i+1ToUBound(a)Fori=1To10

Ifa(i)>aO)Thena(i)=Int(8*Rnd)

temp=a(i)Picturel.Printa(i);

a(i)=a(j)Nexti

a(j)=tempCallsort(a)

EndIfFori=1To10

NextjPicturel.Printa(i);

NextiNexti

EndSubEndSub

厂江苏计算机廿

级考试

练习

4-

完善程序:本程序的功能是找出100〜200之间的所有素数。

PrivateSubForm_Click()

DimiAsInteger,xAsInte

若不希望实参随形参

Fori=100To200改变,就将参数传递

IfPrimed)Then

温馨提示

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

评论

0/150

提交评论