程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
循环结构的语句实现

3.3 循环结构的语句实现

3.3.1 计数循环

For…Next语句构成的循环称为For循环,也称计数循环。

格式:

For <循环变量> = <初值> To <终值> [Step步长]

  [循环体]

Next [循环变量]

说明:

循环变量也称循环控制变量计数器初值终值步长可以是数值型的常量、变量或表达式。ForNext之间的循环体可以是一条或多条语句,Step步长和Next后的循环变量都是可以省略的,Step省略时,表示步长为1

For语句执行过程:先将循环的初值赋给循环变量,然后判断循环变量的值是否大于终值,如果大于终值,则退出循环,否则执行循环体。每一次执行循环体之后,循环变量的值会自动增加步长值,再将循环变量的新值与终值进行比较,重复上述过程。流程图如图1所示。

例如:

For i = 1 To 5

Print i,

Next i

程序运行时,i的初值为1,终值为5。由于初值小于终值,所以开始执行循环体Print i语句,输出1,此时完成第一次循环,循环变量i自动增加步长1i的值变为2;下一次循环,由于i的值小于5,执行循环体,输出2,完成第二次循环,i的值再增加1;依此类推,直到i的值大于5时才终止循环,共循环5次,程序的运行结果是输出1 2 3 4 5

如果For语句中使用了关键字Step,那么循环变量的增加值是Step后面定义为步长的值,例如在以下的语句中,变量i每次增加的步长值为2

For i = 1 To 10 Step 2

Print i

Next i

VB遵循先检查,后执行的原则,即先检查循环变量是否大于终值,然后决定是否执行循环体。当步长为正,初值大于终值时,或步长为负,初值小于终值时,循环体将不执行。例如:

For i=9 to 0

 Print i

Next i

该例中步长为1,且初值大于终值,所以不执行循环体。欲使其运行,需要将循环语句的步长设置为负值。改写为:

For i=9 to 0 Step -1

 Print i

Next i

从此例中可以看出,如果初值大于终值,步长应为负数,循环才能正常执行。

【例1】求1100之间自然数列之和。

Private Sub Form_Click()

Dim s As Integer, i As Integer

s = 0

For i = 1 To 100

s = s + i

Next i

Print "s="; s

End Sub

程序中,i为循环控制变量,s用来存储累加和,每次循环将变化后的i值加到s上,使s的值不断增加,程序执行的具体过程:

程序开始时:      s0

1次循环: i=1 s=0+1=1

2次循环: i=2 s=1+2=3

3次循环: i=3 s=3+3=6

……

100次循环:i=100 s=4950+100=5050

【例2】输入任意10个数,统计其中正数和负数的个数。

Private Sub Form_Click()

Dim num As Integer , i As Integer

Dim k1 As Integer, k2 As Integer

k1 = 0

k2 = 0

For i = 1 To 10

num = InputBox("请输入一个非零的数:")

Print num

If num > 0 Then

k1 = k1 + 1

ElseIf num < 0 Then

k2 = k2 + 1

End If

Next i

Print "正数的个数为:"; k1

Print "负数的个数为:"; k2

End Sub

程序中利用k1, k2分别作为统计正数、负数个数的变量。程序运行时,输入一个数,判断其正负性,如果大于0则变量k11,如果小于0则变量k21

程序中i仅作为控制循环次数的变量,在循环体中并没有参与运算,而例1(求和程序)中i不仅控制循环次数,同时也参与运算。程序运行结果如图2所示。

【例3将字符串“ABCDE”逆序输出。

Private Sub Form_Click()

      x= "ABCDE" 

      k = Len(x)

 s = ""

 For i = k To 1 Step -1

j = Mid(x, i, 1)

s = s + j

 Next i

 Print s

End Sub

程序通过Len函数取得字符串的长度赋值给k(值为5);利用For循环中的循环变量i依次取得字符串中逆序字母的相应位置,并通过Mid函数截取相应的逆序字符,其执行过程如下:

i = 5   j = Mid( x, i, l ) = Mid("ABCDE ", 5,1) = "E"    s = s + j = "E"

i = 4   j = Mid( x, i, l ) = Mid("ABCDE ", 4,1) = "D"     s = s + j = "E" + "D" = "ED"

i = 3   j = Mid( x, i, l ) = Mid("ABCDE ", 3,1) = "C"     s = s + j = "ED" + "C" = "EDC"

i = 2   j = Mid( x, i, l ) = Mid("ABCDE ", 2,1) = "B"    s = s + j = "EDC" + "B" = "EDCB"

i =1   j = Mid( x, i, l ) = Mid("ABCDE ", 1, 1) = "A"     s = s + j = "EDCB" + "A" = "EDCBA"

3.3.2 条件循环

Do…Loop语句构成的循环也称为Do循环,是一类有条件的循环,通过判断条件的值为真或假来控制循环的结束。Do循环的循环次数是不确定的,对于事先不知道循环要执行多少次的情况来说,Do循环十分方便。Do…Loop语句有灵活的构造形式。

1Do While…Loop语句

格式:

Do While <条件>

[循环体]

Loop

说明:

执行过程:首先测试条件表达式的值,如果值为真,则执行循环体中的语句块,完成一次循环,然后返回到Do While语句再测试条件,一旦条件值为假,就跳出循环,执行Loop下面的语句。如果条件一开始就为假则一次循环也不执行。流程图如图3所示。

【例4】从键盘输入字符并统计字符个数,当输入字符为时,停止计数。

算法设计:由于不知道将输入多少个字符,所以无法确定具体的循环次数,这种情况适合使用Do循环语句设计循环,循环条件为:输入字符不为

程序代码:

Private Sub Form_Click()

Dim k As Integer

Dim ch As String

k = 0

ch = InputBox("输入一个字符,'?'结束输入")

Do While ch <> "?"

Print ch

k = k + 1

ch = InputBox("输入一个字符,'?'结束输入")

Loop

Print "字符个数为:", k

End Sub

程序运行结果如图4所示。

For...Next循环编写的程序都可以用Do循环实现,关键是要设计好控制循环的条件。

【例5】用Do语句编写程序,求1100的累加和。

Private Sub Form_Click()

Dim s As Integer, i As Integer

s = 0

i = 1

Do While i <= 100

s = s + i

i = i + 1

Loop

Print "s="; s

End Sub

Do循环没有自动变化的循环控制变量,所以一定要有能够改变循环条件表达式值的语句,否则循环永远不会结束,这种永不结束的循环被称为死循环。例如上面例题中的i=i+1,可以改变i的值,当i变化到大于100时,逻辑表达式i <= 100的值为假,循环就会结束。

Exit Do语句用于强制跳出循环,其功能与Exit For语句相似,恰当的使用Exit Do语句可以防止死循环。

Do While...Loop语句的另一种形式是先执行循环体,在每次执行循环体后测试条件。

格式:

Do

[循环体]

Loop While <条件>

这种形式可以保证循环体至少执行一次。流程图如图5所示。

2Do Until…Loop语句

格式:

Do Until <条件>

[循环体]

Loop

说明:

执行过程:首先测试条件表达式的值,当值为假时,执行循环体,完成一次循环,然后返回到条件表达式再测试条件,直到条件表达式值为真时,循环才终止。流程图如图6所示。

另一种语句形式是把测试条件放在Loop语句中,这种形式可以保证循环至少执行一次。

格式:

Do 

   [循环体]

Loop Until <条件>

流程图如图7所示。

【例6】用Do Until…Loop语句改写例4

Private Sub Form_Click()

Dim k As Integer

Dim ch As String

k = 0

ch = InputBox("输入一个字符,'?'结束输入")

Do Until ch = "?"               

  Print ch

  k = k + 1

  ch = InputBox("输入一个字符,'?'结束输入")

Loop

Print "字符个数为:", k

End Sub

程序运行时,首先判断表达式ch = "?"的值,若为假则进入循环,执行循环体,直到条件值为真时退出循环,输出字符个数。

3. While…Wend语句

While…Wend语句构成的循环称为当循环或While循环。

格式:

While <条件>

   [循环体]

Wend

While循环也是通过测试条件的值来控制循环的结束。当值为真时,执行循环体,然后返回到While语句再测试条件,一旦条件为假,就跳出循环。其功能与Do While…Loop语句相同。流程图如图8所示。

【例7】用While…Wend语句改写例2

Private Sub Form_Click()

Dim k As Integer

Dim ch As String

k = 0

ch = InputBox("输入一个字符,'?'结束输入")

While ch <> "?"

Print ch

k = k + 1

ch = InputBox("输入一个字符,'?'结束输入")

Wend

Print "字符个数为:", k

End Sub

4.几种循环语句的比较

以求整数110的和为例,变量s用来存储和,变量i为循环控制变量,几种循环语句编写的代码如下:

以上6种语句均可计算出110的累加和,但语句格式不同,循环条件也不同,在使用循环语句时要根据实际情况选择恰当的语句。

=========================================================================================



=========================================================================================