1、第2章Visual Basic语言基础,了解编写VB6.0程序代码的书写规则理解VB6.0中的各种数据类型和常用函数掌握编写VB6.0程序代码的基本语 掌握编程中数组和过程的用法,本章学习目标,2.1程序的书写规则,1VB6.0代码中不区分字母的大小写。 2在同一行上可以书写多条语句,语句间要用冒号“:”分隔。 3若一个语句行不能写下全部语句,或在特别需要时,可以换行。换行时需在本行后加入续行符,1个空格加下划线“_”。 4一行最多允许255个字符。 5注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。 6在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。 7
2、. VB6.0中的标识符:用来标记变量名、函数名和类型名。以字母或下划线开始,后跟字母、数字或下划线组成的字符串(中间不许有空格)。,2.2数据类型,一、标准数据类型,二、自定义数据类型,在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。使用形式:Type 自定义类型名元素名 (下标) As 类型名元素名 (下标) As 类型名. . .End Type 说明:,(1) TypeEnd Type 关键字; (2) 元素名 表示自定义类型中的一个成员; (3) 下标 表示该成员是一个数组; (4) 类型名 表示该成员的标准数据类型。,例如: 对于一个学生的“学号”、“姓名”、“
3、性别”、“年龄”、“入学成绩”等数据,为了处理数据的方便,常常需要把这些数据定义成一个新的数据类型(如Student类型)。,Type StudentXh As StringXm As StringXb As StringNl As Integer Score As SingleEnd Type,2.3变量、常量和函数,2.3.1变量 一、变量的命名规则 (1) 必须以字母开头,由字母、汉字、数字或下划线组成。例如xyz、h_12等变量名都是正确的;而5f、*123是非法的。 (2) 不能在变量名中出现句点“.”、空格或者嵌入字符:!、#、$、%、& (3) 长度不得超过255个字符。 (4)
4、 不能使用VB的关键字。关键字是语言的组成部分,其中包括预定义语句(例如If、For等)、函数(Abs、Sqr等)和操作符(Or、Mod等)。 注意:在同一个范围(范围是可以引用变量的域,如一个过程、一个窗体等)内,变量名必须是唯一的。,二、变量的声明 1.用Dim语句显式声明变量形式:Dim 变量名 AS 类型Dim 变量名类型符例:Dim ab As integer , sum As single等价于 Dim ab%, sum! 2.隐式声明Visual Basic允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是V
5、ariant数据类型。Visual Basic根据程序中赋予变量的值来自动调整变量的类型。 例如:,下面是一个很简单的程序,其使用的变量a, b, Total都没有事先定义。 Private Sub Form_Click() Total = 0 a = 10: b = 20 Total = a + b Print “Total=“; Total End Sub,3强制显式声明Option Explicit语句,良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。Visual Basic 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明
6、段中加入语句: Option Explicit,2.3.2常量,在程序运行过程中,其值不能被改变的量称为常量。在VB中有三类常量:普通常量 符号常量 系统常量。 一、普通常量 1 整型常量(1)整型(Integer):表示-32768至32767之间的整数例如:10 110 20(2)长整型(Long):表示-2,147,483,648至2,147,483,647之间的整数例如:长整型常数的书写: 23&,通常我们说的整型常量指的是十进制整数,但VB中可以使用八进制和十六进制形式的整型常数,因此整型常数有如下三种形式:,1)十进制整数。如125,0,-89。20 2)八进制整数。以&或&O(字
7、母O)开头的整数是八进制整数,如&O25表示八进制整数25,即(25)8 ,等于十进制数21。3)十六进制。以&H开头的整数是十六进制整数,如&H25表示十六进制整数25,即(25)16 ,等于十进制数37。VB中的颜色数据常常用十六进制整数表示。,2、实数 1)单精度实型(Single):有效数为7位 2)双精度实型(Double):有效数为15位 常量的表示: 1)十进制小数形式。它是由正负号(+,-)、数字(09)和小数点(.)或类型符号(!、#)组成,即n.n,n!或n#,其中n是09的数字。 例如0.123、.123、123.0、123!、123#等 2)指数形式。 nEm 或 n.
8、nEm, nDm 或 n.nDm例:1.25E+3 和 1.25D+3相当于1250.0 或者1.25103。,3、字符串常量 在VB中字符串常量是用双引号“”括起的一串字符,可以是所有西文字符和汉字、标点符号等; 例如“ABC“,“abcdefg“,“123“,“0“,“VB程序设计“等。 说明: (1)“表示空字符串,而“ “表示有一个空格的字符串; (2)若字符串中有双引号,例如ABD“XYZ,则用连续两个双引号表示,即:“ABD“XYZ“ 4、逻辑(Boolean)数据类型只有两个值True,或False。将逻辑数据转换成整型时:True为-1,False为0;其它数据转换成逻辑数据时
9、:非0为True, 0为False。,5、日期常量日期(Date)型数据按8字节的浮点数来存储,表示日期范围从公元100年1月1日9999年12月31日,而时间范围从0:00:0023:59:59。一种在字面上可被认作日期和时间的字符,只要用号码符“#”括起来,都可以作为日期型数值常量。例:#09/02/99#、#January 4,1989#,#2002-5-4 14:30:00 PM#都是合法的日期型常量。,二、符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。 VB中使用关键字Const 声明符号常量。其格
10、式如下:Const 常量名 As 类型 =常数表达式或:Const 类型符号=常数表达式 例如:Const PI As Double=3.1415926535 等价于:Const PI#=3.1415926535,三、系统常量VB系统提供的应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中的 Visual Basic(VB) 和 Visual Basic for applications(VBA)对象库中列举了 Visual Basic 的常数,例如,要将文本框Text1的前景颜色设置为红色,可以使用下面的语句:Text1.ForeColor=vbRed这里的vbRed
11、就是系统常量。这比直接使用16进制数来设置要直观得多。,2.3.3常用内部函数,VB提供了上百种内部函数(库函数),要求掌握这些常用函数的功能及使用。调用方法:函数名(参数列表) 有参函数函数名 无参函数说明: (1) 使用库函数要注意参数的个数及其参数的数据类型(2) 要注意函数的定义域(自变量或参数的取值范围)例如: sqr(x) 要求: x=0(3) 要注意函数的值域。如:exp(23773) 的值就超出实数在计算机中的表示 范围。,1、数学函数常用的数学函数见表2-2所示 Abs(N) Cos(N) Sin(N) Exp(N)Log(N) Sqr(N) Rnd(N) Sgn(N) 说明
12、:(1) 在三角函数中的自变量是以弧度为单位。如:sin300 sin(3.14159/180*30)(2)Rnd函数返回0 1(包括0和不包括1)之间的双精度随机数。若要产生1-100的随机整数: Int(Rnd *100)+1提问:怎样产生N,M区间的随机数?,2. 字符串函数(常用的字符串函数见表2-3)说明: 如果返回是字符型,则函数后有“$”字符。当然一般也可以不写,习惯都写上。例如:len(“This is a book!“) 15Left$(“ABCDEFG“,3) “ABC“ Right (“ABCDEFG“,3) “EFG“ Mid$(“ABCDEFG“,2,3) “BCD“
13、Ucase(“ABcd“) “ABCD“Lcase(“ABcd“) “ abcd“ Trim(“ Abcd “) “ABcd“String(5, “A “ ) “AAAAA“InStr(2, “ABCDEFGEF”, “EF”) 5(第一次出现的位置),3. 日期、时间函数常用的日期时间函数见表2-4掌握: Time( ) Date( ) NowYear( ) Month( ) Day( ),4.格式输出函数使用格式: Format$(表达式,“格式字符串”)功能:按用户指定格式返回表达式,常常用在print方法中。使用形式:print Format$(表达式,“格式字符串”)表达式:可以是数
14、值、日期或字符串型表达式。格式字符串:表示输出表达式时采用的输出格式。不同数据类型所采用的格式字符串是不同的。,(1)数值型数据格式化(见表3-12)注意:对于符号:0与#,当数值的实际位数比格式控制给定的位数多时,系统将按四舍五入返回给定的位数。如:Format(3.14159, “#.#”), 其值为 3.142Format(3.14159,“000.000”), 其值为 003.142(2)日期和时间型数据格式化(见表3-13)缺省日期格式为:“mm/dd/yy”, 缺省时间格式:“hh:mm:ss”(3)字符串类型数据格式化(见表3-14),5. 输入和输出函数1. 输入函数Input
15、Box 变量名=InputBox$(, , ) 其中:提示 提示信息,标题 标题区显示,缺省输入区缺省值。 例如:要在屏幕上显示如下的对话框:,例如:有下列语句如下:Dim x% x= Val(InputBox(“请输入一个数”, “输入框”, 100) 语句执行后打开如下对话框。,2. MsgBox函数和MsgBox过程函数形式:变量% = MsgBox(提示,按钮图标+缺省按钮+模式,标题)过程形式: MsgBox 提示,按钮图标 +缺省按钮+ 模式,标题,说明: “标题”和“提示”与InputBox函数中对应的参数相同; “按钮图标 +缺省按钮+模式”是整型表达式,决定信息框按钮数目、出
16、现在信息框上的图标类型及操作模式(见表4.1) 若程序中需要返回值,则使用函数,否则可调用过程。,按钮及图标值如下:,根据用户所选按钮,函数返回17的整数值,其含义如下表:(表4.2),2.4运算符和表达式,一、算术运算符和表达式 例:5+2*10 mod 10 9 / 3 +2 2 结果是:,二、 关系运算符与关系表达式,比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True,若关系不成立,结果为False。VB中的关系运算符如下表所示。,例: “100“ + 123 结果为 223 “100“ + “123“ 结果为 100123 “Abc“ + 123 出错
17、“100“ & 123 结果为 100123100 & 123 结果为 100123“Abc“ & “123“ 结果为 Abc123 “Abc“ & 123 结果为 Abc123,注意:使用运算符“&”时,变量与运算符“&”之间应加一个空格。这是因为符号“&”还是长整型的类型定义符,如果变量与符号“&”接在一起,VB系统先把它作为类型定义符处理,因而就会出现语法错误。,关系运算的规则如下:(1)当两个操作式均为数值型,按数值大小比较。(2)字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止.。例: “ ABCDE “ “ ABRA “ 结果为 False,(3)数值型
18、与可转换为数值型的数据比较,如:29“189“ ,按数值比较,结果为False。 (4)数值型与不能转换成数值型的字符型比较,如:77“ sdcd“ ,不能比较,系统出错。 (5)“Like”运算符是VB6.0新增加的。其使用格式为:str1 Like str2,三、逻辑运算符与逻辑表达式 逻辑运算符:Not,And,Or Xor Eqv Imp,说 明:(1)逻辑运算符的优先级不相同,Not(逻辑非)最高,但它低于关系运算,Imp(逻辑蕴含)最低。(2)VB中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。 例如:数学上表示某个数在某个区域时用表达式: 10X=
19、10 And X20 如果写成如下形式将是错误的:10=x20 或 10=x Or x20,例:用人单位招聘秘书:年龄小于40岁,女性,学历专科或本科:写成条件VB的表达式:年龄=39 性别=“女” 学历=“专科” 学历=“本科”,四、 字符串运算符与字符串表达式 字符串运算符有: 、+ 。 功能是字符串连接 例如:“ABCD“ + “EFGHI“ 结果为:ABCDEFGHI “ VB ” & “程序设计教程” 结果为:VB程序设计教程 说明:当连接符两旁的操作量都为字符串时,上述两个连接符等价。它们区别是: +(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也
20、可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,2.5基本语句,VB程序设计有三种基本结构:顺序结构、选择结构和循环结构。其中赋值语句、条件语句和循环语句是在这三种结构程序设计中最基本、最常用的语句。,2.5.1赋值语句 形式: 变量名表达式对象.属性表达式 功能: 将表达式的值赋值给变量名或指定对象的属性。 一般用于给变量赋值或对控件设定属性值. 例: sRate!=0.1Text1.Text “欢迎使用Visual Basic 6.0”,说明:1 执行过程:先求表达式的值,然后将值赋值给左边的变量。2 右边的表达式可以是变量、常量、函数调用等特殊的表达式。3 不
21、要将“”理解为数学上的等号:A=A+1 是表示将A单元的值加后以放回到A单元。 4赋值符号“=”左边一定只能是变量名或对象的属性引用,不能是常量、符号常量、表达式。 下面的赋值语句都是错的: 5=X 左边是常量。 Abs(X)=20 左边是函数调用,即是表达式。5. 赋值符号“=”两边的数据类型一般要求应一致,2.5.2条件语句条件语句用于根据条件产生相应的动作。使用条件语句可以控制程序执行的流程。VB中常用的种条件语句有IfThen语句、IfThenElse语句、Select Case语句。,1. IfThen语句(单分支结构)If Then语句块End If或 If Then ,例:已知两
22、个数x和y,比较它们的大小, 使得x大于y。If xy Thent=x : x=y: y=tEnd If或 If xy Then t=x: x=y: y=t,2. IfThenElse语句(双分支结构)If ThenElseEnd IfIf Then Else ,双分支选择结构执行过程,例如:输出x,y两个中值较大的一个值。 IF XY ThenPrint X ElsePrint Y End If 也可以写成如下的单行形式:IF XY Then Print X Else Print Y,3. IfThenElseIf语句(多分支结构)形式: If ThenElseIf Then Else 语句
23、块 n+1 End If,4. Select Case语句(情况语句) 形式:Select Case 变量或表达式Case 表达式列表1语句块1Case 表达式列表2语句块2Case Else语句块n+1End Select,数值型或字符串表达式, 说明:与同类型的下面四种形式之一:表达式 A +5一组枚举表达式(用逗号分隔) 2, 4, 6, 8 表达式1 To 表达式2 60 to 100 Is 关系运算符表达式 Is 60,例如:将例4.3 使用select case语句来实现的程序段如下: Select Case x Case 90 to 100Print “优秀“Case 80 to
24、 89Print “良好“Case 70 to 79Print “中等“Case 60 to 69Print “及格“Case Else Print “不及格“ End Select,2.5.3循环语句 循环语句用于完成一些重复的操作。VB的循环语句有: l ForNext l For EachNext l DoLoop l WhileWend,一、 For循环语句 (一般用于循环次数已知) 形式:For 循环变量初值 to 终值 Step 步长语句块Exit For语句块Next 循环变量,循环次数,例: For I=2 To 13 Step 3 Print I , Next I Print
25、 “I=“, I,循环执行次数 输出I的值分别为:2 5 8 11 出了循环输出为: I=14,例4.6 编程计算:S=1+2+3+100,Dim S%, I% S=0 累加前变量S为0 For I=1 to 100 S=S+I Next I Print “ S=“,S,例4-5的算法流程图,二、 DoLoop循环语句,形式1:(当型循环) Do While|Until 语句块Exit Do语句块Loop,形式2:(直到循环)Do 语句块Exit Do语句块Loop While|Until ,Do UntilLoop执行过程 DoLoop Until执行过程,说明:(1)当使用While构成循
26、环时,当条件为“真”,则反复执行循环体,当条件为“假”,则退出循环。(2)当使用Until 构成循环时,当条件为“假”,则反复执行循环体,直到条件成立,即为“真”时,则退出循环。,(3)在循环体内一般应有一个专门用来改变条件表达式中变量的语句,以使随着循环的执行,条件趋于不成立(或成立),最后达到退出循环。(4)语句Exit Do的作用是退出它所在的循环结构,它只能用在DO/Loop结构中,并且常常是同选择结构一起出现在循环结构中,用来实现当满足某一条件时提前退出循环。,3. WhileWend语句 使用格式如下: While Wend说明:该语句的功能与Do While .Loop实现的循环
27、完全相同。,例:用doLoop语句改写前面的例题4.5,例2.8 求两个整数的最大公约数、最小公倍数,Dim n%,m%,nm%,r% m=Val(InputBox(“m=“) n=Val(InputBox(“n=“) nm=n*m If m 0) m=nn=rr= m mod nLoop Print “最大公约数=“, n Print “最小公倍数=“, nm/n,算法流程图,4. 循环的嵌套多重循环结构如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几
28、种常见的二重嵌套形式:,(1)For I=.For J=.Next JNext I,(2)For I=.Do While/Until .LoopNext I,(3)Do While.For J=.Next JLoop,(4)Do While/Until.Do While/Until .LoopLoop,例如:打印九九乘法表.For i = 1 To 9For j = 1 To 9 se = i Next jPicture1.PrintNext i,对于循环的嵌套,要注意以下事项:(1) 内循环变量与外循环变量不能同名;(2) 外循环必须完全包含内循环,不能交叉;(3) 不能从循环体外转向循环体
29、内,也不能从外循环转向内循环.下面是正确的嵌套,下面是不正确的嵌套,For i =1 To 10For j=1 To 20 Next i Next j,For i =1 To 10 For i=1 To 20 Next i Next i,对于循环的嵌套,要注意以下事项: (1) 内循环变量与外循环变量不能同名; (2) 外循环必须完全包含内循环,不能交叉;(3) 不能从循环体外转向循环体内,也不能从外循环转向内循环.,2.6数组,2.6.1数组的概念 2.6.2 一维数组的声明 2.6.3动态数组 2.6.4数组的基本操作,2.6.1 概 述 数组的概念:数组并不是一种数据类型,而是一组相同类
30、型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。,VB中数组的表示形式:A(1), A(10) 一维数组X(1,1), X(2,10) 二维数组Y(0,0,0), Y(1,2,5) 三维数组,Visual Basic中的数组分类: 按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。 按元素的数据类型可分为:数值型数组、字符串数组、逻辑数组、日期型数组、变体数组等、对象数组。 按数组的维数可分为:一维数组、二维数组、多维数组。,2.6.2一维数组: 1.一维数组的形式,Dim 数组名(to)As
31、或: Dim 数组名(to) 例:Dim a(1 to 10) As Integer 声明了a数组有10个元素,与上面声明等价形式: Dim a%(1 to 10),1是下标的下界,10是下标的上界,数组元数的数据类型,说明:1数组名的命名规则与变量的命名相同。2数组的元素个数:上界-下界+1。3缺省为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将设为1。其使用格式是:Option Base 0|1 后面的参数只能取 0 或 1例如:Option Base 1 将数组声明中缺省下标设为 1,4和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。
32、,Dim N As Integer N=Val(InputBox(“Enter N=?”) Dim A(N) As Integer,5如果省略As子句,则数组的类型为变体类型。 6数组中各元素在内存占一片连续的存储空间。,使用形式: 数组名(下标) 其中:下标可以是整型变量、常量或表达式。 例如: 设有下面的数组定义:Dim A(10) As Integer ,B(10) As Integer则下面的语句都是正确的。A(1)=A(2)+B(1)+5 取数组元素运算A(i)=B(i) 下标使用变量B(i+1)=A(i+2) 下标使用表达式,1. 可通过循环给数组元素的初值For i = 1 To
33、 10 A数组的每个元素值为1 A(i)=1Next i 2. 数组的输入 输入10个数,并存入到数组A中 For i = 1 To 10A(i) =Val( InputBox(“输入A(” & i & “) 的值”) )Next i,3. 求数组中最大元素及所在下标Dim Max As Integer, iMax As IntegerMax = A(1): iMax = 1For i = 2 To 10If A(i) Max Then Max = A(i)iMax = iEnd IfNext iPrint “A(“ A(iMax),4. 将数组元素倒置,For i =1 To 102t=A(
34、i)A(i)=A(10-i+1)A(10-i+1)=t Next I,2. 一维数组的应用 一、分类统计 例5.2在例5.1中如果还要统计09,1019,2029,.8089,9099分数段及100分的学生人。则可另用数组bn来存各分数段的人数,并用bn(0)存09分的人数,bn(1)存1019分的人数,bn(9)存9099分的人数,bn(10)存100分的人数。,数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用的有选择法、冒泡法。 1选择法排序,算法 (升序 )( 设有n个数,存放在数组A(1)A(n)中)1)第1遍:从中选出最小的数,与第 1个数交换位置;(演示),
35、2)第2遍:除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置; (演示),3)依次类推,选择了n-1次后,这个数列已按升序排列。,选择法排序算法的流程图:,选择法排序(升序)的VB程序:,For i = 1 To n - 1p = iFor j = i + 1 To nIf a(p) a(j) Then p = jNext jt = a(i): a(i) = a(p): a(p) = t Next i,思考:如果按降序排,程序如何修改?,例:用随函数产生30个1099的随机整数,以按升序打印输出到窗体上。要求每行输出10个数据。,2冒泡法排序(升序)算法 :(将相邻两个数比较,大
36、数交换到后面)1)第 1 趟:将每相邻两个数比较,大数交换到后面,经n-1次两两相邻比较后,最大的数已交换到最后一个位置。,2)第 2 趟:将前n-1个数(最大的数已在最后)按上法比较,经n-2次两两相邻比较后得次大的数;3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。,冒泡法排序算法的流程图:,冒泡法排序(升序)程序:,For i = 1 To n - 1For j = 1 To n-iIf a(j) a(j+1) Then t=a(j): a(j)=a(j+1):a(j+1)=tEnd ifNext j Next i,例5.3 用随机函数产生50个10,100 )
37、的随机整数,并按照由小到大的顺序打印出来。,程序界面如下:,2.6.3 二维数组,1.二维数组的声明 声明格式如下: Dim 数组名( to , to ) As 其中的参数与一维数组完全相同。,例如:Dim a(2,3) As Single 二维数组在内存的存放顺序是“先行后列”。例如数组a的各元素在内存中的存放顺序是: a(0,0)a(0,1)a(0,2)a(0,3)a(1,0)a(1,1)a(1,2)a(1,3)a(2,0)(2,1)a(2,2)a(2,3),2 .二维数组的引用,引用形式: 数组名(下标1,下标2) 例如: a(1,2)=10 a(i+2,j)a(2,3)*2 在程序中常
38、常通过二重循环来操作使用二维数组元素。,3. 二维数组的基本操作,二维数组数据的输入 2. 求最大元素及其所在的行和列 3. 计算两矩阵相乘 4. 矩阵的转置,(1)二维数组数据的输入,Const N=4, M=5, L=6 Dim a(1 to N,1 to M) As Integer, i%, j%,k% 1. 给二维数组a输入数据的程序段如下:For i=1 to 4For j=1 to 5 A(i,j)=Val(InputBox(“a(“& I &“,“ & j & “)=?“)Next jNext i,(2) 求最大元素及其所在的行和列用变量max存放最大值,row,col存放最大值
39、所在行列号,Max = a(1, 1): row = 1: Col = 1 For i = 1 To NFor j = 1 To MIf a(i, j) a(row, Col) ThenMax = a(i, j)row = iCol = jEnd IfNext j Next i Print “最大元素是“; Max Print “在第“ “第“ & Col & “列“,(3) 计算两矩阵相乘(略) (4) 矩阵的转置,方阵的转置的程序代码如下: For i = 2 To For j = 1 To I-1Temp=a(i,j) a(i, j) = a(j, i)a(j, i)=TempNext
40、j Next i,设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下: For i = To For j = To Nb(j,i) = a(i,j) Next j Next i,例2.14 设某一个班共有60个学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号和各门课成绩。(奖学金评定标准是:总成绩超过全班总平成绩20%发给一个奖学金,超过全班总平成绩10%发给二个奖学金。),2.6.4 多维数组的声明和引用,定义多维数组的格式如下: Dim 数组名( to , to ,) As 例如:Dim a(5,5,5) As Int
41、eger 声明a是三维数组Dim b(2,6,10,5) As Integer 声明b是四维数组,2.6.5 动态数组的建立及使用 动态数组:在声明时未给出数组的大小。在程序执行时分配存储空间。建立动态数组包括声明和大小说明两步:1在使用Dim、Private或Public语句声明括号内为空的数组。格式:Dim | Private|Public 数组名()As 数据类型例:Dim a() As Integer2在过程中用ReDim语句指明该数组的大小。格式:ReDim Preserve 数组名(下标1,下标2),例:Redim A(10) Redim Preserve A(20),说明:(1)
42、ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。(2)定长数组声时中的下标只能是常量,而动态数组ReDim 语句中的下标是常量,也可以是有了确定值的变量。例:Private Sub Form_Click()Dim N As IntegerN=Val(InputBox(“输入N=?”)Dim a(N) As Integer.End sub,(3)在过程中可以多次使用ReDim来改变数组的大小,也可 改变数组的维数。例:ReDim x(10)ReDim x(20)x(20) = 30Print x(20)ReDim x(20, 5)x(20, 5) = 1
43、0Print x(20, 5) (4)每次使用ReDim语句都会使原来数组中值丢失,可以在ReDim后加Preserve 参数来保留数组中的数据。但此时 只能改变最后一维的大小。,2.6.6 控件数组的建立 一、在设计时建立控件数组的步骤: 1窗体上画出控件,进行属性设置,这是建立的第一个元素; 2选中该控件,进行“Copy”操作若干次和“Paste”操作若干次建立了所需个数的控件数组元素。 3进行事件过程的编程。 二、运行时添加控件数组的步骤如下:,1在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组,这是建立的第一个元素,并可对一些取值相同的属性进行设置,如所有文本框的字体
44、都取一样大小。 2在编程时通过Load方法添加其余的若干个元素,也可以通过Unload方法删除某个添加的元素。 Load方法和Unload方法的使用格式:Load 控件数组名() Unload 控件数组名() 其中,为整型数据。表示控件数组的某个元素。 3通过Left和Top属性确定每个新添加的控件数组元素在窗体的位置,并将Visible 属性设置为True。,通过例2-22来说明数组控件的使用:例2-22建立一个简易的能进行四则运算的计算器。,2.7过程和函数,在VB 中的过程分为:事件过程和通用过程。我们通常把通用过程分为:Sub(子程序)过程、Function(函数)过程。,2.7.1S
45、ub过程的定义和调用,1.子过程的定义形式如下: Public|PrivateStatic Sub 子过程名(形参表)语句组Exit Sub语句组 End Sub,说明:(1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。,(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。 (3)过程可以无形式参数,但括号不能省。 (4)参数的定义形式: ByValByRef变量名( )As 类型,, ByVal表示当该过程被调用时,参数是按值传递的;缺省或B
46、yRef表示当该过程被调用时,参数是按地址传递的。,例6.1 编一个交换两个整型变量值的子过程。 Private Sub Swap( X As Integer, Y As Integer)Dim temp As IntegerTemp=X : X=Y : Y=Temp End Sub,Private Sub command1_click()Dim a%,b%a=val(inputbox(“a=“)b=val(inputbox(“b=“)print “a=“;a,”b=“,bcall swap(a,b)print “a=“;a,”b=“,b End Sub,2. 子过程的建立,通过 “工具”菜单中的“添加过程”命令,出现“添加过程”对话框(见图6.1),选择过程类型(子过程、函数、属性、事件)及作用范围(公有的Public、私有的Private),单击确定后得到一个过程或函数定义的结构框架(模板),如: Public Sub Sort( ) End Sub,3. 过程的调用1 子过程的调用子过程名 参数列表或 Call 子过程名(参数列表) 说明:(1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。(2)调用时把实参值传递给对应的形参。其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。,