退出
第 6章 VB程序设计语句
退出
第 2页
6.1 赋值语句
6.2 选择控制结构
6.3 循环控制结构
6.5 控件数组
6.6 过程
6.4 数组
退出
第 3页
6.1 赋值语句
1,赋值语句的作用
格式:
变量名 =表达式 或 控件名,属性 =表达式
说明:
⑴ 前者为变量赋值语句, 后者为控件的属性赋值语句 。 例如:
s = 100
s= s + 1
ch1 = "ABC"
Form1.Caption = "求圆的面积 "
num = InputBox("请输入一个数 ")
退出
第 4页
⑵ 赋值语句可以改变变量存储的值 。
⑶, =” 号既可以构成赋值语句, 也可以作为逻辑表达式的逻
辑等号 。
例如:
print x=y
a=b And b=c
n=3=5
退出
第 5页
2,赋值相容
⑴ 变量类型与表达式类型相同 。
⑵ 变量为字符串型, 表达式为数值型 。
⑶ 变量为数值型, 表达式为可以转换为合法数值的字符串 。
⑷ 整型与浮点型属于赋值相容 。
退出
第 6页
6.2 选择控制结构
?顺序程序结构,赋值语句, 输入输出语句构成了最基本
的程序结构, 即顺序程序结构 。
?选择控制结构,又称为分支结构,这种结构能够根据条件
执行不同的操作。
Visual Basic支持的选择控制结构包括
If 语句
Select Case 语句。
退出
第 7页
If 语句
1,If… Then 语句
格式:
If<条件 >Then
<语句块 >
End If
说明:
⑴,条件, 一般为关系表达式或逻辑表达式,, 语句块, 可
以为一条或多条语句, If语句以 End If结束 。
⑵ 语句执行过程


条件
语句块
【例 6.1】 输入 a,b的值,如果 a大于 b,则输出,a大于 b”。
退出
第 8页
⑶ 条件表达式也可以是算术表达式, 非零为真, 零为假 。
⑷ If语句可以精简为单行 If语句, 即
If <条件 >Then<语句 >
【例 6.2】 将例 6.1用单行 If语句改写。
退出
第 9页
2,If...Then...Else语句
格式:
If<条件 >Then
<语句块 1>
Else
<语句块 2>
End If
说明:
⑴ 语句执行过程
假真
条件
语句块 1 语句块 2
【例 6.3】 输入一个非零数,判断其是正数还是负数。
⑵ If...Then...Else语句为双分支选择结构,语句块 1和语句块 2必定有一个
被执行。
退出
第 10页
【 例 6.4】 判断某年是不是闰年 。
闰年的条件:年份能被 400整除, 或者年份能被 4整除但不能被 100整除 。
year Mod 400 = 0( 被 400整除)
Mod 4 = 0 And year Mod 100 <> 0( 被 4整除但不被 100整除)
两个表达式之间应该用 Or连接。
⑶ If...Then...Else语句单行形式:
If<条件 >Then<语句块 1>Else<语句块 2>
【例 6.5】 将例 6.3用单行语句改写。
退出
第 11页
3,If 语句的嵌套
格式:
If<条件 1>Then
<语句块 1>
ElseIf<条件 2>Then
<语句块 2>

[Else
语句块 n+1]
End If
退出
第 12页
If语句多分支结构流程图
假真
假真
假真 条件
1
条件
2
条件
n
语句块 1
语句块 2
语句块 n 语句块 n+1
退出
第 13页
If语句的嵌套可以用于条件比较复杂的多分支情况 。
【 例 6-6】 已知分段函数:
编写程序,输入自变量 x的值,计算并输出函数 y的值。
y=
x 2 + 1 x> 0
0 x= 0
2*x - 1 x< 0
利用 If语句嵌套可以实现多分支的筛选
【 例 6.7】 输入一个分数, 判断它应得的学分 。 90分以上得 4学分, 80-89分
得 3学分, 70-79分得 2学分, 60-69分得 1学分, 60分以下不得学分 。
If语句如果有多个条件都为真,只能执行第一个条件为真的分支
【例 6.8】 将上题的筛选条件重新设计。
退出
第 14页
Select Case语句
格式:
Select Case <测试表达式 >
Case <值 1>
<语句块 1>
Case <值 2>
<语句块 2>

[Case Else
<语句块 n+1>]
End Select
退出
第 15页
说明:
1,测试表达式可以是任何数值表达式或字符串表达式;
2,每个 case分支可以列出多个值, 可以是以下形式之一:
⑴ 多个具体值, 用逗号隔开, 例如:
Case 1,2,3
⑵ 使用关键字 To表示值的范围, 例如:
Case 1 to 10
⑶ 使用 Is关系表达式, 例如:
Case Is>=10
Case Is <>""
⑷ 也可以使用以上几种形式的组合, 例如:
Case 1,3,Is>10
【 例 6.9】 输入 a,b的值和运算符号, 根据输入的运算符号决定运算的方式 。
退出
第 16页
3,当程序中依赖某个单独的关键变量或表达式作判断条件时,Select
Case语句效率更高,可读性好。
4.如果测试表达式的值能与多个 Case子句表达式的值相匹配,只执行第一
个匹配的 Case子句下面的语句块。
【例 6-10】 用 Case语句改写例 6.7,将输入成绩转换为相应学分。
注意值列表顺序的合理性。
5,Case Else子句是可选的,表示没有匹配的值时,则执行该子句中的语句
块 n+1。
【例 6-11】 从键盘输入一个字符,判断是字母还是数字,或是其它特殊字符。
退出
第 17页
Iif 函数
格式,IIf( 条件, 表达式 1,表达式 2)
说明:
⑴ 函数执行过程 。
Print IIf(3>5,1,-1)
⑵ 函数中的三个参数都不能省略,, 表达式 1” 和, 表达式 2” 的值的类
型应保持一致 。
⑶ MaxValue=IIf(x>y,x,y)
可以改写为单行 If语句:
If x>y Then MaxValue=x Else MaxValue=y
退出
第 18页
6.3循环控制结构
Visual Basic提供了三种不同风格的循环语句, 包括:
1,计数循环 ( For… Next语句 )
2,Do循环 ( Do… Loop语句 )
3,当循环 ( While… Wend语句 )
其中,计数循环是按给定的次数执行循环体,而 Do循环和当循环是在给
定的条件满足时执行循环体。
退出
第 19页
For…Next 语句
格式:
For <循环变量 > = <初值 > To <终值 > [Step步长 ]
[循环体 ]
Next [循环变量 ]
说明:
1,For语句执行过程
计数器 > 终值
计数器 = 初始值

循环体
计数器=计数器+步长
例如:
For i = 1 To 5
Print i,
Next i
退出
第 20页
2,1关键字 Step表示步长 。 例如
For i = 1 To 10 Step 2
Print "Line";i
Next i
3.当步长为正,初值大于终值时,或步长为负,初值小于终值时,循环体
将不执行。
For i=9 to 0
Print "Line";i
Next I
欲使其运行,需要将循环语句的步长设置为负值。改写为:
For i=9 to 0 Step -1
Print "Line";i
Next I
退出
第 21页
【例 6.12】 求 1到 100之间自然数列之和。
【例 6.13】 输入任意 10个数,统计其中正数和负数的个数。
【例 6.14】 找出所有平方小于 200的正整数。
退出
第 22页
Do…Loop 语句
1,Do While… Loop语句
格式:
Do While <条件 >
[循环体 ]
Loop
说明:
⑴ 语句执行过程 。

循环体

条件
【例 6.15】 从键盘输入字符并统计字符个数,当输入字符为“?”时,停止计数。
【例 6.16】 用 Do语句编写程序,求 1到 100的累加和。
退出
第 23页
⑵ Do循环需要有能够改变循环条件表达式值的语句, 否则循环永远不会
结束, 即死循环 。
⑶ Exit Do语句用于强制跳出循环 。
⑷ Do...Loop 语句的另一种形式 格式:
Do
[循环体 ]
Loop While <条件 >
这种形式可以保证循环体至少执行一次。

循环体

条件
退出
第 24页
2,Do Until…Loop 语句
格式:
Do Until <条件 >
[循环体 ]
Loop
说明:
⑴ 语句 执行过程

循环体

条件
退出
第 25页
⑵ 另一种语句形式是把测试条件放在 Loop语句中,这种形式可以保证
循环至少执行一次。
格式:
Do
[循环体 ]
Loop Until <条件 >

循环体

条件
【例 6.17】 用 Do Until… Loop语句改写例 6.15。
退出
第 26页
While…Wend 语句
由 While… Wend语句构成的循环称为当循环或 While循环 。
格式:
While <条件 >
[循环体 ]
Wend

循环体

条件
【例 6.18】 用公式 π/4= 1 - 1/3 + 1/5 - 1/7 + …… 求 π的近似值(计算到
最后一项的绝对值小于 10-6)。
退出
第 27页
几种循环语句的比较
1.For… Next语句
s = 0
For i = 1 To 10
s = s + i
Next
Print s
2.While… Wend语句
s = 0
i = 1
While i <= 10
s = s + i
i = i + 1
Wend
Print s
3.Do While… Loop语句
s = 0
i = 1
Do While i <= 10
s = s + i
i = i + 1
Loop
Print s
4.Do… Loop While语句
s = 0
i = 1
Do
s = s + i
i = i + 1
Loop While i <= 10
Print s
5,Do Until … Loop语句
s = 0
i = 1
Do Until i > 10
s = s + i
i = i + 1
Loop
Print s
6,Do… Loop Until语句
s = 0
i = 1
Do
s = s + i
= i + 1
Loop Until i > 10
Print s
退出
第 28页
多重循环
在循环语句中使用另一个循环语句称为循环的嵌套 。
两个 For语句嵌套的形式:
For i=m1 To m2
……
For j=n1 To n2
<内循环体 > 内循环 外循环
Next j
……
Next i
退出
第 29页
例如:
For i = 1 To 3
For j = 1 To 3
Print i,j
Next
Next
执行过程:
i=1 j=1 输出 1,1
j=2 输出 1,2
j=3 输出 1,3 ( 内层循环完毕, 进行外层的下一次循环 )
i=2 j=1 输出 2,1
j=2 输出 2,2
j=2 输出 2,2
i=3 j=1 输出 3,1
j=2 输出 3,2
j=3 输出 3,3
退出
第 30页
【例 6.19】 利用双重循环输出矩形(共 6行,每行 8个星号)。
【例 6.20】 打印九九乘法表。
退出
第 31页
【例 6.21】 已知大鱼 5元一条,中鱼 3元一条,小鱼 1元三条,现用 100元买
100条鱼,求能买大鱼、中鱼、小鱼各多少条。
“穷举法”求解
其算法如下:
设大鱼有 i条,中鱼有 j条,小鱼有 k条,根据题意可知
k = 100 - i - j
每次循环都测试条件 5 * i + 3 * j + k / 3 = 100是否成立,条件成立,则找
到一组合适的解。利用双重循环控制 i和 j的变化。
退出
第 32页
GoTo语句
GoTo语句可以无条件地转移到过程中指定的行 。
格式,GoTo 行号 |标号
说明:
⑴ 行号和标号都是用来标记程序语句的, 行号是一个整数, 例如:
15
标号是以冒号结尾的标志符, 例如:
Start,
⑵ 程序中遇到 GoTo语句, 便要转向它所标记的位置执行语句 。 GoTo只
能跳到它所在过程中的行 。
⑶ 利用 Goto语句与条件语句的结合可以实现循环功能。
退出
第 33页
例如:
i = 1
Start:
Print "*";
i = i + 1
If i <= 10 Then
GoTo Start
End If
退出
第 34页
6.4数组
数组 是一组同名变量的集合。
与简单变量不同的是:
数组中的数据按照下标的顺序存放的,在内存中占据一片连续的存储
单元。
只有一个下标的数组称为一维数组,具有两个或多个下标的数组称为
二维数组或多维数组,
退出
第 35页数组的定义
1,一维数组的定义
格式:
Public <数组名 > (下标上界 ) [As 数据类型 ]
说明:
⑴ 用 Public定义数组表示数组为公用数组
用 Dim在模块中定义表示模块级数组
用 Static或 Dim在过程中定义为局部数组
例如:
Public test(4) As Integer
Dim S(2) As Long
⑵,数组名, 在程序中用来代表数组的名称 。
退出
第 36页
⑶, 下标上界, 是待定义数组元素的最大下标 。
在 VB中数组的第一个元素的下标是 0。
例如:
Public test(4) As Integer
数组元素分别为,test(0),test(1),test(2),test(3),test(4)。
强制改变数组的起始下标, 使其变为 1
⑷, 数据类型, 用于指定数组元素的数据类型 。 默认为变体型 。
退出
第 37页
⑸ 另一种数组定义格式:
Public <数组名 >( 下界 To 上界 ) [As 类型名称 ]
例如:
Public Arr(2 To 5) '数组元素为 Arr(2), Arr(3),Arr(4),Arr(5)共 4个元素
Public Arr(-1 To 3) '数组元素为 Arr(-1),Arr(0), Arr(1), Arr(2), Arr(3)
使用这种定义格式可以更好地反映对象的特性, 例如:
Dim age(18 To 40) '用来存储年龄从 18岁到 40岁的人的数组
Dim production(1998 To 2004) '用来存储 1998年到 2004年的产量的数组
退出
第 38页
2,多维数组的定义
格式,Public <数组名 > (第一维下标, 第二维下标 ) [As 数据类型 ]
例如:
Public Arr(2,3) As Integer
定义一个二维数组, 名字为 Arr,数据类型为 Integer,该数组有
3行 ( 0~ 2), 4列 ( 0~ 3), 共 12个元素 。
另一种定义方式,例如:
Public A( 1 To 2,1 To 3) As Integer
定义后数组元素为,A(1,1) A(1,2) A(1,3) A(2,1) A(2,2) A(2,3),共 6个元素。
Arr(0,0) Arr(0,1) Arr(0,2) Arr(0,3)
Arr(1,0) Arr(1,1) Arr(1,2) Arr(1,3)
Arr(2,0) Arr(2,1) Arr(2,2) Arr(2,3)
退出
第 39页
数组元素的操作
1,数组的引用
方法:在数组名后面的括号中指定被引用元素的下标, 例如:
A(2),x(1,3)
数组元素以被赋值也可以参加表达式的运算 。
例如:
A(2) = "a"
X(5) = 5
x(3) = x(2) + x(1)
退出
第 40页
2,数组元素的输入输出
⑴ 用 InputBox函数为数组元素赋值 。 例如:
Dim A(5)
For i = 0 To 5
A(i) = Val(InputBox("请输入一个数 ","数组输入 "))
Next i
⑵ 将数组元素赋值为有规律的数列 。 例如:
Dim A(5)
For i= 0 To 5
A(i)= i
Next i
将数组元素存储为奇数数列:
For i= 1 To n
A(i)= 2*i-1
Next i
退出
第 41页
⑶ 输出数组元素的值 。
例如:
For i=0 To 5
Print A(i);
Next i
【 例 6.22】 从 10个数中找出最大数 。
【 例 6.23】 将 n个数从大到小排序 。
【例 6.24】 二维数组的输入 /输出。
【例 6.25】 求二维数组每行元素之和。
退出
第 42页
动态数组
动态数组可以在任何时候改变元素个数。
创建动态数组步骤:
1,首先定义一个没有下标的数组, 这样就将数组定义为动态数组 。 例如:
Dim Arr() As Integer
2,使用数组时, 用 ReDim语句分配实际的元素个数 。 例如:
ReDim Arr (10)
ReDim Arr (2 To10)
注意,ReDim语句不能改变数组的维数。
可以多次使用 ReDim语句定义同一个数组。例如:
Dim s As Integer
Dim a() As Integer '定义一个动态数组
s = InputBox("Input a number:") '将输入的数值作为数组下标上界
ReDim a(s) '过程中给数组分配空间
退出
第 43页
6.5控件数组
1.
控件数组是一组具有相同名称、类型和事件过程的控件,例如,Label1(0)、
Label1(1),Label1(2)等。
控件数组具有以下特点:
⑴ 相同的控件名称 ( 即 Name属性 ) ;
⑵ 控件数组中的控件具有相同的一般属性;
⑶ 所有控件共用相同的事件过程 。
⑷ 用下标索引值 (Index)来标识各个控件,第一个下标索引号为 0,第二个下标
索引号为 1,依此类推。
2,控件数组的建立
方法一:复制已有的控件并将其粘贴到窗体上 。
方法二:将窗体上已有的类型相同的多个控件的 Name属性设置为相同的值。
退出
第 44页
3,控件数组的使用
【 例 6.26】 建立含有 4个命令按钮的控件数组, 单击某个按钮时, 显示所
选按钮名称 。
退出
第 45页
6.6过程
在 Visual Basic中使用下列几种过程:
⑴ Sub过程 ( 子程序 ) 。
⑵ Function过程 ( 函数过程 ) 。
⑶ 事件过程。
退出
第 46页
Sub过程
Sub过程又称子程序。
1,Sub过程定义
格式:
[Private|Public|Static] Sub<过程名 >[(形式参数表 )]
过程语句
[Exit Sub]
End Sub
说明:
⑴ [Private|Public|Static]可以定义 Sub过程的作用范围。
⑵,形式参数表” 格式为:
[ByVal |ByRef] 变量名 [As 数据类型 ]
ByVal和 ByRef用于指定参数传递的方式。,As数据类型”用于指定参
数的数据类型,缺省类型为变体类型。
退出
第 47页
2,Sub过程的调用
方法一:使用 CaII命令
格式:
Call <过程名 > [(实际参数表 )]
方法二:直接使用过程名调用
格式:
<过程名 > [实际参数表 ]
例如:
Call cmn(a,b)
cmn a,b
【例 6.28】 利用子程序打印三角形。
【 例 6.27】 利用 Sub过程求三角形的面积。
退出
第 48页
Function过程
Function过程又称函数过程或自定义函数 。 函数的特点是有返回值 。
1,函数的定义
格式:
[Private|Public|Static] Function <函数名 >([形式参数表 ])[As数据类型 ]
函数语句
[Exit Function]
End Function
函数过程的返回值依靠函数名传递 。
退出
第 49页
例如设计一个求阶乘的函数:
Private Function fac(n As Integer) As Integer
Dim i As Integer,f As Integer
f = 1
For i = 2 To n
f = f * i
Next i
fac = f
End Function
退出
第 50页
2,函数的调用
格式:
<函数名 > ([实际参数表 ])
例如 fac(n)为已经定义的求 n的阶乘的函数:
x= fac(10) '求 10的阶乘
y= fac(a) '求变量 a的阶乘
z= fac(b)+fac(20) '求变量 b的阶乘与 20的阶乘的和
调用无参数函数时,括号不能省略。
【例 6-29】 利用自定义函数 fac()求 1! +2! +……+ n!。
【例 6-30】 利用函数过程求三个整数的最大值。
退出
第 51页
事件过程
格式,<对象名 >_<事件名 >([参数表 ])
例如:
Form_click()
Command1_click()
事件过程的参数也是由系统规定的,其参数的个数、参数的名称以及每个
参数的类型都由系统事先规定。
事件过程是由事件驱动的。
例如:
单击窗体,调用事件过程 From_click ();
单击命令按钮 Command1,调用事件过程 Command1_click()。
退出
第 52页
参数传递
Visual Basic中过程的参数传递有两种方式:
1,按地址传递参数 ( ByRef)
实际上是对实际参数操作, 过程中的运算结果将永远改变实际参
数的值 。
2,按值传递参数 ( ByVal)
过程执行时,传递的只是实际参数的副本,过程中都是在对形式
参数操作,如果过程改变了这个值,则所作变动不会影响到实际参数
的本身。
【例 6.31】 测试按地址传递参数与按值传递参数的区别。