570 likes | 739 Views
第 4 章 VB 程序设计概述. 4.1 结构化程序设计 4.2 顺序结构 4.3 选择结构 4.4 循环结构 4.5 综合应用程序举例. 4.1 结构化程序设计. 随着计算机技术的发展,程序设计方法经历了手工编程、结构化程序设计方法和面向对象的程序设计方法几个阶段。 VB 作为一种面向对象的程序设计语言,既继承了结构化程序设计的优点,又采用了面向对象、事件驱动的编程机制。就整个工程来说,它是由许多面向对象的事件过程组成的,程序运行过程中通过触发事件,驱动执行相应的事件过程来实现程序员的意图。. 4.1.1 算法及其表示.
E N D
第4章 VB程序设计概述 4.1结构化程序设计 4.2 顺序结构 4.3 选择结构 4.4 循环结构 4.5 综合应用程序举例
4.1 结构化程序设计 • 随着计算机技术的发展,程序设计方法经历了手工编程、结构化程序设计方法和面向对象的程序设计方法几个阶段。VB作为一种面向对象的程序设计语言,既继承了结构化程序设计的优点,又采用了面向对象、事件驱动的编程机制。就整个工程来说,它是由许多面向对象的事件过程组成的,程序运行过程中通过触发事件,驱动执行相应的事件过程来实现程序员的意图。
4.1.1 算法及其表示 • 算法是解决问题的方法和步骤。要完成某项任务,首先要根据任务的性质决定采取什么方法,然后根据所采用的方法设计完成工作的具体步骤,最后,再按照所设计的步骤一步一步去完成。要用计算机来解决一个实际问题,编程时,首先要设计解决这个问题的算法(方法和步骤)。 • 例 将两个变量x和y的值进行交换,设x = 10,y = 20。 • 分析:变量是存储单元的代名词,存储器存储信息的特点是:可以反复地“读”,“写”操作能将新的值写入到存储单元。如果直接交换,即x = y : y = x,则将y的值赋给x时,x原来的值被覆盖(丢失),其结果是交换后x和y的值都是20。由此可见,要交换两变量的值,应借助一个中间变量t作为一个临时的“容器”。算法为: • 步骤1:将x的值暂存在t中; • 步骤2:将y的值存入x中; • 步骤3:将t的值存入y中。
4.1.1 算法及其表示 • 例 求N!=?,其算法可描述如下: • 步骤1:给出N的值 • 步骤2:设两个变量R、I,I为大于等于零的整数,R=I!。令I=0,R=1。 • 步骤3:I=I+1,R=R×I • 步骤4:判断I<=N是否成立。如果成立返回到第三步,如果不成立向下执行。 • 步骤5:输出R,即N!
4.1.1 算法及其表示 • 算法的表示方法有多种,如前面例题中有语言描述法、图形法。算法描述的目的是将问题域和计算机语言之间搭起一座沟通的桥梁,所以不管采用哪种描述方法,都应该做到既便于人们去阅读和理解,又要便于编程实现。对于较复杂的问题常借助流程图来表示算法。 • 流程图也称为框图,它是用一些几何图形、流向线和文字说明来表示各种类型的操作。在流程图中所用的基本图形及其意义都是由国家颁布的标准(GB ISO5807-85)规定的。常用的几种图符如图所示。 • 开始框、结束框 输入/输出框 • 处理框 流程线 • 判断框
4.1.2 结构化程序设计 • 结构化程序设计的基本思想之一是:任何程序都可以采用顺序、选择、循环三种基本结构来构造。这三种结构可以任意组合、嵌套,构造各种复杂的程序,且保证结构清晰、层次分明。 • 1、顺序结构:程序的流程是按照一个方向进行的,一个入口,一个出口,中间有若干条依次执行的语句。 • 2、选择结构:程序的流程出现一个或多个分支,按一定的条件选择其中之一执行,这就是选择结构,也叫分支结构。它有一个入口,一个出口,中间可以有两条或多条分支。
4.1.2 结构化程序设计 • 3、循环结构:程序流程是按一定的条件重复多次执行一段程序,被重复执行的程序段叫循环体。循环结构按退出循环的条件可分为当型(While)循环结构和直到型(Until)循环结构。 • 当型循环:当条件成立时执行循环体,条件不成立时退出循环结构; • 直到型循环:当条件不成立时执行循环体,直到条件成立时退出循环体。 • 循环结构也只有一个入口和一个出口。且只允许有限次的重复,不能无限循环。 当型循环 当型循环
4.1.2 结构化程序设计 • 三种基本结构有如下共同特点: • 只有一个入口,一个出口。 • 无死语句,所谓“死语句”是指始终执行不到的语句。 • 死循环,即循环次数是有限的。
4.2 顺序结构 • 顺序结构是一种最简单的算法结构,也是程序设计中最简单、最常用得基本结构。其特点是:算法的每一个操作按照各自出现的先后顺序从上到下线性执行。 用程序处理实际问题时,常常需要用户输入数据或要求程序输出数据。下面介绍几个语句,并由它们组成顺序结构。这些语句包括赋值语句、输入输出语句等。
4.2.1 赋值语句 • 用赋值语句可以把指定的值赋给某个变量或某个对象的属性,它是为变量和对象属性赋值的主要方法。实际上,我们可以将对象的属性看作是一个变量。这样,赋值语句的作用就是给变量赋值。赋值语句的格式: • 变量 = 表达式 • 在使用赋值语句时应当注意: • “=”为赋值运算符,它是“把表达式的值赋给变量”,而不是“变量的值等于表达式值”。 • 右边表达式可以是常量值、变量、函数及表达式,赋值符号的左边必须是变量,只有变量才能接受值。 • 例 x=15 '把数值常量15赋给变量x • x=x+1 '把x的值加上1后的结果再赋给x,x的值为16 • Text1.Text="我的名字" '字符串赋给Text1对象的Text属性
4.2.2 数据输入 • 1.InputBox函数:产生一个作为用户输入数据的对话框界面,等待用户输入数据或按下按钮。当对话框关闭后,InputBox函数返回,返回值就是用户所输入的内容。注意,函数返回值是String类型,且每次只能输入一个数据。 • 格式:InputBox[$](prompt,[title],[default],[xpos,ypos]) • 参数说明: • prompt:提示信息字符串表达式,最大1024个字符。该信息自动换行,如果要按自己的要求换行,则需插入回车、换行符来分隔,即Chr$(13)+Chr$(10)或VB常量vbCrLf。 • title:对话框标题。 • default:对话框中的默认字符串,缺省时为空白。 • xpos,ypos:对话框左上角的点坐标,缺省时,对话框显示在屏幕中心。
4.2.2 数据输入 • 例 设计一个将华氏温度F转换为摄氏温度C的程序。转换公式为C=5/9 * (F-32)。 • 分析:利用InputBox接受用户输入,输出显示在文本框中。 • 界面设计:如图所示。 • 属性设置:如下所示。 • 控件 Caption属性 • Form1 温度转换 • Label1 华氏温度 • Label2 • Text1 • Text2 • Command1 计算
4.2.2 数据输入 • (3)编写事件过程 • Private Sub Command1_Click() • Dim F as long,C as Long • F=InputBox("请输入华氏温度:","利用InputBox输入数据") • C=5/9*(F-32) • Text1.Text=F • Text2.Text=C • End Sub • (4) 运行:输入华氏98,输出摄氏37,如图所示。
4.2.3 数据输出 • 1.Print方法:该方法可将结果信息输出到窗体或其他对象。 • 格式:[对象名.]Print[表达式表] • 说明: • “对象名”可以是窗体(Form)、立即窗口(Debug)、图片框(PictureBox)、打印机(Printer),若省略对象名则在当前窗体上输出。 • 例: • Print "Good Morning! " '把字符串Good Morning显示在当前窗体上 Picture1.print "Good Morning" '把字符串Good Morning显示在图片框上 • Printer.Print “Good Morning” ‘把字符串Good Morning从打印机上输出
4.2.3 数据输出 • (2) “表达式表”:可以是一个或多个表达式。对于数值表达式,先计算出表达式的值,然后输出;而字符串则原样输出,如果省略“表达式表”,则输出一个空行。 • 例 Print 180/3 '输出表达式的值 Print '输出一空行 Print "X=180/3" '输出放在双引号内的整个字符串 输出结果为: □60□ X=180/3 “□”代表空格,当输出数值数据时,数值的前面有一个符号位,后面有一个后导空格,而字符串前后都没有空格
4.2.3 数据输出 • (3) 各表达式之间用分隔符(逗号或分号)隔开。①用逗号分隔:按标准输出格式显示数据项,以14个字符位置为单位将输出行分成若干个区段,每区段输出一个表达式的值。②用分号分隔,以紧凑格式输出。 • 例 a=10:b=15:c=30 Print a,b,c, "ABCD" Print Print "X=";a+b+c 输出结果如图所示:
4.2.3 数据输出 • (4)分号或逗号为结尾符号。 下一个输出前不换行,并按紧凑格式或标准格式显示下一个输出信息。 • 例 • Print 1,2, • Print 3; • Print 4 • 输出结果如图所示:
4.2.3 数据输出 • 2.与Print方法有关的函数。 • (1) Tab函数: 在参数n指定的位置输出其后的表达式的值。 • 格式:Tab[(n)] • 例 Print Tab(25); “ABC“ ’在第25列显示“ABC”串 • (2) Spc函数:使光标从当前位置跳过n个空格,对输出进行定位。 • 格式:Spc(n) • 说明:Tab中的参数n是绝对列号,而Spc函数中的n参数是相对于前一输出项的最后一个字符而言跳过的空格数。例如: • Print "Hello";Tab(10); "World" '第二个字符串从第10列起输出 • Print "Hello";Spc(10); "World" '两个字符串之间相隔10个空格
4.2.3 数据输出 • (3)Format函数:使数值或日期按指定的格式输出。 • 格式:Format[$](数值表达式,格式字符串) • ① 数值格式化输出 • 格式字符串是一个串常量或串变量,由专门的格式说明字符组成,这些字符决定了数据项的显示格式和长度,详见教材表4-2。 • 例 Print Format(12345.6, “###,###.##”) 输出:12,345.6 • ② 日期和时间格式化输出 • 日期和时间格式化是将日期类型表达式的值或数值表达式的值以日期、时间的序数值按“格式字符串”指定的格式输出。有关格式见教材表4-3。 • 例 Print Format(Now, “yyyy年m月dd日hh:mm”) 输出:2007年4月12日
4.2.3 数据输出 • 3.MsgBox函数与MsgBox语句 • (1)MsgBox函数:执行时弹出一个消息提示框,用来向用户传送信息,它返回一个整型值,用来获得用户在对话框中的按键。 • 格式:MsgBox(msg[,[type][,title]\]) • ① Msg:包含提示信息的字符串常量或变量。 • ② Type:指定显示按钮的数目及形式,使用的图标样式,默认按钮式样,以及消息框的强制返回级别等,参见教材表4-4。该参数的值是各种选择值的总和,默认值为0。 • ③ Title:是用来显示对话框标题的字符串。
4.2.3 数据输出 • 例 • Private Sub Command1_Click() • r= MsgBox(“设备没准备好,要继续吗? ”,34,“提示信息”) • 'Type参数的值为34 • End Sub • 上述事件过程的执行结果如图所示。
4.2.3 数据输出 • (2) MsgBox语句:MsgBox函数与MsgBox语句的区别仅在于:MsgBox语句没有返回值和MsgBox语句中的参数不用写在括号内,因此常被用于简单信息的提示。 • 由MsgBox函数或MsgBox语句所显示的对话框有一个共同特点,即在出现对话框后,用户必须作出选择,即单击框中的某个按钮或按回车键,否则不能执行其他任何操作,在VB中,把这样的窗口(对话框)称为“模态窗口”(Modal Windows)如在Windows中“另存为…”对话框即是模态窗口。与模态窗口相反,非模态窗口(Modaless Windows)允许对屏幕上的其他窗口进行操作,如“我的电脑”窗口即是如此。
4.2.4 注释、暂停、结束语句 • 注释、暂停和程序结束语句是VB的三个简单语句。 • 1.注释语句:用来对程序或程序中某些语句作注释,阅读程序时便于理解。 • 格式: ‘ 注释内容 或 Rem 注释内容 • 一条注释语句注释的范围是从注释符号起到本行结尾,VB中一条注释语句不能注释多行。 • Rem只能单独成一行,而“’”即可单独成一行,也可以在一行程序的后面。 • 例 'This is a VB Program • a=6:b=8:c=10 'a,b,c为三角形的边 • s = Pi*r*r • Rem 计算圆的面积
4.2.4 注释、暂停、结束语句 • 2.暂停语句:在程序运行期间,有时需要中途中止一下,以便观察前面运行的结果或修改程序,然后让程序接着运行下去,这时就要用到暂停语句Stop。 • 格式:Stop • Stop可以放置在过程中的任何地方,相当于在程序代码中设置断点,类似于执行“运行”菜单中的“中断”命令。当执行Stop语句时,系统将自动打开“立即窗口”,方便程序员调试跟踪程序。在程序调试后,生成可执行文件(.exe文件)之前,应删去代码中的所有Stop语句。
4.2.4 注释、暂停、结束语句 • 3.结束语句:程序运行中,遇到结束语句就终止程序的运行,重置所有变量,并关闭所有数据文件。 • 格式:End • End语句除用来结束程序外,在不同环境下还有其他一些用途,包括: • End Sub:结束一个Sub过程。 • End Function:结束一个Function过程。 • End If:结束一个If语句块。 • End Type:结束记录类型的定义。 • End Select:结束情况语句。
4.3 选择结构 • 人们经常要求计算机根据给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。例如:判断一个数是否为正数,如果是则显示该数,否则不显示。 • 在VB中,这样的问题是通过选择结构程序来解决的。选择结构也称为分支结构。VB支持的选择结构可以分为二叉分支和多分支结构。二叉分支可用单行的If … then … else语句;多分支结构又有If … Then … Elseif … End If语句和Select Case … End Select语句。
4.3.1 单行结构选择语句 • 在程序中,如果对一个条件的判断,结果只有两种情况,分别有一种或两种处理,且处理非常简单时,用单行的if语句比较合适。 • 格式:If〈条件〉Then〈语句1〉[Else〈语句2〉] • 功能:如果“条件”成立(其值为True)或为非0值,则执行“语句1”,否则,执行“语句2”。它的执行流程如图所示。 • 其中“条件”通常是关系表达式或逻辑表达式,“语句1”和“语句2”既可以是简单语句,也可以是用冒号分隔的多个语句,或缺省。 条件
4.3.1 单行结构选择语句 例 判断一个学生的成绩是否及格。 此例中用文本框来接受用户的输入,结果显示在另一个文本框中,界面如左图,程序运行结果如右图。 程序代码如下: Private Sub Command1_Click() If Text1>60 Then Text2 ="及格" Else Text2 ="不及格" End sub
4.3.2 多行结构选择语句 • 在解决实际问题时,常常遇到在多种情况中选择其一的情况。因为多分支的If语句写在多行,所以也称为多行形式的If语句。 • 格式: • If〈条件1〉 Then • 〈语句块1〉 • [ElseIf 〈条件2〉 Then • 〈语句块2〉] • [ElseIf 〈条件3〉 Then • 〈语句块3〉] • [Else • 〈语句块n〉] • End If 执行流程
4.3.2 多行结构选择语句 • 多行结构的If语句执行过程:依次测试各条件,找出第一个为真者,执行其后面的语句块,然后从End If跳出;若所有条件均不成立,则执行Else后的语句块(此时,若缺省Else,则什么都不做)。 • 这里依次判断测试条件的含意为:若条件1为真(或条件表达式的值为非0),则执行语句块1,然后退出分支结构,执行End If的后继语句;若条件1为假(或条件表达式的值为0) ,则测试条件2,…。当前面的条件都不成立时,后面的条件才得以测试。
4.3.2 多行结构选择语句 • 例 编程求符号函数sgn(x)的值。 • 程序代码如下: 用户界面设计及运行结果如下图所示: • Private Sub Command1_Click() • x = Val(Text1.Text) • If x > 0 Then • Text2.Text = "1" • ElseIf x = 0 Then • Text2.Text = "0" • Else • Text2.Text = "-1" • End If • End Sub
4.3.2 多行结构选择语句 • 注意:单行形式If语句与多行形式的If语句的区别。 • 前者适用于简单的二叉分支的情况,后者适用于多分支的情况。前者可以改写为后者的形式。 • 前者必须写在一行中;后者必须写成多行,并且在关键字“Then”后面必须回车。 • 后者必须是If开头,End If结束,两者必须成对出现。但是,前者没有End If。 • 后者中“ElseIf”是一个关键字,不能写成“Else If”。 • 在多行形式的If语句中,代码的排版推荐使用缩进方式,这样不仅有利于阅读程序,也有利于发现错、排除错误。
4.3.3 Select Case语句 • 虽然多路分支程序设计可用多行形式的If语句实现,但有时,使用Select Case语句实现更为简单和结构清晰。 • 格式: Select Case〈测试表达式〉 Case〈表达式表列1〉 〈语句块1〉] [Case〈表达式表列2〉 [〈语句块2〉]] … [Case Else [〈语句块n〉]] End Select • Select Case语句以Select Case开头,必须以End Select结束。其功能是根据“测试表达式”的值,从多个语句块中选择符合条件的一个语句块执行。
4.3.3 Select Case语句 • 注意事项: • (1) 执行过程:先对“测试表达式”求值,然后从上到下顺序地测试该值与哪一个Case子句中的“表达式表列”相匹配;一旦找到,则执行该Case分支的语句块,然后把控制转移到End Select后面的语句块;如果没找到,则执行Case Else分支的语句块,然后把控制转移到End Select后面的语句块。 • (2) “测试表达式”可以是数值表达式或字符串表达式,通常为变量或常量。 • (3) 每个Case子句中的语句块可以是一行或多行VB语句。 • (4) “表达式表列”中的表达式必须与测试表达式的类型相同。
4.3.3 Select Case语句 • 注意事项: • (5) “表达式表列”称为域值,可以是下列形式之一: • 〈表达式1〉[,〈表达式2〉]…… • 当“测试表达式”的值与其中之一相同时,就执行该Case子句中的语句块。 • 例 Case 2,4,6,8,10 • 〈表达式1〉 To 〈表达式2〉 • 当“测试表达式”的值落在表达式1和表达式2之间时(含表达式1和表达式2的值),则执行该Case子句中的语句块。书写时,必须把较小值写在前面。 • 例 Case 2 To 10 • Is〈关系表达式〉 • 当“测试表达式”的值满足“关系表达式”指定条件时,执行该Case子句中的语句块。
4.3.3 Select Case语句 • 例 判断学生成绩的等级,用Select Case结构书写,代码如下: Private Sub Command1_Click() Select Case Val(Text1.Text) ‘根据Text1中用户输入的值来判断 Case Is < 0 Text2.text = "不合理的成绩" Case Is < 60 Text2.text = "不及格" Case 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 Text2.text = "及格" Case 70 To 89 Text2.text = "良好" Case Is <= 100 Text2.text = "优秀" Case else Text2.text = "不合理的成绩" End Select End Sub
4.3.4 选择结构的嵌套 • 在选择结构的每个分支中,可以是任何语句,也可以再是一个分支结构。这种分支结构中包含另一个分支结构的情况称为分支嵌套。在分支嵌套中应注意的问题: • 每个结构必须完整。 • 外层结构必须完全包住内层结构,不能交叉。 • 内层结构应采用缩进格式,以使层次清楚。
4.4 循环结构 • 当我们编程求解实际问题时,经常会遇到这样的一种情况:有些操作形式上具有相似性,并且反复多次被执行,这就是程序基本结构中的循环结构。所谓循环是指对同一个程序段重复执行若干次,被重复执行的部分称为循环体,由若干语句构成。 • 循环必须是有穷的,其循环控制有两种情况:当已知循环次数时,可用循环次数控制。有些问题,编程时并不知道循环体的执行次数,此时,必须根据某个条件来判断何时结束循环。 • 在VB中有多种语句可实现循环结构,包括For循环、Do循环、While循环和GoTo循环。
4.4.1 For循环 • For循环适用于循环的次数已知的场合。For循环也称For-Next循环或计数循环,其语法格式如下: For 〈循环变量〉=〈初值〉 To 〈终值〉 [Step〈步长〉] [〈循环体〉] [Exit For] Next[〈循环变量〉] • 功能:For循环按确定的次数执行循环体,该次数是由循环变量的初值、终值、步长及循环体中Exit For 前的条件共同确定。 • 例 输出1-10之间的奇数。 输出1-10之间的不大于7的奇数。 • For i=1 To 10 Step 2 For i=1 To 10 Step 2 • Print i If i<7 then Print i Else Exit For • Next i Next i • 执行5次Print i语句。 执行3次Print i语句。
4.4.1 For循环 • 说明: • 循环变量:每循环一次,它的值都会根据Step后的值自动改变。并与终值比较决定是否继续循环。 • 初值、终值和步长:均是数值表达式,其值若是实数,则自动取整。 • 当初值≤终值时,步长应该取正数,反之取负数。否则,将造成死循环。当步长为1时,可略去不写,步长不应=0,否则构成死循环。 • 循环体:是需重复执行的语句,可以是一条语句或多条语句,甚至是空语句。 • Exit For:用于中途强制退出循环。 • Next:循环终端语句。其后的“循环变量”与For语句中的“循环变量”必须相同。 • 无Exit For的循环次数为: 循环次数=Int(终值-初值/步长)+1
4.4.1 For循环 • For循环结构执行流程
4.4.1 For循环 • 注意: • 上图中有两个操作是隐含的,一个是循环变量与终值进行比较的操作,还有一个是循环变量的自增(在原来值上累加步长的值)操作,这两个操作在For循环语句中没有显式的代码,但这两个操作是由VB自动地完成的。 • 当循环结束时,如果它不是因为Exit For语句提前结束循环的,那么此时,循环变量必定是严格地大于(当步长为正)或小于(当步长为负时)终值。 • For循环也可以嵌套,与IF一样不允许交叉。每个Next和上面最近的For相匹配。
4.4.1 For循环 • 例 求1—100之间所有奇数之和 Private Sub Form_Click() Dim i As Integer, sum As Integer sum = 0 '置sum变量的初值为0 For i = 1 To 100 Step 2 sum = sum + i 'sum起到了累加器的作用 Next i Print sum End Sub • 说明: • (1)sum变量的作用是每循环一次,sum将i的值和它原来的值累加后在赋给自己。所以,当循环结束时,sum中存放的就是0+1+3+5+……+99的结果。 • (2)在本程序中,将sum的初值明确地赋值为0。在VB中,任何变量都有默认的初值,其中,数值型变量0,字符串型变量为空字符。
4.4.2 While循环 • 当循环的次数无法预先确定,一般用While语句,根据某一条件进行判断,决定是否继续执行循环,其语法格式如下: While 条件 [循环体] Wend • 执行流程如右图。
4.4.2 While循环 • 说明: • While循环语句先对“条件”进行测试,然后才决定是否执行循环。如果“条件”总是成立,则不停地执行循环体,构成死循环。因此在循环体中应包含有对“条件”的修改操作,使循环体能正常结束。 • While循环也可以嵌套,同样不允许交叉。每个Wend和最近的While相匹配。
4.4.2 While循环 • 例 小红今年12岁,她父亲比她大30岁,编程计算出她的父亲在几年后比她年龄大一倍,那时父女的年龄各为多少? • 程序代码如下: Private Sub Form_Click() Dim age As Integer age=12 While age*2<>age+30 age=age+1 Wend Print "经过";age-12; "年,父女年龄分别是:";age+30; "和";age End Sub
4.4.3 Do循环 • Do循环语句也是根据条件决定循环的语句。其构造形式较灵活:既可以指定循环条件,也能够指定循环终止条件。 格式1:Do[While|Until〈条件〉] [〈循环体〉] [Exit Do] Loop 格式2:Do [〈循环体〉] [Exit Do] Loop[While|Until〈条件〉] • 功能:当循环“条件”为真(While条件)或到循环结束“条件”为真之前(Until〈条件〉)重复执行循环体。
4.4.3 Do循环 • 说明: • While是当条件成立时执行循环,而Until则是在条件成立时结束循环。 • 当只有Do和Loop两个关键字时,其格式简化为: • Do • [〈循环体〉] • Loop • 为使循环能正常结束,循环体中应有Exit Do语句。 • 在格式1中,While和Until放在循环的开头是先判断条件,再决定是否执行循环体的形式;格式则先执行再循环再判断。
4.4.3 Do循环 • 例 求两个正整数的最大公约数(辗转相除法)。 • 算法分析:(1)m除以n得余数r; • (2)若r = 0,则n为所求得的最大公约数,结束; • (3)m←n,n←r,再重复执行(1)─(2)。 • 程序代码: Private Sub Form_Click() Dim m As Integer,n As Integer,r As Integer,t As Integer m=Val(InputBox("请输入第一个整数")) n=Val(InputBox("请输入第二个整数")) Do r=m Mod n m=n n=r Loop Until r=0 Print "最大公约数是:";m End Sub
4.4.4 循环结构的嵌套 • 一个循环中包含另一个循环称为循环结构的嵌套。其实VB中的控制结构可以任意嵌套,循环结构和分支结构可以互相嵌套,且嵌套层数不限。 • 使用嵌套时应注意以下几个问题: • 嵌套中的各个控制结构必须完整,内层结构必须完全包含在外层结构中,不能交叉。内外循环变量也不能同名。 • 与IF…EndIf语句一起使用时,只能从循环内跳到循环外,不能从循环外跳到循环内,也不能从外循环跳到内循环。 • 嵌套中使用强制退出语句Exit只退出本层循环。 • 输入代码时嵌套中各层结构应采用总体缩排,以使层次分明。 • For与Next配对的规则:从最内层的循环往外看,next总是与离它最近的没有配过对的For配对。 • 可以省略Next后面的循环变量。 • 当内外循环有相同的终点时,可以共用同一个Next语句,此时Next后面的循环变量名不能省略。 • 并列的循环可以用同一个变量名作循环变量,而嵌套的循环不能用同一个变量名作循环变量。