• 沒有找到結果。

Visual Basic语言程序设计教程 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "Visual Basic语言程序设计教程 - 万水书苑-出版资源网"

Copied!
35
0
0

加載中.... (立即查看全文)

全文

(1)第 5 章 循环结构程序设计 本章介绍循环的概念、循环结构设计的基本方法和技术,以及用循环语句书写循环程序 的方法。. 5.1. 循环概念. 顺序结构和分支结构部分讲述的所有程序,每执行一次只能处理一个(或一组)数据, 如果需要处理多个(或多组)数据势必只能一次又一次地执行程序,这就失去了用计算机处理 问题的优势。其实可以在程序中安排控制重复执行一组指令(或一个程序段),这种操作称为 循环操作。导致循环操作的语句结构叫循环结构。 循环结构分为无条件循环和有条件循环。无条件循环就是无休止地反复执行一个程序段, 而有条件循环就是每次执行程序段之前需要根据设置的条件判断是否继续循环。. 5.2. 循环结构及循环程序. 循环结构有两个特点:一是有一个重复操作的程序块或语句组,称为循环体;二是能根 据设定的条件满足时选择继续进入循环体操作,或是不满足时退出循环体终止循环操作,称为 循环出口设置。 程序对循环体的操作只能是有限次,如果程序对循环体的操作不能终止,就是所谓的“死 循环”,会导致程序无法正常执行结束,这是编程时必须避免的。 例 5-1 已知数列的第 1,2 项均为 1,从第 3 项开始,以后各项的值均为其前两项之和, 写程序输出该数列的前 10 项值或末项的值超过 104 为止。 分析:设 A 表示第 1 项,B 表示第 2 项,C 表示第 3 项,可以用递推法不断得到后面各 项,具体过程如下: 次数 第0次 第1次 第2次 第3次 第4次 …. A 的值. B 的值. C 的值. 0 1 1 2 3 …. 0 1 2 3 5 …. 0 2 3 5 8 …. 用流程图表示此过程如图 5-1 所示。 从流程图看,为了得到要求的数列项,经过不断递推得到新的第 1、2 项,可以顺利得到 新的第 3 项,周而复始,可以得到数列的若干项。问题是何时结束程序呢?在图上确实也没有.

(2) 102. Visual Basic 语言程序设计教程. “结束”框。显然根据这样的流程图写出的程序会出现“死循环” ,这是设计程序时必须解决 的问题之一。. 开始. A=1,B=1,输出 A,B. 计算第 3 项 C=A+B,输出 C. 递推新的第 1、2 项:A←B,B←C. 图 5-1. 产生数列项的流程. 解决程序“死循环”的办法就是采用“条件循环” ,即根据问题提供的条件为循环结构人 为“设置出口”,当问题得到解答后程序自动结束,退出程序执行状态,返回操作系统。 5.2.1 设计循环结构的基本原理 通过分析例 5-1,可以总结出构造循环结构的三个要素: (1)初始化。为进入循环结构作好准备,对变量赋初值。 (2)设计循环体。常用的方法是递推、迭代、穷举。 (3)设置循环出口。采用“计数”或“设置条件”等方法。 在面对实际问题时,首先要弄清楚需做的“循环体”工作是什么,怎么控制循环体执行 的次数,哪些工作应该在循环体外作准备。本节将通过例子进行说明。 (1)用“计数”方法设置循环出口。 如果问题中已经提供了“循环体”将要循环的次数 N,则可以使用“计数”的方式为循环 结构设置出口,具体方法如下: 任意设置一个变量 I(当然也可以是其他变量)作为计数器,I 的初值设为 0,每执行一次 “循环体”,计数器就计数一次(I=I+1),然后判断 I 的值是否已经达到 N(是否已经计满?), 如果没有计满则返回“循环体”继续执行,否则不再返回“循环体”,直接跳出循环结构。计 数器的值逐步递增称为“正向计数”,如果将 I 的初值设为 N,然后 I 的值逐步递减,直到 I 的值变为 0,则称为“反向计数”。 对例 5-1 提出的“产生数列前 20 项”,则可以用计数方式为循环结构设置出口,避免出现 “死循环”。 设计数器 I=0,画出流程图如图 5-2 和图 5-3 所示的判断过程。图 5-2 和图 5-3 都能自动 地控制产生数列的前 20 项。.

(3) 第 5 章 循环结构程序设计. 103. 开始 A=1,B=1,输出 A,B 计数器 I=3. I<=10. N. Y 计算第 3 项 C=A+B,输出 C 递推新的第 1、2 项:A←B,B←C 计数器计数一次:I=I+1. 结束 图 5-2. 计数方式控制循环之一. 开始 A=1,B=1,输出 A,B 计数器 I=2 计算第 3 项 C=A+B,输出 C 递推新的第 1、2 项:A←B,B←C 计数器计数一次:I=I+1 Y. I<=10 N 结束 图 5-3. 计数方式控制循环之二. (2)用“条件”设置循环出口。 有的问题不能提供循环体执行的次数,程序设计者可以针对问题的特点人为设置“条件” , 约定其作为跳出循环结构的信号。 假设例 5-1 改为:要求末项的值超过 104 为止。由于不知道将产生多少数据项,则可以用 条件“末项的值超过 104”作为控制循环结束的依据。流程图如图 5-4 所示。.

(4) Visual Basic 语言程序设计教程. 104. 开始 A=1,B=1,输出 A,B 计算第 3 项 C=A+B C≤104. N. Y 输出 C 递推新的第 1、2 项:A←B,B←C 计算第 3 项 C=A+B. 结束 图 5-4. 用“条件”设置循环出口. 5.2.2 用循环语句书写循环程序 为了描述循环结构,可以用 Visual Basic 语言的分支和转向语句书写出循环程序,例如书 写出图 5-4 所示功能的程序如下: Private Sub Form_Click() Dim a as Single, b as Single, c As Single a=1: b=1 Print a; b; c=a+b lop: If c <= 10000# Then Print c; a=b: b=c c=a+b GoTo lop End If End Sub. 其中,lop:称为语句标号,用于指示语句位置,GoTo lop 称为转向语句,功能为转向 lop 所指语句执行。 由于循环结构是任何实际程序中都将出现的结构,故所有计算机高级语言均提供了专门 的描述循环结构的循环语句。利用循环语句可以更简捷地书写循环程序,免去书写判断、转向 语句的麻烦。 (1)While…Wend 循环语句。 格式:While 条件.

(5) 第 5 章 循环结构程序设计. 105. 循环体 Wend 功能:当条件成立(为 True)时,执行循环体的操作;当条件不成立(为 False)时,终 止循环体的操作。用流程图描述如图 5-5 所示。. 条件成立?. N. Y 循环体. 执行后续语句 图 5-5 While…Wend 功能. 利用 While…Wend 语句可以将图 5-4 所示功能的程序修改如下: Private Sub Form_Click() Dim a as Single, b as Single, c As Single a=1: b=1 Print a; b; c=a+b While c <= 10000# Print c; a=b: b=c c=a+b Wend End Sub. (2)Do…Loop 循环语句。 Visual Basic 提供的 Do…Loop 循环语句具有完整的语法格式,能实现各种形式的循环程 序。细分起来,Do…Loop 循环语句共有 5 种语法格式,下面分别进行介绍。 1)无条件循环型。 格式:Do 循环体 Loop 功能:用流程图描述语句的功能如图 5-6 所示。. 循环体. 图 5-6. 无条件循环型. 说明:由于该语句结构无条件重复执行循环体中的操作,使程序无法正常结束。为了避.

(6) Visual Basic 语言程序设计教程. 106. 免发生此类情况,可以在循环体中通过 If 语句测试循环操作的结束条件,当条件满足时,用 Exit Do 语句退出循环操作,执行 Loop 语句后的语句。 2)当型循环。 后测试型 格式:Do 循环体 Loop While 条件. 前测试型 格式:Do While 条件 循环体 Loop 当型循环语句的功能如图 5-7 所示。. 循环体 N. 条件成立 Y 循环体. Y. 条件成立 N 执行后续语句. 执行后续语句. 图 5-7. 当型循环功能流程图. 当条件成立(True)时,执行循环体的操作;当条件不成立(False)时,终止循环操作。 所以带“While 条件”的 Do…Loop 循环语句结构称为当型循环。前测试型结构在每次执行循 环体的操作之前测试条件,称为当型循环前测试型。后测试型结构是在每次循环体的操作执行 完之后,才测试条件,称为当型循环后测试型。 实际上,前测试型的 Do While…Loop 和 While…Wend 语句功能是相同的,只是 Do While… Loop 语句中允许用 Exit Do 语句退出循环操作,而 While…Wend 语句不行。 比较流程图结构,可以看到图 5-3 的流程图可以用 Do…Loop While 后测试型语句翻译 如下: Private Sub Form_Click() Dim a as Single, b as Single, c As Single Dim i As Integer a=1: b=1 Print a; b; i=2 Do c=a+b Print c; a=b: b=c.

(7) 第 5 章 循环结构程序设计. 107. i=i+1 Loop While i < 20 End Sub. 显然,不管 Do…Loop While 语句中条件是否成立,循环体的操作至少被执行一次。 3)直到型循环。 前测试型 格式:Do Until 条件 循环体. 后测试型 格式:Do 循环体 Loop Until 条件. Loop. N. 条件不成立. 循环体. Y Y. 循环体. 条件不成立 N 执行后续语句. 执行后续语句 图 5-8. 直到型循环功能流程图. Do Until…Loop 语句中给出的条件是终止循环操作的条件,即当条件不成立(False)时, 执行循环体的操作;直到条件成立(True)时,才终止循环操作。带“Until 条件”的 Do…Loop 循环语句结构称为直到型循环。前测试型在程序每次执行循环体的操作之前,首先测试条件, 称为直到型循环前测试型。后测试型是在每次循环体的操作执行完之后,才测试条件,称为直 到型循环后测试型。 显然,不管 Do…Loop Until 语句中条件是否成立,循环体的操作至少被执行一次。 其实,对于采用“计数”方式设置循环出口的“当型前测试型”循环结构,Visual Basic 语言还专门提供了一个循环语句来对应描述,这就是下面介绍的 For 循环结构语句。 (3)For…Next 循环语句。 如果知道要执行的循环操作次数,或间接知道要执行循环操作的次数,这样的循环程序 常用 For…Next 语句实现。 格式:For v=e1 To e2 [Step e3] 循环体 Next [v] 功能:For…Next 语句的功能可用图 5-9 所示的流程图描述。 说明: 1)For…Next 语句组成了一种循环结构,必须成对出现,For 语句必须在 Next 语句之前。.

(8) Visual Basic 语言程序设计教程. 108. 2)For 语句中的循环变量与 Next 语句中的循环变量必须为同一变量,Next 语句中的循环 变量可以省略。若 e3 为+1,则“Step 1”可以省略。. 计算 e1,e2,e3. v←e1. v 不超过 e2. N. Y 循环体. v←v+e3. 执行 Next 后的语句 图 5-9 For…Next 语句执行过程. 3)e1、e2 和 e3 都是数值表达式,是循环的初值、终值和步长值。 如果 e3>0,则必有 e1≤e2(称为递增循环) ,图中的“v 不超过 e2”,意义为“v≤e2”; 如果 e3<0,则必有 e1≥e2(称为递减循环) ,图中的“v 不超过 e2”,意义为“v≥e2”;如果 e3=0,将出现死循环。 4)可以在循环体中的任何位置放置 Exit For 语句,随时退出循环操作。 对照 For…Next 语句功能,例 5-1 产生数列问题的几种方法中,只有图 5-2 可以用 For… Next 语句翻译程序如下: Private Sub Form_Click() Dim a as Single, b as Single, c As Single Dim i As Integer a=1: b=1 Print a; b; For i=3 To 10 c=a+b Print c; a=b: b=c Next i End Sub.

(9) 第 5 章 循环结构程序设计. 109. For…Next 语句将计数器初始化、循环条件判断和计数器递增 3 个工作都包含在语句中了, 书写的循环程序结构清晰、简捷。. 5.3. 循环程序设计举例. 本节将用例子说明构造循环结构时循环体的组织、设置循环出口方法、初始化工作设置。 100. 例 5-2. 求.  n ,即求 S=1+2+3+4+…+100。 n 1. 分析:这是一个等差数列求和的问题,如果使用等差数列求和公式当然可以很轻松地求 出结果,但是现在不用公式,而是采用循环结构程序解决。 解决“求和”问题,往往采用“累加”的方式。 可以设置一个累加器 S,初值为 0。循环体的操作为:“得到一个加数 N,完成累加 S=S+N”, 循环体执行的次数为 100(用“计数”方式设置循环出口),计数器的初值为 0(表示一次都没 累加)。在循环体内只要变化加数 N,累加操作的对象也随之变化。 根据上述思路,画出流程图如图 5-10 所示。利用 For…Next 语句可以写出对应程序 如下: 开始. S=0,I=1. I≤100 Y 输入一个 N. 累加 S=S+N. 计数一次:I=I+1. 输出 S. 结束 图 5-10. 可以写出程序如下: Private Sub Form_Click(). 例 5-2 算法流程图. N.

(10) Visual Basic 语言程序设计教程. 110 Dim S As Single. Dim N as Integer, I As Integer S=0 For I=1 To 100 N=Val(InputBox("输入一个加数:")) S=S+N. '用键盘读数方式获得加数 '累加求和. Next I Print S End Sub. 程序中试图通过每次读入一个加数 N 实现“得到加数”操作,逻辑上没有问题,但实施 起来有难度(从键盘输入 100 个数几乎不可能),其实每次要得到的加数就是当前的 I,因此 循环变量的当前值也是加数。另外,如果将循环次数通过 Inputbox 函数在执行程序时确定, 可以将这个程序修改成更具有通用性的程序。 Private Sub Form_Click() Dim S As Single Dim N as Integer, I As Integer S=0 N=Val(InputBox("输入 N:")). '用键盘读数方式获得加数的个数. For I=1 To N S=S+I. '累加求和. Next I Print S End Sub. 执行程序时,如果输入的 N=100,则 S=1+2+3+…+100,如果输入的 N=500,则 S=1+2+3+… +500。 100. 例 5-3 求.  n! n 1. 分析:这也是一个求和问题,只是加数的获得需做点工作。仍然可以设置一个累加器 S=0, 由于 2!=1!*2,3!=2!*3,因此采用递推方式可以依次得到加数项 1!,2!,…,100!,故 设加数项 FACT=1。循环体的工作是“得到加数项,做和”。循环体循环的次数是 100 次。 画出流程图如图 5-11 所示。Visual Basic 语言程序代码如下: Private Sub Form_Click() Dim S as Single, FACT As Single Dim N as Integer, i As Integer S=0: FACT=1 n=Val(InputBox("请输入 n:")). '输入求和的项数. For i=1 To n FACT=FACT*i S=S+FACT Next i Print S. '获得加数项.

(11) 第 5 章 循环结构程序设计. 111. End Sub. 如果将输入改为从文本框获得数据,在标签中显示结果,可以自己写出程序试一试。. 开始. S=0,FACT=1(i=1). 输入 n. i≤n. N. FACT=FACT*i. S=S+FACT. i=i+1. 输出 S. 结束 图 5-11. 例 5-3 算法流程图. 例 5-4 判断键盘输入的数 M 是否素数。要求按图 5-12 所示的界面完成输入和输出。. 图 5-12. 例 5-4 界面. 分析:根据数学知识,整数 M 如果是素数,则它只能有 1 和 M 两个约数。换一种说法, 整数 M 是否素数,可以考察它是否能被 2,3,…,M-1 整除,如果 2,3,…,M-1 都不能整 除 M,则 M 是素数,否则 M 不是素数。另外根据数的特性,可以只考察 2,3,…,M/2 或 M 。.

(12) 112. Visual Basic 语言程序设计教程. 画出流程图如图 5-13 所示。 从图上可以看出,当发现某个数 I 是 M 的约数时将不再继续循环(非正常出口,此时还 有未考察到的数),直接跳出循环结构。由于循环结构出现了两个出口,为了判断是哪个出口 出来的,所以紧接着还要判断一次,如果此时 I≤K 成立,说明找到了 M 的一个约数,是非正 常出口出来的,M 不是素数,否则 M 是素数。 开始. 输入 M I=2. N. I<=Sqr(M) Y. N. I 不整除 M Y I=I+1. Y. N. I<=Sqr(M). M 不是素数. M 是素数. 结束 图 5-13. 判断素数的流程图. 书写 Visual Basic 程序代码如下: Private Sub Form_Load() Form1.Caption="判断素数" Frame1.Caption="请输入一个大于 2 的整数" Command1.Caption="开始判断" End Sub Private Sub Command1_Click() Dim n As Integer M=Val(Text1.Text) For I=2 To Int(Sqr(m)) If M Mod I=0 Then Exit For 'n 被某个数整除,不是素数,结束循环 Next.

(13) 第 5 章 循环结构程序设计. 113. If I <= Sqr(M) Then 'n 已经被某数整除,不是素数 Label1.Caption=M & "不是一个素数。" Else Label1.Caption=M & "是一个素数。" End If Text1.SetFocus End Sub Private Sub Text1_GotFocus() Text1.SelStart=0 Text1.SelLength=Len(Text1.Text) End Sub. 例 5-5 在文本框 1 中输入一个字符串,再单击“检查”命令按钮,若字符串中包含非数 字字符,则在标签中显示出错信息。设计程序完成此功能。 设计步骤如下: (1)新建一个工程。在窗体上画 1 个文本框,用于输入字符串;1 个标签,用于输出结 果;1 个命令按钮。 (2)设计思路分析:使用循环过程,依次取出字符串中的字符,判断每个字符是否数字, 发现非字符则停止检查,给出出错信息。画出“检查”的流程如图 5-14 所示。 开始. S←文本框内容. I=1. N. I≤字符串长度. —. Y C←取第 I 个字符. C 是数字. N. 显示出错. Y I=I+1. 图 5-14. 结束. 例 5-5 流程图.

(14) 114. Visual Basic 语言程序设计教程. (3)根据流程图编写代码如下: Private Sub Command1_Click() Dim S As String, c As String*1 Label2.Caption="" S=Text1.Text For I=1 To Len(s) C=Mid(S, I, 1) If Not (C >= "0" And C <= "9") Then Label2.Caption="包含不正确字符" Exit For End If Next I End Sub Private Sub Form_Load() Form1.Caption="循环处理字符串中字符" Label1.Caption="输入字符串:" Text1.Text="" Command1.Caption="检查" End Sub. 程序运行后,在文本框中输入一串字符,再单击命令按钮,结果如图 5-15 所示。本例中 对循环非正常出口的处理,使用 Exit For 语句强行跳出循环实现。. 图 5-15. 循环处理字符串中字符示例. 例 5-6 求 1000 到 1100 之间的所有素数,并从大到小显示在文本框中。 分析:从 1100 开始到 1000,对其各个数依次进行测试,判断是否是素数,若是,便连接 到输出字符串中,若不是,则放弃,测试下一个数。显然这里需要双重的 For 循环,外层循环 生成各个数,内层循环测试其是否是素数。 程序设计步骤如下: (1)在窗体上画 1 个框架 Frame1、1 个文体框 Text1(显示求得的素数)及 1 个命令按 钮 Command1,程序界面如图 5-14 所示。并且在属性窗口,把文本框 Text1 的属性 MultiLine 设置为 True,属性 ScrollBars 设置为 2(为什么?) 。 (2)参考例 5-4 的代码,编写程序如下: Private Sub Form_Load() Frame1.Caption="1100 到 1000 的素数" Command1.Caption="计算".

(15) 第 5 章 循环结构程序设计. 115. Text1.Text="" Text1.Locked=True End Sub. 编写命令按钮 Command1 的 Click 事件过程,求出素数,并显示在文本框中。 Private Sub Command1_Click() ss="" 'ss 是存放结果的字符变量 For n=1099 To 1000 Step -2 For i=2 To Int(Sqr(n)) If n Mod i=0 Then Exit For Next If i > Sqr(n) Then ss=ss & n & vbCrLf End If Next Text1.Text=ss End Sub. 运行程序,单击“计算”按钮,即可得到如图 5-16 的运算结果。. 图 5-16. 求多个素数. 例 5-7 按格式打印如图 5-17 所示的九九表。 分析:数学课用的“九九表”,形式如图 5-17 所示。. 图 5-17. 九九表. 每个算式中的第二个乘数用 i 表示,则 i=1,…,9,表示一共有 9 行,处于外层循环,算 式中的第二个乘数用 j 表示,则 j=1,…,i,表示每一行有 1,2,…,i 列,处于内层循环, 再配合格式输出,写出程序如下:.

(16) 116. Visual Basic 语言程序设计教程 Private Sub Form_Click() Dim i as Integer, j As Integer For i=1 To 9 For j=1 To i Print i; "*"; j; "="; i*j; '以分号(;)结束,控制不换行 Next j Print '输出空行,取消“不换行”的控制 Next i End Sub Private Sub Form_Load() Form1.Caption="九九表" End Sub. 循环嵌套结构的意义很简单,也很容易掌握。在循环嵌套结构中,外层循环执行一次, 内层循环变量的值就要从头至尾变化一圈。如果外层循环的次数是 r1 的话,则内层循环体 就要做 r1 圈,所以内层循环体的执行次数,应该是其所有外层循环次数与内层循环次数的 乘积值。 在循环嵌套结构中,内层、外层的概念是相对的,第一层循环是第二层循环的外层,第 二层循环又是第三层循环的外层。只要对基本的循环结构执行过程弄清楚了,要处理多层循环 结构也就比较容易了。 例 5-8 搬砖问题。36 块砖,36 人搬;男搬 4,女搬 3,两个小孩抬一砖。要求一次搬完, 问男、女、小孩各若干? 分析:设男士 x 人,女士 y 人,小孩 z 人。根据题意可以得到方程式: x+y+z=36 4x+3y+z/2=36 3 个未知数,2 个方程式,这是一个不定方程组,应该有多组解,无法用数学方法解,只 能将所有可能的 x,y,z 值(即采用“穷举”的办法)一个一个地去试,看是否满足上面的方 程组,只要满足则得到一组解。 根据题意可知,x 的取值范围为 0~9,y 的取值范围为 0~12,z 的取值范围为 0~72。利 用三重循环可以罗列出所有的取值组合。下面是 Visual Basic 语言的源程序: Private Sub Form_Click() Dim x, y, z As Integer For x=0 To 9 For y=0 To 12 For z=0 To 72 If (x+y+z=36 And 4*x+3*y+z/2=36) Then Print x, y, z Next z Next y Next x End Sub. 程序逻辑简单易懂,但运行效率很低,因为循环体的 If 语句执行次数高达 10×13×73=949 次。可以发现,当 x,y 的取值确定以后,z 的取值就可以用 z=36-x-y 算出,从而可以减少一 层循环,再将作为“条件”的方程变换为 8x+6y+z=72,可以保证只有偶数的 z 才有可能被选.

(17) 第 5 章 循环结构程序设计. 117. 中。程序修改如下: Private Sub Form_Click() Dim x as Integer, y as Integer, z As Integer For x=0 To 9 For y=0 To 12 z=36 - x - y If 8*x+6*y+z=72 Then Print x, y, z Next y Next x End Sub. 内层的循环体为两个语句,执行的次数为 10×13=130 次,提高了效率。可见只要对问题 稍作分析,便可写出更优质的程序。 π 1 1 1 -k 例 5-9 用级数  1     …… ,求 π 的近似值,当最后一项的绝对值小于 10 时, 4 3 5 7 停止计算。 1 1 分析:设最后项为 ,停止计算的条件为 <10-k,即级数中数据项的分母 n>10k。用变量 n n Pi 保存级数和,变量 s 控制数据项的符号,画出程序的流程图如图 5-18 所示。. 输入 k Pi←0 n←1 s←1. 假. n<=10^k. 真 Pi←Pi+s/n s←(-s) n←n+2. 图 5-18. 输出=Pi*4. 计算值的流程图. 程序设计步骤如下: (1)在窗体上画 1 个框架 Frame1、1 个命令按钮 Command1、2 个文本框及 2 个标签, 程序界面如图 5-19 所示。 (2)编写程序代码如下: Private Sub Form_Load() Frame1.Caption="计算圆周率" Label1.Caption="输入小数点后的有效数字位数".

(18) Visual Basic 语言程序设计教程. 118. Label2.Caption="=" Command1.Caption="计算" Text1.Text="": Text2.Text="" Text2.Locked=True Show Text1.SetFocus End Sub. 图 5-19. 计算. 编写命令按钮 Command1 的 Click 事件过程,计算圆周率。代码如下: Private Sub Command1_Click() Dim Pi As Double, n As Long Dim s As Integer, k As Integer k=Val(Text1.Text) n=1: s=1: Pi=0 Do While n<=10^k Pi=Pi+s/n s=-s n=n+2 Loop Pi=Pi*4 f=String(k, "#") Text2.Text=Format(Pi, "0." & f) End Sub Private Sub Text1_GotFocus() Text1.SelStart=0 Text1.SelLength=Len(Text1.Text) End Sub. 由于循环体执行次数不知道,使用“条件”控制循环出口,不能用 For…Next 语句书写, 根据流程图使用当型循环前测试型语句书写。 例 5-10 设我国人口 2006 年统计为 12.9 亿,如果年增长率为 r,问从 2006 年起经过几 年人口会翻一番。 分析:设人口初值为 p=12.9,可以用递推方法设计循环体,依次推出经过一年后、二年 后、…、N 年后的人口值,由于循环的次数不知道,所以用条件:“人口达到或超过 2*12.9 亿” 作为控制循环结束的条件。流程图如图 5-20 所示。使用 Do While…Loop 语句书写程序运行结 果如图 5-21 所示。 Private Sub Form_Click().

(19) 第 5 章 循环结构程序设计 Dim p as Single, r As Single Dim year As Integer p=12.9: year=0 r=Val(Text1.Text) Do p=p*(1+r) year=year+1 Loop While p < 2*12.9 Label1.Caption="经过" & year & "年人口会翻一番" End Sub Private Sub Form_Load() Form1.Caption="人口问题" Frame1.Caption="输入增长率" End Sub 开始. p=12.9,year=0. 输入 r. p=p*(1+r). year=year+1 Y. p<2*12.9 N 输出 p,year. 结束 图 5-20. 图 5-21. 例 5-10 算法流程图. 例 5-10 运行结果. 119.

(20) 120. Visual Basic 语言程序设计教程. 例 5-11 输入一个自然数,要求打印出各因子。例如,输入 24,则输出 24=1×2×2×2 ×3。 分析:分解一个数的各个因子,可以从 2 开始去除该数,如果 2 是它的因子,则输出 2 并且不改变除数继续去除,直到 2 不是它的因子,然后用 3 去除,……。循环考察该数是否还 有因子的条件是:该数不等于 1。流程图如图 5-22 所示。根据流程图结构,使用 Do While… Loop 语句写出程序如下,程序运行结果如图 5-23 所示。 开始. 输入 m,i=2,输出因子 1 N. m≠1. 结束. Y i 是 m 的因子. N. Y 输出 i,计算 m=m/i. 图 5-22. 图 5-23 Private Sub Form_Click() Dim m as Integer, i As Integer Dim str As String str="" m=Val(Text1.Text) i=2 str=m & "=" & 1 Do While m <> 1 If m Mod i=0 Then str=str & "*" & i m=m \ i. 例 5-9 流程图. 例 5-11 运行结果. i=i+1.

(21) 第 5 章 循环结构程序设计. 121. Else i=i+1 End If Loop Label1.Caption=str End Sub Private Sub Form_Load() Form1.Caption="将正整数分解成因子和" Frame1.Caption="输入正整数" End Sub. 例 5-12 找出 1~100 之间的“同构数” 。“同构数”是指这样一个数,它出现在它的平方 2 数的右侧。例如:5 =25,5 是 25 右侧的数,5 就是“同构数”。 分析:判断一个数是否出现在其平方数的右侧,关键要看其平方数减去该数后右侧 0 的 个数是否刚好是该数的位数,问题就变成求该数的位数。可以写出流程图如图 5-24 所示,程 序如下: 开始. i=1. N. i<=100 Y k←m*m. 结束 n=1. i 除以 10n 商<>0. N. Y. n←n+1. i 是同构数. N. Y 输出 i. i←i+1 图 5-24. 求同构数流程图.

(22) Visual Basic 语言程序设计教程. 122. 程序设计步骤如下: (1)在窗体上画 1 个框架 Frame1、1 个文体框 Text1(显示求得的素数)及 1 个命令按 钮 Command1,程序界面如图 5-25 所示。在属性窗口把文本框 Text1 的属性 MultiLine 设置为 True,属性 ScrollBars 设置为 2。. 图 5-25. 例 5-12 运行结果. (2)编写程序代码。 Private Sub Form_Click() Dim m as Integer, k As Integer Dim str As String For m=1 To 100 k=m*m n=1 Do While m\(10^n)<>0 n=n+1 Loop If k-m=(k\10^n)*10^n Then str=str & m & vbCrLf Next m Text1.Text=str End Sub Private Sub Form_Load() Form1.Caption="找同构数" Frame1.Caption="1~100 之间的同构数:" End Sub. 程序中表达式“(k\10^n)*10^n”表示将平方整除 10 的 N 次方后再添上 n 个 0,也即将平 方数末尾 n 个数字变成 0,逻辑表达式“k-m=k\(10^n)*10^n”如果成立则表示平方数减去该数 后末尾 0 的个数也有 n 个,所以 m 是同构数。 通过本章学习,读者可以体会到,循环程序设计包含两步工作:第一步是设计循环结构, 第二步是用语句将循环结构翻译成程序,前者是解决问题的根本,后者是解决问题的形式。如 果读者熟悉其他计算机程序设计语言,只要理解了语句的功能,也可以将解决问题的流程图翻 译成其他语言的程序,照样能让计算机运行。 循环结构程序设计是程序设计技术的具体体现,对于每个初学者来说都是一个难点,学 习过程中可以通过阅读程序(或流程图)慢慢领会构造循环结构的内涵,然后试着编写一些简 单程序。遇到问题时从循环结构的三个要素入手考虑构造循环结构的方法,通过练习逐步掌握.

(23) 第 5 章 循环结构程序设计. 123. 本章内容,为深入学习后续内容打下基础。. 5.4. 列表框和组合框控件. 使用列表框(ListBox)可以从中进行选择数据项的滚动列表。组合框(ComboBox)是将 文本框和列表框的功能结合在一起,用户可通过在组合框中输入文本来选定项目,也可从列表 中选定项目。 5.4.1 列表框 列表框控件显示一个项目列表,让用户从其中选择一项或多项。如果项目总数超过了可 显示的空间,列表框会自动添加滚动条。列表框最主要的特点是只能从其中选择,而不能直接 写入或修改其中的内容,因此,它能满足从现有选项中快速选择数据项的要求。 列表框内的项目称为表项,表项的加入是按一定的顺序号进行的,这个顺序号称为该表 项的索引(号)。 (1)常用属性。 1)Name 属性:设置控件对象的名称。列表框的默认名称为 List1,List2,……。 2)List 属性:这是一个字符型(String)数组,用于存放列表框的表项。该属性引用的格 式如下: Object.List(Index)[=String] 其中,Object 为一个列表框对象名称;Index 为列表中具体某一项的索引号;String 为字 符串表达式,指定列表项目。 List 数组的下标(Index)规定从 0 开始,也就是说,第一个元素的下标是 0。可以在设计 状态通过如图 5-12 所示的属性窗口添加数据项,每输入一项按 Ctrl+Enter 组合键换行,全部 输入完后按 Enter 键,所输入的数据项将会出现在列表框中。 3)ListIndex 属性:返回或设置控件中当前选择项目的索引(号),在窗体设计时不可用, 只能在程序中设置和引用。若未选定任何项目,则 ListIndex 的值为-1。 表达式 List(List1.ListIndex)返回当前在列表框 List1 中选择项目的字符串。若选中列表中 的第一项,则 ListIndex=0。 4)ListCount 属性:返回控件列表项目的个数。该属性只能在程序中设置和引用。列表中 最后一个元素的索引号 Index=ListCount-1。 5)Selected 属性:返回或设置在 ListBox 控件中的一个表项的选择状态。该属性是一个与 List 属性一样、有相同项数的布尔值数组。在窗体设计时是不可用的。引用格式如下: Object.Selected(Index)[=Boolean] 其中,Object 为列表框对象名称;Index 为控件中数据项的索引号;Boolean 为一个用来 指定数据项是否被选中的布尔表达式。该属性值为 True 表示 Index 指定的表项被选中,为 False (默认值)表示该表项没有被选中。 6)Sorted 属性:返回一个布尔值,指定控件的元素是否自动按字母表顺序排序,该属性 只能在设计状态设置。当值为:  True:列表中的项目按字符码顺序排序。.

(24) Visual Basic 语言程序设计教程. 124. False:(默认值)列表中的项目不按字母表顺序排序。 7)Text 属性:存放在 ListBox 的列表框中选定项目的文本,返回值总与表达式 List(ListIndex) 的返回值相同。该属性为只读属性。 8)MultiSelect 属性:返回或设置一个值,该值指示是否能够在 ListBox 控件中进行复选 以及如何进行复选。在运行时是只读的。其设置值为:  0:(默认值)不允许复选。  1:简单复选。鼠标单击或按空格键在列表中选中或取消选中项(箭头键移动焦点) 。  2:扩展复选。按 Shift 键并单击鼠标,或按下 Shift 键以及一个箭头键(上箭头、下 箭头、左箭头、和右箭头)将在以前选中项的基础上扩展选择到当前选中项。按 Ctrl 键并单击可以在列表中选中或取消选中项。 9)Style 属性:确定控件的样式。该属性值为:  VbListBoxStandard(0):(默认值)标准形式,为简单的文本项的列表。  VbListBoxCheckbox(1):复选框形式,每一个文本项的旁边都有一个复选框。 (2)事件。 列表框可接收 Click、DblClick 等事件。 注意:如在程序运行时向属性 ListIndex 赋值,也将触发列表框的 Click 事件。 (3)方法。 列表框中的数据项可以在设计时通过 List 属性设置,也可以在程序中用 AddItem 方法添 加,用 RemoveItem 或 Clear 方法删除。 1)AddItem 方法:用于将项目添加到 ListBox 控件的列表中。语法格式如下: . Object.AddItem Item[,Index] 其中,Object 为列表框对象名称;Item 为一个字符串表达式,用以指定添加到该对象的 项目;Index 为一个整数,用以指定新项目或行在该对象中的位置(顺序号)。 说明:如果所给出的 Index 值有效,则 Item 将放置在 Object 中相应的位置。如果省略 Index, 当 Sorted 属性设置为 True 时,Item 将添加到恰当的排序位置,当 Sorted 属性设置为 False 时, Item 将添加到列表的尾部。 2)RemoveItem 方法:从 ListBox 控件中删除一个表项。语法格式如下: Object.RemoveItem Index 其中,Object 为列表对象名称;Index 为一个整数,指定要删除的项或行在对象中的位置 (顺序号)。 3)Clear 方法:用于清除 ListBox 的内容,语法格式如下: Object.Clear (4)列表框表项的输出。 输出列表框中的表项,有下面两种常用方法: 1)单击列表框内某一表项,则该表项值存放在 Text 属性中。例如: x=List1.Text. '把选定的表项值存放在变量 x 中. 或 x=List1.List(List1.ListIndex). 2)指定索引号以获取表项的内容。例如:.

(25) 第 5 章 循环结构程序设计. 125. List1.ListIndex=4 x=List1.Text. 或 x=List1.List(4). 下面通过例子说明列表框的应用。 例 5-13 设计程序,找出 100~1000 范围内所有能同时被 3 和 7 整除的自然数。 分析:某数 n 能同时被 3 和 7 整除的判别条件为 n Mod 3=0 And n Mod 7。 (1)在窗体上添加 1 个列表框 List1(显示计算结果) 、1 个标签 Label1(显示提示信息) 及 1 个命令按钮 Command1。程序运行的结果如图 5-26 所示。. 图 5-26. 用列表框输出数据. (2)编写程序代码如下: Private Sub Form_Load() Label1.Caption="找出 100~1000 能被 3 和 7 整除的自然数" Command1.Caption="计算" End Sub. 用列表框 List1 显示结果。程序代码如下: Private Sub Command1_Click() Dim n As Integer List1.Clear For n=100 To 1000 If n Mod 3=0 And n Mod 7=0 Then List1.AddItem n End If Next End Sub. 例 5-14 选择和移动数据,用户界面如图 5-27 所示。窗体上有 2 个标签、2 个列表框和 2 个命令按钮。左边列表框(List1)列出 10~99 之间的整数,右边列表框(List2)列出被选 中的数。程序运行时,按“选项右移”或“选项左移”可将已选择项移动到右边或左边列表框。 (1)为了简化程序,在窗体的 Load 事件过程中产生 10~99 之间整数,故使用了 Show 方法。 (2)编写程序代码如下: Private Sub Command1_Click(). '选项右移.

(26) 126. Visual Basic 语言程序设计教程 Dim k As Integer k=0 Do While k < List1.ListCount If List1.Selected(k) Then List2.AddItem List1.List(k) List1.RemoveItem (k) ' Else k=k+1 End If Loop End Sub Private Sub Command2_Click() Dim k As Integer k=0 Do While k < List2.ListCount If List2.Selected(k) Then List1.AddItem List2.List(k) List2.RemoveItem (k) Else k=k+1 End If Loop End Sub Private Sub Form_Load() Form1.Caption="使用列表框示例" Frame1.Caption="10~99 之间的整数" Frame2.Caption="被选中的数" Command1.Caption="选项右移" Command2.Caption="选项左移" Show For i=1 To 100 List1.AddItem i Next i End Sub. 图 5-27. '第 i 项被选中 '被选中项移到右边列表框 '从左边列表框中移除被选中项. 列表框应用示例.

(27) 第 5 章 循环结构程序设计. 127. 5.4.2 组合框 组合框是将文本框和列表框组合而成的控件,它有 3 种不同的类型,可用 style 属性设置。 组合框是输入控件中使用相当广泛的一种,它比文本框规范,比列表框灵活,节省窗体的空间。 用户可通过在组合框中输入文本来选定项目,也可从列表中选定项目。所以用组合框进行规范 化的输入是一个很好的途径。 组合框具有列表框和文本框的大部分属性和方法,还有一些自己的属性。 组合框用三种样式,每种样式都可在设计或运行时,用 Style 属性设置,而且每种样式都 可用数值或符号常数进行设置。这三种样式的 Style 设置值为:  下拉式组合框(0):vbComboDropDown。  简单组合框(1):vbComboSimple。  下拉式列表框(2):vbComboDropDownList。 (1)下拉式组合框(Dropdown Combo)。 在默认设置(Style=0)下,组合框为下拉式组合框,在屏幕上只显示文本编辑框和一个下 拉箭头。用户可以(像在文本框中一样)直接输入文本,也可单击组合框右侧的附带箭头打开 选项列表。可以认为控件由一个文本框和一个下拉列表组成。选定的数据项将显示在组合框顶 端的文本部分中。当控件获得焦点时,也可按 Alt+↓组合键打开列表。如图 5-28 所示。. 图 5-28. 下拉式组合框外观. (2)简单组合框。 如果 Style 属性设置为 1,组合框为简单组合框样式,顶部是一个文本框(没有下拉的箭 头),可以输入数据,下面便是一个列表框,不能收起,如图 5-29 所示。为显示列表框部分, 在添加控件时,必须将列表框绘制得足够长(大)。当选项数超过列表的显示限度时将自动插 入一个垂直滚动条。用户可直接输入文本,也可从列表中选择数据项。像下拉式组合框一样, 简单组合框也允许用户输入那些不在列表中的数据项。 (3)下拉式列表框。 如果 Style 属性设置为 2,组合框为下拉式列表框,外观像下拉式组合框,功能与单纯的 列表框相似,它只显示数据项目的列表,用户只能选择数据项,不能输入数据项,它没有文本 框部分,如图 5-30 所示。下拉式列表框与列表框的不同之处在于,只有单击列表框右侧的箭 头,或获得焦点后按 Alt+↓组合键,才能显示列表,否则不显示列表。当窗体上的空间较少 时,可使用这种类型的列表框。.

(28) 128. Visual Basic 语言程序设计教程. 图 5-29. 图 5-30. 简单组合框. 下拉式列表框. 注意:组合框的 Text 属性,对下拉式组合框和简单组合框来说,既可以是用户所选定数 据项的文本,也可以是直接从文本框输入的文本;对下拉式列表框来说,则只能是用户所选定 数据项的文本。 例 5-15 设计程序,把 10~99 之间整数放入组合框,再对组合框进行项目显示、添加、 删除、全部删除等操作。 程序设计步骤如下: (1)在窗体上画 2 标签、1 个组合框、1 个文本框及 4 个命令按钮。程序界面如图 5-31 所示。. 图 5-31. 例 5-15 程序运行界面. 组合框 Combo1 的 Style 属性采用默认值 0,为下拉式组合框。.

(29) 第 5 章 循环结构程序设计. 129. (2)编写程序代码。 首先编写窗体的 Load 事件过程,设置各控件的有关属性,为组合框的列表添加数据项。 代码如下: Private Sub Form_Load() Form1.Caption="组合框应用" Label1.Caption="选修课程名称" Label2.Caption="选修课程总数" Command1.Caption="添加" Command2.Caption="删除" Command3.Caption="全清" Command4.Caption="退出" Combo1.AddItem "电子商务" Combo1.AddItem "网页制作" Combo1.AddItem "计算机网络技术" Combo1.AddItem "计算机多媒体技术" Combo1.Text="" Combo1.TabIndex=0 Text1.Text=Combo1.ListCount End Sub. 编写“添加”命令按钮 Command1 的 Click 事件过程,实现通过组合框的文本框向列表框 部分添加课程名称。代码如下: Private Sub Command1_Click() If Len(Combo1.Text) > 0 Then Combo1.AddItem Combo1.Text Text1.Text=Combo1.ListCount End If Combo1.Text="" Combo1.SetFocus End Sub. '把文本框输入的项目添加到列表中 '更新显示的列表项目总数. 编写“删除”命令按钮 Command2 的 Click 事件过程,实现删除选择的表项。代码如下: Private Sub Command2_Click() If Combo1.ListIndex <> -1 Then Combo1.RemoveItem Combo1.ListIndex Text1.Text=Combo1.ListCount End If End Sub. 'Combo1.ListIndex=-1 表示无选择项 '移去所选择的表项. 编写“全清”命令按钮 Command3 的 Click 事件过程,实现清除全部表项。代码如下: Private Sub Command3_Click() Combo1.Clear Text1.Text=Combo1.ListCount End Sub. 编写“退出”命令按钮 Command4 的 Click 事件过程,结束程序的运行。代码如下: Private Sub Command4_Click() Unload Me End Sub.

(30) Visual Basic 语言程序设计教程. 130. 习题 5 一、单选题 )。. 1.下列循环语句所确定的循环次数是( For k=200# To 100 Step -2*10 n=n+1 Next. A.6 B.5 2.下列事件过程的运行结果是(. C.4. D.3. C.75. D.55. ) 。. Private Sub Command1_Click() s=0 For k=10 To 50 Step 15 s=s+k Next Print s End Sub. A.20 B.130 3.分析下列程序,回答以下问题: (1)语句 s=s+n 被执行的次数为( (2)程序的运行结果为( )。. )。. Private Sub Command1_Click() n=1: s=1 Do While n < 6 s=s+n If n < 3 Then n=n+1 Else n=n+2 Loop Print s End Sub. (1)A. 2 B.3 (2)A. 13 B.12 4.下面程序运行的结果是(. C.4 C.11. D.5 D.10. C.735. D.41. )。. Private Sub Command1_Click() s="0123456789": c="" For k=2 To Len(s) Step 3 a=Left(s, k) b=Right(a, k) c=Mid(b, k, 1)+c Next Print c End Sub. A.7410. B.741.

(31) 第 5 章 循环结构程序设计. 5.执行下列程序后,变量 s 的值是(. 131. )。. Private Sub Command1_Click() s=0 For m=1 To 3 n=1 Do While n <= m s=s+n n=n+1 Loop Next Print s End Sub. A.4 B.7 C.10 6.Command1_Click()事件过程的功能是计算( ) 。. D.15. Private Sub Command1_Click() s=1: n=2 Do While n < 1000 s=s+n n=n+2 Loop Print "s="; s End Sub. A.s=1+2+4+6+…+998 C.s=2+4+6+…+998 7.下面程序运行结果是(. B.s=1+2+4+6+…+1000 D.s=2+4+6+…+1000 )。. Private Sub Form_Click() x=1 y=1 For i=1 To 3 f=x+y x=y y=f Print f; Next i End Sub. A.2 3 6 B.2 2 2 8.下面程序运行结果是( )。 Private Sub Form_Click() i=4 a=5 Do i=i+1 a=a+2 Loop Until i >= 7 Print "i="; i;. C.2 3 4. D.2 3 5.

(32) Visual Basic 语言程序设计教程. 132 Print "a="; a End Sub. A.i=4 a=5 C.i=8 a=7 9.下面程序运行结果是(. B.i=7 a=13v D.i=7 a=11 )。. Private Sub Form_Click() a=0: b=1 Do a=a+b b=b+1 Loop While a < 10 Print a; b End Sub. A.10 5 B.A B 10.下面程序运行结果是( )。. C.0. 1. D.10. 30. Private Sub Form_Click() Dim k as Integer, a as Integer, b As Integer a=20: b=2: k=2 Do While k <= a b=b*2 k=k+5 Loop Print b End Sub. A.38 B.35 11.下面程序运行结果是( Private For i=1 For j=0 s=s+1 Next j, Print s End Sub. A.6. C.32. D.36. C.4. D.3. ) 。. Sub Form_Click() To 3 To i - 1 i. B.5. 二、多选题 1.能够显示字符串"ABCD"的程序段有( )。 A.Print "ABCD" B.For X=65 To 68: Print Chr(X) ; : Next X C.For X=1 To 4 : Print Chr(X+&H40); : Next X D.For X=1 To 4 : Print Chr(X+Asc("A") -1); : Next X E.For X="A" To "D" : Print X; : Next X 2.能正确地将 1、2、3、4、5 这 5 个数累加(和为 15)的程序段为(. )。.

(33) 第 5 章 循环结构程序设计. 133. A.. B.. C.. D.. E.. S=0:n=1 Do While n<5 S=S+n n=n+1 Loop. S=0:n=1 Do While n<=5 S =S+n n=n+1 Loop. S=0:n=1 Do S =S+n n=n+1 Loop While n<5. S=0:n=1 Do S =S+n n=n+1 Loop Until n>=5. S=0:n=1 Do S =S+n n=n+1 Loop Until n>5. 3.Visual Basic 中可用于控制循环的语句有( A.If 语句与 Goto 语句配合使用 B.While…Wend C.For…Next 语句 D.Do While…Loop 语句 E.Do…Loop Until 语句. )。. 三、分析程序 1.设 n 和 s 均为整型变量,分别具有初值 1 和 10。下列循环语句的循环体各执行多少次? 结束循环后 n 值各为多少? (1)n=1: s=10 (2)n=1: s=10 Do While n <= s n=n+3 Loop. (3)n=1: s=10 Do n=n*3 Loop Until n > s. Do Until n*s > 40 n=n*2 Loop. (4)n=1: s=10 Do n=s\n n=n+2 Loop While n < s. (5)n=1: s=10 While n < s n=n+3 Wend. 2.下面运行程序后输出结果为:________。 Private Sub Form_Click() mun=0 Do While mun <= 3 mun=mun+1 Print mun Loop End Sub. 3.下面程序的循环体执行次数是:________。 Private Sub Form_Click() a=0 Do While a <= 10 a=a+2 Loop.

(34) Visual Basic 语言程序设计教程. 134 End Sub. 4.下面程序运行后,a 的值是:________。 Private Sub Form_Click() a=5 For i=2 To 4.2 Step 0.4 a=a+2 Next i Print a End Sub. 5.以下程序段从文本框 Text1 中输入一个字符串,把该字符串按相反的次序显示在文本 框 Text2 中。如输入“ABCDE”,输出“EDCBA”。请填空完善该程序。 Private Sub Command1_Click() Dim s As String, t As String, c As String s=Trim(Text1.Text): t="" For k=1 To ________ c=________ t=________ Next ________=t End Sub n. 6.设 m 和 n 都是正整数,输入 m,求当 2 大于等于 m 时,n 的最小值是多少?填空完 善该程序。 Private Sub Command1_Click() Dim m As Long, t As Long, n As Integer m=Val(InputBox("输入大于 1 的正整数 m:", "输入数据")) n=________ t=0 Do While True n=________ t=________ If t >= m Then Print "2 的"; n; "次方≥"; m Exit Do End If Loop End Sub. 7.从字符串中查找子字符串"123",将该子字符串删除,但子字符串"1234"保留,如将 "AB123C1234DE123F"处理成“ABC1234EF”。完成下列程序代码。 Private Sub Form_Load() x=InputBox("输入字符串") p=InStr(x, "123") Do While p > 0 If Mid(x, p+3, 1) <> "4" Then x=Left(x, p - 1) +________ Else.

(35) 第 5 章 循环结构程序设计. 135. p=p +________ End If p=InStr(________, x, "123") Loop MsgBox ("处理结果:"+x) Unload Me End Sub. 8.在窗体上已经建立了两个文本框(Text1 和 Text2)和一个命令按钮(Command1),用 户在文本框 Text1 中输入文本,单击命令按钮后,从文本框 Text1 中取出英文字母,并按输入 顺序显示在文本框 Text2 中。例如,输入"12aA3b4B5",在文本框 Text2 中显示为"aAbB"。请 完善下列程序代码。 Private Sub Command1_Click() Dim s As String, y As String s=Trim(________) y="" For k=1 To ________ x=Mid(s, k, 1) If ________ Then y=________ End If Next Text2.Text=y End Sub. 9.窗体上有 1 个滚动条 HScroll1、1 个文本框 Text1 和 1 个标签 Label1,程序要使每次单 击滚动条两端箭头或单击滚动条滑块与两端箭头之间的空白区域时,文本框本容能反映滚动条 的值,请完善程序。 Private Sub HScroll1________() Text1.Text=HScroll1. ________ End Sub.

(36)

參考文獻

相關文件

推广 拉格朗日乘数法可推广到多个自变量和多

样条插值的算例 三次样条的概念.

方法一: 採用 【Compare Means】分析選項 One- One -way ANOVA way ANOVA分析報表說明 分析報表說明

〝电子签署〞(electronic signature)

「僅僅靠事件的順序本身並不能構成情節。」「因

結合夥伴協作學校,與大專院校、出版社及電 子學習平台機構組成專業協作社群,以資訊素

学校现有教学仪器设备超过1亿元,学校图书馆纸质藏书125万册,电子图书

• Flash 的打散(Break Apart)功能,可以將群組 物件、點陣圖、文字物件,以及元件轉換成填色