Microsoft Word - ch05.doc

Similar documents
Microsoft Word - 实验3.doc

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

Microsoft Word - 正文.doc

2010年3月计算机等级考试四级网络工程师笔试

Microsoft Word Visual_Basic程序设计上机实践教程正文.doc

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

PowerPoint 演示文稿

实验目的 (1) 熟练掌握顺序 分支 循环三种结构 (2) 会使用流程控制结构编写程序 第三章程序的流程控制 实验要求 (1) 掌握 if-else swith-case 的使用 (2) 掌握 while do-while for 的使用 (3) 掌握分支嵌套和循环嵌套 (4) 分析理解如何避免死循

Microsoft PowerPoint - VB14.ppt

四川省普通高等学校

Microsoft Word - VB全文.doc

Microsoft Word - 新1-16最新.doc

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

Microsoft Word - 第3章.doc

untitled

Microsoft Word - 小心翼翼的二十一點N.doc

untitled

TC35短信发送程序设计

Microsoft Word - Vcj05.doc

林子雨《C语言程序设计》讲义PPT

Visual Basic D 3D

投稿類別:電子工程類

林子雨《C语言程序设计》讲义PPT

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

Excel VBA Excel Visual Basic for Application

VB程序设计教程

2

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

ThreeDtunnel.doc

PowerPoint Presentation

2009年3月二级VB语言笔试真题

<4D F736F F D20D0C2B1E C B3CCD0F2C9E8BCC6B0B8C0FDB3F6B0E6B8E5>

试卷代号 : 座位号 OJ 中央广播电视大学 学年度第一学期 " 开放专科 " 期末考试 Visual Basic 程序设计试题 题号 一 二 三 四 五 总分 分数 I I I I I I I 2011 年 1 月 得分 评卷人 I I I 题 { 每小题

<4D F736F F D204A617661B3CCD0F2C9E8BCC6BBF9B4A1A3A8B5DA35B0E6A3A9CAB5D1E9D6B8B5BCD3EBCFB0CCE2BDE2B4F020B5DA33D5C22E646F63>

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

数学分析(I)短课程 [Part 2] 4mm 自然数、整数和有理数

Microsoft Word - 第3章.doc

1. 要退出 Do---Loop 循环, 可使用的语句是 ( ) 语句 A. Exit B. Exit For C. Exit Do D. End Do 5. 有程序代码如下 : Text1. Text=" 欢迎学习 VB!" 则 T e x t 1, Text, 和 " 欢迎学习 VB!" 分别代

《Visual Basic程序设计》实验课

穨文件1

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

Microsoft PowerPoint - OPVB1基本VB.ppt

Microsoft Word - 扉页

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

Microsoft Word - 实验3.doc

期中考试试题讲解

《计算概论》课程 第十九讲 C 程序设计语言应用

吳元康

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f


VB控件教程大全

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

标题

<4D F736F F D D382043D3EFD1D4B3CCD0F2C9E8BCC6D5FDCEC42E646F63>

Microsoft Word - 專題製作研究報告書.doc

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

幻灯片 1

《C语言程序设计》教材习题参考答案

第一章 引言

chp3

Microsoft PowerPoint - VB3

《C语言程序设计》教材习题参考答案

IsPostBack 2


提示 : (1) 程序运行时单击两次鼠标, 观察输出结果 ; (2) 将输出内容修改为 我的第一个 VB 程序 ; (3) 尝试改变输出文本的颜色 上机要求 : (1) 每题创建一个 VB 工程, 并在窗体 (Form1) 上设计界面, 在相关事件过程中编写程序 ; (2) 保存并运行应用程序 ;

4. 有程序代码如下 : Text!' Text= "Visual Basic" 则 Te xtl ~ Te xt, 和 " V i s ua l Basi c " 分别代表 ( ) A. 对象, 值, 属性 B. 对象, 方法, 属性 C. 对象, 属性, 值专 D. 属性, 对象, 值 5. 要

Microsoft PowerPoint - 01_Introduction.ppt

通用可视化开发语言实习指导书.doc

Microsoft PowerPoint - Chapter5

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

untitled

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

<4D F736F F D B0D3B77EC3FEA7DEC3C0C476C1C9A5BFA6A1B8D5C3442DB57BA6A1B35DAD702DBEC7ACEC2E646F6378>

2009年3月二级VB语言笔试真题

MVB-1001.DOC

5. 用于管理 Visual Basic 模块或文件类的窗口是, 用于临时输出程序或调试程序的 窗口是, 描述对象属性的窗口是 6.Visual Basic 6.0 的 3 种工作模式分别是 和 7. 工程文件的扩展名是, 窗体文件的扩展名是 8.Visual Basic 窗体设计器的主要功能是 9

内容简介本书是 Visual Basic 程序设计 ( 曲宏山 饶拱维主编, 科学出版社 ) 或其他同类 Visual Basic 程序设计教材配套使用的上机实验指导用书, 是编者多年教学和软件开发实践经验的总结 全书共 14 个实验, 在每个实验前都列出了相关章节的知识点, 以方便读者对所学内容加

Visual Basic AD/DA Visual Basic 2

VHDL(Statements) (Sequential Statement) (Concurrent Statement) VHDL (Architecture)VHDL (PROCESS)(Sub-program) 2

<4D F736F F D DA5BFA6A1C476C1C92DBEC7ACECB8D5A8F728B57BB35D292E646F63>

《C语言程序设计》第2版教材习题参考答案

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Microsoft Word - 第3章.doc

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - 新1-12.doc

untitled


2007年4月全国计算机二级考试VB语言笔试真题

内容简介 本书是 Visual Basic 程序设计 ( 科学出版社出版, 范通让 王学军主编 ) 的配套实训教材, 由两部分组成 第一部分是实训指导, 共 15 个实训项目, 每个实训项目均指出了本部分需掌握的重点内容, 并给出了理论知识要点 实训步骤及程序代码, 使学生能逐步了解 Visual

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y =

Microsoft Word - VBYY

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Chapter 16 集合

SMM667.mps

Guava学习之Resources

Transcription:

第 5 章循环结构程序设计 教学提示 : 结构化程序设计有 3 种基本结构 : 顺序结构 选择结构和循环结构 循环结构程序设计的特点是 : 在满足条件 ( 称为循环条件 ) 的情况下反复执行某段代码 ( 称为循环体 ), 直到不满足条件时结束循环 在进行循环结构程序设计时, 关键是要正确选取循环条件和循环体 循环条件设置不当, 可能导致循环的次数偏多或偏少, 甚至死循环 ; 循环体设置不好, 可能导致多做或少做部分工作, 甚至出现逻辑错误 ( 如将变量初始化语句放在循环体内 ) 在 VB 6.0 中, 实现循环结构的语句有 For...Next 语句 Do...Loop 语句 While...Wend 语句 For Each...Next 语句 Goto 语句等, 其中最常用的是 For...Next 语句 Do...Loop 语句 教学要求 : 理解循环结构程序设计的特点, 熟练掌握 For...Next 语句 Do...Loop 语句, 掌握列表框 组合框的常用属性 方法和事件 5.1 For...Next 语句 如果用机械的方法来计算 1+2+...+100 的值, 计算过程为 1+2=3,3+3=6,6+4=10, 以此类推, 一直到加上最后一个数 100, 算出结果, 结束计算 若将其改为相同结果的表达式 0+1+2+...+100, 一共要进行 100 次加法运算, 计算量很大, 但仔细分析后, 发现每次都是将前面已求出的 n-1 个数的和, 加上第 n 个数, 即 S n =S n- 1+n ( 在此 n 的取值为 [1,100], 显然 n 的取值, 决定了当前已求和的结果 ), 很有规律 这种有规律的重复性操作可用循环来实现, 起控制作用的变量 n 称为循环控制变量,n 的第一个值称为初值,n 的最后一个值称为终值,n 的相邻两个值间的差值称为步长 1. For...Next 的语法格式 For...Next 的语法格式为 For < 循环控制变量 >=< 初值 > To < 终值 > [Step < 步长 >] [ 循环体 ] Next [< 循环控制变量 > ] 说明 : 1 步长的默认值为 1, 当初值 > 终值时, 步长为负 ; 当初值 < 终值时, 步长为正 一个原则 要让初值能逐步接近终值, 否则循环永远不会结束 ( 即出现死循环 ) 2 一般情况下, 只有当循环条件不满足时, 才能退出循环, 但可用 Exit For 提前结束循环,Exit For 可放在循环体的任何位置, 且 Exit For 一般要与 If 语句一起使用 3 Next 后可省略循环控制变量, 但为了提高程序的可读性, 建议不省略 例 5.1 计算 1+2+...+100 的值

第 5 章循环结构程序设计 87 1) 界面设计程序运行界面如图 5.1 所示 2) 代码分析与设计循环的初值为 1, 终值为 100, 步长为 1 程序源代码如下: Private Sub Command1_Click() Dim i As Integer, s As Integer s = 0 For i = 1 To 100 Step 1 s = s + i Text1.Text = s 图 5.1 求和 注意 : 求和时, 一般要将和变量 s 初值置 0, 即 s=0 练习 5.1 计算 2+4+6+...+200 的值 提示 : 步长为 2 2. For...Next 语句的执行过程 For...Next 语句的执行过程如下所述 1 求出循环的初始 终值和步长, 并保存起来准备循环 2 将初值赋给循环变量 3 判断循环变量值是否超过终值 ( 步长为正, 判断是否大于终值, 步长为负, 判断是否小于终值 ), 如果未超过终值则转到 (4), 如果超过终值则结束循环 4 执行循环体 5 执行 Next 子句, 将循环变量的值增加一个步长值, 然后转到 (3) 说明 : 如果循环正常结束, 一定是在 (3) 结束, 循环结束后, 循环变量的值是第一个不满足循环条件的值, 如果循环中有 Exit For 语句, 循环将提前结束, 属于非正常结束循环 例 5.2 例 5.1 的前 3 次执行过程中, 变量 i 和 s 的值分别是多少? 第 1 次 :i=1,s=1 第 2 次 :i=2,s=3 第 3 次 :i=3,s=6 练习 5.2 写出例 5.1 中循环结束后, 循环总次数和 i 的值 例 5.3 求 5! 的值 1) 界面设计程序运行界面如图 5.2 所示 2) 代码分析与设计图 5.2 计算 5! 程序的源代码如下 : Private Sub Command1_Click() 87

88 Visual Basic 程序设计实用教程与实训 Dim i As Integer, s As Integer s = 1 ' 注意 : 与求和时, 变量 s 初值的区别 For i = 1 To 5 s = s * i Text1.Text = s 注意 : 求积时, 一般要将积变量 s 初值置 1, 即 s=1 练习 5.3 求 3*6*9*...*27 的值 提示 : 注意数据类型的选择, 初步估计其值可能大于 2 147 483 647 5.2 Do...Loop 语句 For...Next 语句一般常用于循环次数确定的循环中, 对于循环次数不确定的循环一般常用 Do...Loop 语句 Do...Loop 有前测型循环结构和后测型循环结构两种 5.2.1 前测型 Do...Loop 语句 前测型 Do...Loop 循环结构的特点是 : 先判断循环条件, 根据条件值决定是否要执行循环 如果第一次就不满足循环条件, 循环体一次也不执行 理解助记 : 先付钱再看电影 ( 传统方式, 要查票 ) 前测型 Do...Loop 语句的语法格式为 88 Do {While Until} 循环条件循环体 Loop 说明 : 1 While 表示满足循环条件时执行循环, 否则结束循环 2 Until 表示满足循环体条件时结束循环 ( 与 While 刚好相反 ), 否则继续执行循环 3 在循环体中, 可用 Exit Do 提前结束循环,Exit Do 一般与 If 语句配合使用 4 使用 Do...Loop 进行循环结构程序设计时, 没有 For...Next 那么方便, 循环变量的处理要单独进行, 必须在循环前先给循环变量赋初值, 在循环体中处理步长, 终值在循环条件中体现 例 5.4 用前测型 Do...Loop 语句 ( 用 While) 实现例 5.1 1) 界面设计参阅例 5.1, 如图 5.1 所示 2) 代码分析与设计注意单独处理循环变量, 初值在循环前, 步长在循环体内, 终值在循环条件中, 同时要注意 While 条件的设置 用前测型 Do...Loop 语句 ( 用 While) 实现的程序关键代码如下 : s = 0

第 5 章循环结构程序设计 89 i = 1 Do While i <= 100 s = s + i i = i + 1 Loop 例 5.5 用前测型 Do...Loop 语句 ( 用 Until) 实现例 5.3 1) 界面设计参阅例 5.3, 如图 5.2 所示 2) 代码分析与设计注意 Until 的条件设置,Until 是当条件满足时结束循环, 本题要求 5!, 循环条件设置为 i>5 用前测型 Do...Loop 语句 ( 用 Until) 实现的关键代码如下 : s = 1 i = 1 Do Until i > 5 ' 注意条件设置 s = s * i i = i + 1 Loop 练习 5.4 用前测型 Do...Loop 语句改写练习 5.1 和练习 5.3 5.2.2 后测型 Do...Loop 语句 后测型 Do...Loop 循环结构的特点是 : 先执行循环体, 再判断循环条件, 根据条件决定是否要再次执行循环体 不管是否满足循环条件, 循环体至少要执行一次 理解助记 : 先看电影再付钱 ( 现代方式, 偶尔可免费看一场 ) 后测型 Do...Loop 语句的语法格式为 Do 循环体 Loop {While Until} 循环条件 说明 : 后测型 Do...Loop 语句与前测型 Do...Loop 语句很相似, 只是循环条件的放置位置不同 例 5.6 用后测型 Do...Loop 语句 ( 用 While) 实现例 5.1 1) 界面设计参阅例 5.1, 如图 5.1 所示 2) 代码分析与设计与前测型很相似, 只是条件位置改变 用后测型 Do...Loop 语句 ( 用 While) 实现的程序关键代码如下 : s = 0 i = 1 Do 89

90 Visual Basic 程序设计实用教程与实训 s = s + i i = i + 1 Loop While i <= 100 例 5.7 用后测型 Do...Loop 语句 ( 用 Until) 实现例 5.3 1) 界面设计参阅例 5.3, 如图 5.2 所示 2) 代码分析与设计与前测型很相似, 只是条件位置改变 用后测型 Do...Loop 语句 ( 用 Untile) 实现的关键代码如下 : s = 1 i = 1 Do s = s * i i = i + 1 Loop Until i > 5 ' 注意条件设置 练习 5.5 用后测型 Do...Loop 语句改写练习 5.1 和练习 5.3 5.3 循环的嵌套 在一个循环语句的内部又包含另外一些循环语句, 称为循环的嵌套 嵌套在内部的循 环称为内层循环, 包含别的循环的循环称为外层循环, 内外循环不能交叉, 应遵循 先进 后出, 后进先出 的原则 不同的循环语句可以相互嵌套, 所以循环的嵌套形式也有很多 种, 应用也比较灵活 在循环的嵌套中, 不同循环要用不同的循环控制变量 例 5.8 写出以下程序的运行结果 Dim i As Integer, j As Integer For i = 1 To 5 ' 外循环 行 1 For j = 1 To i ' 内循环 行 2 Print i & " * " & j & " = "; Trim(i * j), 行 3 Next j ' 内循环结束 行 4 Print ' 换行 行 5 ' 外循环结束 行 6 本程序是一个典型的循环嵌套 在程序运行过程中, 外循环会 5 次调用内循环 程序的详细运行过程见表 5-1( 只提供了前 30 步 ) 程序的运行结果如图 5.3 所示, 其中第一行是附加行, 起标识作用, 请注意观察图中 i 和 j 的变化规律 90

第 5 章循环结构程序设计 91 表 5-1 运行过程 序号 语句行 i j 备注 内循环 外循环 1 行 1 1 i=1,i<=5, 执行外循环 2 行 2 1 j=1,1<=1, 执行内循环第一次 3 行 3 输出 1*1=1 调用内 4 行 4 2 执行 Next j,j=2 循环 5 行 2 2<=1, 结束内循环 6 行 5 执行 Print 即换行 7 行 6 2 执行,i=2 8 行 1 2<=5, 继续外循环 外 9 行 2 1 j=1,1<=2, 执行内循环 10 行 3 输出 2*1=2 11 行 4 2 执行 Next j,j=2 第二次 12 行 2 2<=2, 继续内循环 调用内 13 行 3 输出 2*2=4 循环 14 行 4 3 执行 Next j,j=3 15 行 2 3<=2, 结束内循环 16 行 5 执行 Print 即换行 17 行 6 3 执行,i=3 18 行 1 3<=5, 继续外循环 19 行 2 1 j=1,1<=3, 执行内循环 20 行 3 输出 3*1=3 21 行 4 2 执行 Next j,j=2 22 行 2 2<=3, 继续内循环第三次 23 行 3 输出 3*2=6 调用内 24 行 4 3 执行 Next j,j=3 循环 25 行 2 3<=3, 继续内循环 26 行 3 输出 3*3=9 27 行 4 4 执行 Next j,j=4 28 行 2 4<=3, 结束内循环 29 行 5 执行 Print 即换行 30 行 6 4 执行,i=4 行 1 6<=5, 结束外循环 循环执行过程 91

92 Visual Basic 程序设计实用教程与实训 图 5.3 循环的嵌套 5.4 列表框与组合框 5.4.1 列表框列表框 (ListBox) 控件可列出多个选项供用户选择, 用户可从中选择一个或多个选项 如果选项个数超过列表框可显示的数目, 列表框会自动添加滚动条 列表框中每个选项均有一个编号, 称为索引, 选项的索引值从 0 开始 1. 列表框的常用属性 (1) List 属性 : 用于存放列表框的各个选项值 (2) ListCount 属性 : 返回列表框中选项的个数 (3) ListIndex 属性 : 返回当前项的索引值, 如果没有选中项, 则其值为 -1 (4) Text 属性 : 返回当前选项的文本内容, 该属性只读 (5) Selected 属性 : 表示列表框中的选项是否被选中, 用索引来标识对应的选项 如 Selected(2) 为 True 表示第 3 个 ( 注意索引从 0 开始 ) 选项选中 (6) MultiSelect 属性 : 确定是否允许同时选中多个选项,0 表示不允许,1 表示允许简单多选,2 表示允许扩展多选, 默认值为 0 (7) Style 属性 : 确定列表框的样式,0 表示标准方式,1 表示每个选项前添加一个复选框, 默认值为 0 (8) Columns 属性 : 当值为 0 时, 一个选项占一行, 滚动条为垂直方向 ; 当其值为一个大于 0 的值时, 一行可显示多个选项, 滚动条为水平方向 2. 列表框的常用方法和事件 (1) AddItem 方法 : 用于向列表框中添加选项, 使用格式 :[ 对象.]AddItem 列表项 [, 索引 ], 若省略索引, 则系统自动给索引值加 1 (2) Clear 方法 : 清除列表框中所有选项, 使用格式 :[ 对象.]Clear (3) RemoveItem 方法 : 用来从列表框中删除指定选项, 使用格式 :[ 对象.]RemoveItem 索引 (4) Click 事件 : 单击或改变列表框的选项时发生, 注意它与其他对象的 Click 事件的区别 92

第 5 章循环结构程序设计 93 3. 向列表框中添加选项的方法向列表框添加选项的方法主要有 3 种 1) 使用 AddItem 方法如 :List1.AddItem " 计算机技术 " 使用 AddItem 方法时, 有以下几种常用形式, 请注意其区别 形式一 : List1.AddItem " 计算机技术 ",0 List1.AddItem " 多媒体技术 ",1 List1.AddItem " 局域网组网技术 ",2 形式二 : List1.AddItem " 计算机技术 ",0 List1.AddItem " 多媒体技术 ",0 List1.AddItem " 局域网组网技术 ",0 形式三 : List1.AddItem " 计算机技术 " List1.AddItem " 多媒体技术 " List1.AddItem " 局域网组网技术 " 其中形式一按指定顺序添加列表框的选项值, 即显示 计算机技术 多媒体技术 局域网组网技术 ; 形式二每次都在最上面添加新的选项, 即显示 局域网组网技术 多媒体技术 计算机技术, 与形式一显示的顺序刚好相反 ; 形式三每次都在最后面添加新的选项, 即显示 计算机技术 多媒体技术 局域网组网技术, 与形式一显示的顺序相同 2) 使用 List 属性如 :List1(0)= " 计算机技术 " 3) 在属性窗口添加在窗体中选中指定的列表框对象, 然后在属性窗口找到 List 属性, 单击向下的三角形打开一个空白方框, 可在其中输入选项 输入完一个选项后, 按 Ctrl+Enter 键输入下一个选项, 输完所有选项后按回车键, 关闭输入选项方框结束输入 例 5.9 设计一个选择个人爱好的应用程序, 界面左边显示可供选择的个人爱好选项, 用户选好的个人爱好选项显示在右边, 不但可以添加而且可以移去选项 1) 界面设计在窗体中添加两个标签 两个列表框,4 个按钮, 程序运行界面如图 5.4 所示 其中, 第一个列表框的值 : 唱歌 跳舞 游泳 下棋 打球 跑步 打牌 聊天 上网 看书, 在属性窗口中直接输入,4 个按钮都设置图 5.4 列表框应用了提示信息 ( 在 ToollipText 属性中设置 ), 其提示信息分 93

94 Visual Basic 程序设计实用教程与实训 别为 : 添加 添加所有 移去 移去所有 2) 代码分析与设计 添加 功能是将左边列表框的选项移到右边列表框, 在 List2 中添加 List1 的当前项, 可用 List2.AddItem List1.Text 实现, 添加完后将 List1 的当前项删除, 可用 List1.RemoveItem List1.ListIndex 实现 添加前, 要先判断是否有选项选定, 本程序用 List1.ListIndex >= 0 来判断是否有选项选中, 若有选项选中则执行添加操作, 否则不进行任何操作 移去 功能与 添加 功能相似, 只是将 List1 和 List2 反过来 添加所有 功能是将左边列表框的所有选项移到右边的列表框, 可用循环将 List1 的每个选项添加到 List2 中, 然后清除 List1 在操作前, 也可用 List1.ListCount > 0 判断左边列表框是否为空, 若列表框为空则不执行任何操作, 否则执行添加所有选项操作 移去所有 功能与 添加所有 功能相似, 只是将 List1 和 List2 反过来 程序源代码如下 : Private Sub Command1_Click() If List1.ListIndex >= 0 Then List2.AddItem List1.Text List1.RemoveItem List1.ListIndex Private Sub Command2_Click() Dim i As Integer If List1.ListCount > 0 Then For i = 0 To List1.ListCount - 1 List2.AddItem List1.List(i) List1.Clear Private Sub Command3_Click() If List2.ListIndex >= 0 Then List1.AddItem List2.Text List2.RemoveItem List2.ListIndex Private Sub Command4_Click() Dim i As Integer If List2.ListCount > 0 Then For i = 0 To List2.ListCount - 1 List1.AddItem List2.List(i) List2.Clear 94

第 5 章循环结构程序设计 95 5.4.2 组合框组合框 (ComboBox) 兼有文本框和列表框两者的功能, 用户可通过组合框来输入文本, 也可从选项列表中选择选项 组合框的许多属性与方法和列表框控件相同, 而且意义也相似 组合框有 3 种类型, 如图 5.5 所示, 组合框的类型由 Style 属性值决定 :Style 属性值为 0 表示下拉组合框 Style 属性值为 1 表示简单组合框 Style 属性值为 2 表示下拉列表框 下拉组合框和简单组合框可在文本框中直接输入值, 但在下拉列表框中不能直接输入值 3 种组合框中, 下拉列表框较常用, 默认值为下拉组合框 例 5.10 设计一个应用程序供学生选择选修课 1) 界面设计本程序含 3 个标签和 1 个下拉列表框 ( 要求选项值的输入在代码中实现 ), 程序的运行界面如图 5.6 所示 图 5.5 三种不同类型的组合框 图 5.6 选择选修课 2) 代码分析与设计在代码中输入组合框的选项值, 一般在 Form_Load 中进行 本题通过修改 List 属性值来输入选项值 单击或改变组合框的选项会触发 Click 事件, 在 Click 事件中编写代码, 将当前选中的选项值赋给标签 Label3, 可实现下拉列表框与标签 Label3 的同步变化的功能 程序的源代码如下 : Private Sub Combo1_Click() Label3.Caption = Combo1.Text Private Sub Form_Load() Combo1.List(0) = " 大学语文 " Combo1.List(1) = " 演讲与口才 " Combo1.List(2) = " 文学欣赏 " Combo1.List(3) = " 沟通技巧 " Combo1.List(4) = " 股票操作实务 " Combo1.List(5) = " 素描 " Combo1.List(6) = " 音乐欣赏 " Combo1.List(7) = " 摄影技术 " 95

96 Visual Basic 程序设计实用教程与实训 5.5 综合实例 例 5.11 设计一个通用的求和程序, 只要输入初值 终值和步长就可计算出其和 ( 初值 终值和步长均为整数 ) 1) 界面设计程序的运行界面如图 5.7 所示 图 5.7 求和通用程序 2) 代码分析与设计用 3 个变量来接收用户输入的初值 终值和步长值, 然后用 For...Next 语句来求和 注意步长不能为 0, 否则会出现死循环 ( 提示, 若出现死循环可按 Ctrl+Pause/Break 组合键来中断程序运行 求和的事件代码如下 : Private Sub Command1_Click() Dim a As Integer, b As Integer, c As Integer Dim i As Integer, s As Long a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) If c <> 0 Then s = 0 For i = a To b Step c s = s + i Text4.Text = s 例 5.12 找出 1000 以内的正整数中, 哪些数能同时被 3 和 11 整除 1) 界面设计程序的运行界面如图 5.8 所示 2) 代码分析与设计初值为 1, 终值为 999, 步长值为 1 程序的主要代码如下: 图 5.8 列表框应用 96

第 5 章循环结构程序设计 97 Private Sub Command1_Click() Dim i As Integer For i = 1 To 999 If i Mod 3 = 0 And i Mod 11 = 0 Then List1.AddItem Str(i) 例 5.13 输入两个非 0 整数, 找出它们的最大公约数 1) 界面设计程序的运行界面如图 5.9 所示 2) 代码分析与设计求最大公约数可用辗转相除法 辗转相除法的基本思想是 : 将大数除以小数取余数, 如果余数不为 0, 则将小数转为大数, 将余数转为小数继续相除取余数, 反复进行, 直到余数为 0 结束, 余数为 0 时, 小数就是所求的最大公约数 注意相除前要确保大数在前, 小数在后 程序的主要代码如下 : 图 5.9 求最大公约数 Private Sub Command1_Click() Dim a As Integer, b As Integer Dim r As Integer, temp As Long a = Val(Text1.Text) b = Val(Text2.Text) If a*b<>0 Then ' 只有当 a 和 b 均不为 0 才能求最大约数 If a < b Then ' 确保 a 存放大数,b 存放较小的数 temp = a a = b b = temp r = a Mod b ' 给余数置初值, 准备循环 Do While r > 0 a = b ' 小数变大数 b = r ' 余数变小数 r = a Mod b ' 产生新的余数 Loop Text3.Text = b ' 最大公约数是余数为 0 时的 b 值 ( 即小值 ) 例 5.14 设计一个应用程序, 由用户输入一串字符, 判断其是否以字母开头, 由字母 数字和下划线组成, 且长度不超过 255 个字符 程序的运行界面如图 5.10 所示 97

98 Visual Basic 程序设计实用教程与实训 图 5.10 字符串判断 1) 界面设计由图 5.10 可知, 本题需要添加 3 个框架 1 个标签 1 个文本框 1 个命令按钮 两个列表框 2) 代码分析与设计判断规则一要求以字母开头 可以用 Left 函数提取用户输入字符串的第 1 个字符, 再判断其是否为字母, 为了方便, 可将第 1 个字符转为大写 如果第 1 个字符为字母则继续比较其他字符, 否则是一个不符合条件的字符串, 将其添加到 List2 中, 结束比较 判断规则三要求字符个数不超过 255 个 可用 Len 函数获取字符串的长度, 如果不满足条件直接将其添加到 List2 中, 结束比较 判断规则二要求所有字符由字母 数字和下划线组成 可用循环从字符串的第 2 个字符开始, 逐个字符检查是否满足要求, 如果不满足要求则直接添加到 List2 中, 中断循环的执行, 结束比较 如果所有条件均满足要求, 则将其添加到 List1 中 所有字符均满足条件的判断方法是检查循环是否正常结束, 如果找到不满足要求的字符, 循环会提前结束, 只有所有字符均满足要求时循环才会正常结束 判断循环是否正常结束的方法是 : 循环结束时, 循环控制变量的值是否超出循环的终值 程序代码如下 : Private Sub Command1_Click() Dim fstr As String, idstr As String, tstr As String Dim i As Integer, n As Integer If Text1.Text <> "" Then idstr = Text1.Text fstr = Left(idstr, 1) fstr = UCase(fstr) ' 转为大写 n = Len(idstr) If (fstr >= "A" And fstr <= "Z") And (n <= 255) Then ' 首字符和长度判断 For i = 2 To n ' 逐个字符处理 tstr = Mid(idstr, i, 1) tstr = UCase(tstr) If Not ((tstr >= "A" And tstr <= "Z") Or (tstr >= "0" And tstr <= "9") Or (tstr = "_")) Then 98

第 5 章循环结构程序设计 99 List2.AddItem idstr Exit For If i > n Then ' 没有找到不合要求的字符 List1.AddItem idstr Else List2.AddItem idstr Text1.Text = "" Text1.SetFocus Else MsgBox " 标识符合法性判断前请输入一个标识符 ", vbokonly + vbinformation, " 提示 " Text1.SetFocus 5.6 习题 一 单项选择题 1. 在循环结构中反复执行的那段代码称为 A. 循环结构 B. 循环条件 C. 循环体 D. 选择结构 2. 以下不属于结构化程序设计 3 种基本结构的是 A. 顺序结构 B. 选择结构 C. 循环结构 D. 简单结构 3. 不能实现循环的语句是 A. For...Next 语句 B. Do...Loop 语句 C. While...Wend 语句 D. Select Case 语句 4. For 一般与一起配合使用 A. End For B. Next C. Wend D. Loop 5. 列表框当前选项的索引值对应的属性为 A. Index B. ListIndex C. List D. ListCount 6. 当组合框中没有选项选中时,ListIndex 的值为 A. -1 B. 0 C. 1 D. 不确定 99

100 Visual Basic 程序设计实用教程与实训 7. 循环结构程序设计的特点是 A. 从上至下逐个语句执行 B. 根据判断条件选择其中一个分支执行 C. 随机执行某段代码 D. 满足条件时, 反复执行某段代码 8. 清空列表框的所有选项可用方法 A. Cls B. AddItem C. Clear D. Move 二 将以下各个程序补充完整 1. 以下程序段实现 : 求 2+4+6+8+...+80 的值 s = For i = 2 To 80 s = + i Next Print s 2. 以下程序段的功能是 : 给 List1 添加 4 个选项 : 大写字母 小写字母 数字字符 其他字符 List1.List(0) = " 大写字母 " List1.List(1) = " " List1..AddItem " 其他字符 " 3. 以下程序段的功能是 : 求 3*5*7*9*...*30 的值 s = 1 Do n < s = s * n n = Loop Print s 4. 以下程序段的功能是 : 对 Text1 中输入的大写字母加密, 其他字符不变, 密文显示在 Text2 中, 加密规则为 :A 变 Z,B 变 Y,C 变 X,...,Y 变 B,Z 变 A str1 = Text1.Text For i = 1 To temp = Left(str1, 1) If Then temp = Chr( - Asc(temp)) ps = ps & str1 = (str1, Len(str1) - 1) Text2.Text = 100

第 5 章循环结构程序设计 101 提示 : 设密文 ASCII 码值为 y, 明文 ASCII 码值为 x, 则有 x - 65 = y - 90, 所以 y =155 - x 由此可推出密文的转换公式 三 编程题 1. 求 [100,300] 中所有奇数之和, 所有偶数则显示在列表框中 提示 : 可根据一个数除以 2 的余数来判断它的奇偶性, 可设列表框的 Columns 属性值为一个大于 0 的值 ( 如 5), 可以一行显示多个选项 2. 求 3325 和 5212 的最大公约数 3. 求 1-2+3-4+5-6+7-...-100 的值 提示 : 本题解题方法很多, 如可设一个专门的符号变量, 每次将符号变量取相反值 4. 用循环的嵌套输出九九乘法表 5. 计算 10! 提示 : 注意数据类型 6. 设计一个应用程序, 由生肖查找相关的年份 ( 以当前日期为基础, 在前后 100 年范围内查找 ), 十二生肖放在下拉列表框中 提示 : 可用 Date 获取当前日期, 然后用 Year 函数提取其中的年份 5.7 实训 实训项目 : 循环结构程序设计实训性质 : 设计性实训目的 1. 理解循环结构程序设计的特点 2. 熟练掌握 For...Next 语句 Do...Loop 语句 3. 掌握列表框 组合框的常用属性 方法和事件 实训环境 Window 98/2000/XP VB 6.0 中文版 实训内容 1. 设计一个通用的连乘程序, 输入初值 终值和步长可计算出连乘的积 程序的界面如图 5.11 所示 提示 : 注意积的数据类型 2. 抽奖游戏, 用户输入若干个 9 位的号码, 由计算机随机抽奖 要求 : 当用户在文本框中输入 9 位或更多位数字后回车, 取前 9 位添加到列表框中, 不足 9 位时按回车不做任何操作 中奖号码显示在另一个文本框中 程序的界面如图 5.12 所示 101

102 Visual Basic 程序设计实用教程与实训 图 5.11 连乘通用程序 图 5.12 通用抽奖器 提示 : 计算机抽奖可用计算机随机产生一个号码的序号, 然后找出该序号对应的号码, 即列表框中对应的选项值就是计算机抽中的中奖号码 3. 设计一个购物篮程序, 左边显示书店图书样书清单, 右边显示已选定的图书, 用户不但可以将书店的书自由地添加右边的购物篮中, 而且还可以移去已选定的图书 程序的运行界面如图 5.13 所示 要求各个按钮有相应的提示信息, 样书清单在 Form_Load 中添加, 样书的具体名称可自定 图 5.13 购物篮 4. 打印九九乘法表, 程序运行界面如图 5.14 所示 图 5.14 打印输出九九乘法表 5. 为 4.6 节实训内容第 6 题的简易四则运算器添加一个功能, 显示已做题的历史记录 程序运行界面如图 5.15 所示 6. 设计一个应用程序, 由生肖查找相关的年份, 十二生肖放在下拉列表框中, 要求程序设计一个查找范围 程序运行界面如图 5.16 所示 102

第 5 章循环结构程序设计 103 图 5.15 简易四则运算器 图 5.16 生肖查年人份 提示 : 可用 Date 获取当前日期, 然后用 Year 函数提取其中的年份 7. 输入一个大于 2 的正整数, 判断其是否为素数, 程序运行界面如图 5.17 所示 图 5.17 素数判断提示 : 素数是除了 1 和它本身以外, 不能被其他数整除的数 8. 设计一个准考证自动生成系统 ( 选做题 ), 准考证的生成规则 : 准考证由固定位 年级 专业 班级 顺序号 5 部分组成 ( 各部分均占两位 ), 固定位为 12, 年级 专业 班级在列表中选择, 顺序号随机生成 年级的编号规则为入学年份的后两位 ; 专业的编号规则为, 01 对应会计专业, 02 对应电子专业, 03 对应模具专业 04 对应数控专业 ; 班级的编号规则为, 在班级编号前加 0, 补足两位 ; 随机顺序号不足两位时, 前面补 0 年级 班级和专业用下拉列表框显示 程序的界面如图 5.18 所示 图 5.18 准考证自动生成器实训指导 1. 实训题 1 分析与提示可用 3 个变量来接收用户输入的初值 终值和步长 然后 For 语句计算连乘之积 注意连乘时求积变量的初值为 1 103

104 Visual Basic 程序设计实用教程与实训 程序扩展 : 多个数连乘时, 很容易产生一个很大的数, 所以存放积的变量的取值范围应尽可能大, 否则很容易出现数据溢出错误 当积变量的取值范围很大时, 如果用户输入的初值 终值和步长比较特殊, 还有可能出现数据溢出错误, 所以还要对用户输入的初值 终值和步长值进行适当限定 2. 实训题 2 分析与提示 (1) 输入字符串长度可用 Len 函数来获得, 然后用 If 语句来判断其值是否大于等于 9 (2) 当用户所输入的字符个数多于 9 个时, 只取前 9 个, 可用 Left 函数来实现 (3) 可在 Text1_KeyPress 事件中, 判断用户输入键的 KeyAscii 参数值是否为 13, 如果是, 则根据用户输入的字符个数来决定是否将所输入的内容添加列表框中 (4) 电脑抽奖可用随机函数来实现 用 Rnd 产生一个不大于号码总个数的随机整数, 作为中奖号码的编号, 然后按某个编码规则将其转为对应的中奖号码 本题中, 先用 List1 的 ListCount 属性值获得号码总个数, 然后用 List1 的选项索引值作为该选项对应的中奖号码的编号 程序的源代码如下 : Private Sub Command1_Click() Dim n As Integer If List1.ListCount > 0 Then n = Int(Rnd * List1.ListCount) ' 随机产生中奖的序号 Text2.Text = List1.List(n) ' 确定对应的中奖号码 List1.ListIndex = n Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' 回车时添加号码到 List1 If Len(Text1.Text) >= 9 Then ' 当输入的字符数大于等于 9 时添加选项 ' 将前 9 个字符作为一个选项添加到列表框 List1.AddItem Left(Text1.Text, 9) Text1.Text = "" ' 清空文本框, 准备下一次输入 程序扩展 : 本题所输入的号码为数字字符, 可对 Text1 的输入字符进行限定, 只允许输入数字字符和其他相关字符, 不能输入字母等字符, 减少用户输入错误 3. 实训题 3 分析与提示 (1) 要设置按钮的提示信息, 可将提示信息赋给按钮的 ToolTipText 属性 (2) 添加 按钮的功能是将 List1 的当前项添加到 List2 中, 然后删除当前选项 (3) 添加全部 按钮的功能是将 List1 的所有项添加到 List2 中, 然后清除 List1 的所有选项 (4) 移动 按钮和 移去全部 按钮的功能刚好与 添加 和 添加全部 按钮的 104

第 5 章循环结构程序设计 105 功能相反, 操作方法很相似, 只是将添加和删除的列表框对象反过来 (5) 图 5.13 所显示的样书清单可用循环来实现, 程序代码如下 : For i = 1 To 20 List1.AddItem " 伟大的祖国第 " & i & " 卷 " 4. 实训题 4 分析与提示可设置两个变量 j 和 i 来保存乘数和被乘数 本题要求打印多行乘式, 可以先分析一行乘式输出, 如第 5 行, 显示结果为 :5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5 个乘式只是乘数和积在变化, 而且变化很有规律, 可用循环来实现, 程序代码如下 : For j = 1 To 5 Print 5 & "*" & j & "="; Trim(5* j); " "; Next j 如果要输出第 6 行乘式, 很多读者很容易发现只要将上述代码中所有的 5 改为 6 即可 再分析其他行乘式的输出, 操作方法也非常相似, 所以可用循环来实现多行输出, 显然这是一个循环的嵌套 外循环可由被乘数 i 来控制, 它的初值为 1, 终值为 9, 步长为 1; 内循环可用乘数 j 来控制, 它的初值为 1, 终值为 i, 步长为 1 程序的关键代码如下: For i = 1 To 9 For j = 1 To i ' 内循环, 打印一行 Print i & "*" & j & "="; Trim(i * j); " "; Next j ' 内循环结束 Print ' 换行 ' 外循环结束从图 5.14 可知, 当被乘数改变时才换行, 所以 Print 语句应放在外循环中 5. 实训题 5 分析与提示要添加显示历史记录的功能, 只要在核对答案的同时, 生成一个已做题的表达式, 且将其添加到列表框中 生成表达式只是将运算数 运算符和运算结果连接成一个式子, 若在后面再添加一个 或 效果会更好 6. 实训题 6 分析与提示如果将 4 个选项按钮按从上到下的顺序分别编号为 1 2 3 4, 则选择范围刚好是选项按钮编号乘以 100 的数值 所以可以将 4 个不同的查找范围查找, 整合在一段代码中实现 程序的关键代码如下 : n = Year(Date) If Combo1.ListIndex >= 0 Then Select Case True ' 确定选择范围 Case Option1.Value 105

106 Visual Basic 程序设计实用教程与实训 key = 1 Case Option2.Value key = 2 Case Option3.Value key = 3 Case Option4.Value key = 4 End Select List1.Clear ' 清除列表框原来的显示内容 For i = n To n + 100 * key ' 查找并显示满足条件的年份 If i Mod 12 = Combo1.ListIndex Then List1.AddItem Str(i) 还有一种更高效的方法 : 先确定指定生肖的第 1 个年份, 然后每隔 12 个数输出一个值, 直到输出年份超出指定的范围前一个值结束 7. 实训题 7 分析与提示素数是除了 1 和它本身以外, 不能被其他数整除的数 设该数为 n, 可以在 [2, n-1] 范围内逐个取数, 判断该数是否能被 n 整除, 如果都不能, 则 n 为素数, 否则不是素数 因为一个数的因子总是成对出现, 如果有因子, 一定有一个在 n 的平方根之前 ( 包括平方根 ) 出现, 而判断一个数不是素数, 只要找到一个除 1 和它本身外的因子即可, 所以查找范围可缩小到 n 的平方根 程序关键代码如下 : n = Val(Text1.Text) If n > 2 Then ' 题目要求 n 为大于 2 的正数 k = Int(Sqr(n)) For i = 2 To k ' 用循环逐个数的判断 If n Mod i = 0 Then ' 判断 n 是否能整除 i Exit For ' 能整除, 提前结束循环 If i > k Then ' 检查循是否正常结束, 循环正常结束时 i=k+1 ' 如果循环正常结束, 说明没找到因子, 所以 n 是素数 Text2.Text = Str(n) + " 是素数 " Else ' 如果循环提前结束, 说明找到因子, 所以 n 不是素数 Text2.Text = Str(n) + " 不是素数 " 8. 实训题 8 分析与提示改用下拉列表框显示年级 班级 专业后, 年级 班级和专业的编号很容易获得, 年 106

第 5 章循环结构程序设计 107 级直接取后两位, 班级取当前项左边第一个字符, 前面补 0, 专业将当前项的索引值转为字符串后, 前面补 0, 顺序号的生成与 4.6 节实训内容第 8 题一样 程序关键代码如下 : g = Right(Combo1.Text, 2) ' 取右边两位 j = "0" & Trim(Str(Combo3.ListIndex) + 1) 以提供专业选择的 Combo3 的选项索引作为专业编号 c = "0" & Left(Combo2.Text, 1) ' 以班级选项的索引值作为编号 x = Int(Rnd * 100) If x < 10 Then y = "0" + Trim(Str(x)) Else y = Trim(Str(x)) Text1.Text = "12" & g & j & c & y 注意 : 本题以提供专业选择的 Combo3 控件的选项索引作为专业编号的, 要求选项的索引值与专业的编号应完全一致, 否则所产生的准考证号码会出现专业代码错误 根据题目要求, 会计 电子 模具 数控 4 个专业的编号 ( 取个位 ) 分别为 0 1 2 3, 所以 Combo3 的选项只能依次为会计 电子 模具 数控 同理,Combo2 的选项顺序也可能为 1 班 2 班 3 班等 这种处理方式充分利用选项索引值的特点, 使所设计的程序代码非常简洁, 本题与 4.6 节实训内容第 8 题所设计的程序代码的一个很大的不同点是没有 Select Case 语句, 不过在使用这种处理方法时, 一定要注意选项的顺序 实训思考 1. 计算表达式 1/2+2/3+3/4+...+99/100 和 1/2-2/3+3/4-...+99/100 的值 2. 有人编写以下程序, 运行时出现图 5.19 所示的出错对话框, 请帮他解决问题 Dim i As Integer, s As Long s = 1 For i = 1 To 10 s = s * i Text1.Text = s 图 5.19 数据溢出错误 107

108 Visual Basic 程序设计实用教程与实训 提示 : 1. 对于表达式 1/2+2/3+3/4+...+99/100, 虽然各个加数规律不明显, 不便于用循环实现, 但仔细分析分子或分母, 能找到答案 ; 对于表达式 1/2-2/3+3/4-...+99/100, 可考虑设置一个符号位, 每处理一个数后, 将符号位取反 2. 数据溢出错误一般在变量的数据类型能存放值的大小小于当前值时出现, 解决的办法是将相关变量的数据类型改为取值范围更大的数据类型 108