




已阅读5页,还剩111页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual Basic 程序设计教程 (第3版),2,第4章 VB控制结构,4.1 顺序结构 4.2 选择结构 4.3 循环结构 4.4 其它辅助控制语句 4.5 综合应用 4.6 程序调试,3,4.1 顺序结构,VB具有结构化程序设计的三种程序控制结构: 顺序结构、选择结构、循环结构,是程序设计的基础。,本章目录,(1)顺序结构 各语句按出现的先后次序执行,用传统流程图表示为,4,(2)选择结构,根据条件决定执行的语句,5,(3)循环结构,I 、当型循环结构,II 、直到型循环结构,根据条件重复执行语句(称为循环体),6,4.1 顺序结构 一般程序设计语言中顺序结构的语句主要: 赋值语句和 输入/输出语句等。 在VB中 赋值语句 输入/输出通过: 文本框控件、标签控件、 InputBox函数、MsgBox函数和过程 Print方法等来实现。,7,4.1.1 赋值语句,形式: 变量名表达式 对象名. 属性名=表达式 功能:计算表达式的值,再将此值赋给变量或对 象属性。 给变量赋值和设定属性是VB编程中常见的两个任务。例如: n = n + 1 计数累加 Text1.Text “ 清除文本框的内容 Text1.Text “欢迎使用VB “ 文本框显示字符串,本章目录,8,赋值语句注意点,“=”符号有两个意义 赋值号与表示等于的关系运算符都用“=”表示,系统会根据所处的位置判断符号的意义。 赋值号左边只能是变量,不能是常量、常数符号、表达式。下面均为错误的赋值语句: Now()=x+y 左边是表达式(函数) 5=sqr(s)+x+y 左边是常量 X+y=z 左边是表达式,本章目录,9,赋值语句的两个常见形式,(1)累加 sum=sum+x (2)计数 n=n+1,10,4.1.2 数据的输入和输出,1. 标签和文本框 (1)标签 利用标签的Caption属性输出数据。 (2)文本框 利用文本框的Text属性获得用户输入的数据或将计算的结果输出。 例如:r=Val(Text1.Text),11,2. 输入对话框 InputBox函数 其作用是打开一个对话框,等待用户输入,返回字符串类型的输入值。 形式:InputBox(提示,标题,默认值,x坐标位置,y坐标位置),本章目录,注意:提示项不能省略。 若要多行提示,可在每行 行末加回车换行vbCrLf。,例4.1利用InputBox输入基本工资和营业额,按营业额的5%提成,计算实发工资并显示。,12,作用:打开一个消息框,等待用户选择一个按钮。 MsgBox函数返回所选按钮的值 MsgBox过程不返回值 MsgBox函数形式: 变量% = MsgBox(提示,按钮,标题) MsgBox过程形式: MsgBox 提示,按钮,标题 按钮项是一整型表达式,决定信息框按钮的数目和类型及出现在信息框上的图标形式。,3. 消息对话框MsgBox函数和过程,13,MsgBox按钮设置,14,MsgBox所选按钮返回值,例4.2 编一账号和密码输入的检验程序,当输入不正确,如账号为非数字字符,密码不正确等,显示有关信息,再输入。,15,4.Print方法,作用:在对象上输出信息。 形式:对象.PrintSpc(n)|Tab(n)输出列表 ;|, 其中: 对象:窗体、图形框或打印机。缺省为窗体。 Spc(n)函数:从当前位置起空n个空格 Tab(n)函数:从最左端开始计算的第n列 分号:定位在上一个被显示的字符之后 逗号:定位在下一个打印区开始处(每区14列) Print语句尾无分号或逗号,输出后换行 例4.3 Print方法输出图形 利用String函数显示重复字符 利用循环结构、Spc、Tab函数显示有规律图形,16,5. Format格式输出函数,形式: Format (表达式, “格式字符串“) 常用数值格式化符及举例,例4.4 利用Format函数显示数值。,17,4.2 选择结构,计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的。 必须利用选择结构等来解决实际应用中的各种问题。 VB中主要通过If条件语句和Select情况语句来实现。它们都是对条件进行判断,根据判断结果,选择执行不同的分支。,本章目录,18,4.2.1 If条件语句,1. IfThen语句(单分支结构) If Then 语句块(可以是一句或多句语句) End If 或 If Then 表达式:关系表达式、逻辑表达式,算术表达式。表达式值按非零为True,零为False进行判断。 该语句的作用是当表达式的值为True,执行Then后面的语句块,否则不做任何操作。,IF演示,19,单分支结构,例:已知两个数x和y,比较它们的大小,使得x大于y。 If xy Then t=x x=y y=t End If 或 If xy Then t=x: x=y: y=t 简单If形式无End If时,只能是一句语句或语句间用冒号分隔,而且必须在一行上书写。,20,双分支结构,2. IfThenElse语句 If 表达式 Then 语句块1 Else 语句块2 End If 或 If 表达式 Then 语句1 Else 语句2 当表达式的值为True时,执行Then后面的语句块1,否则执行Else后面的语句块2,21,双分支结构例,计算分段函数,单分支 y=cos(x)x3+3*x 结构实现 If x0 Then y=sin(x)+sqrt (x*x+1),If x0 Then 双分支 y=sin(x)+sqr (x*x+1) Else 结构实现 y=cos(x)x3+3*x End If,22,多分支结构,3. IfThenElseIf 语句 If 表达式1 Then 语句块1 ElseIf 表达式2 Then 语句块2 Else 语句块 n+1 End If,作用:根据不同的表达式值确定执行哪个语句块,23,例4.7 已知变量ch中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。 If UCase(ch) = “A“ And UCase(ch) = “ 0“ And ch = “9“ Then 数字字符 MsgBox(ch + “是数字字符“) Else 除上述字符以外的字符 MsgBox(ch + “是其他字符“) End If,不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。 ElseIf不能写成 Else If,多分支结构例,24,指If或Else后面的语句块中又包含If语句。 If 表达式1 Then If 表达式2 Then End If End If,If xy Then t=x: x=y: y=t If yz Then t=y: y=z: z=t If xy Then t=x: x=y: y=t End If End If,If语句的嵌套,例 已知x,y,z三个数,使得xyz 用一个IF语句和一个嵌套的IF语句实现,25,4.2.2 Select Case语句,Select Case 变量或表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 Case Else 语句块n+1 End Select,表达式列表与变量或表达式的类型必须相同,是下面4种形式之一 : 表达式 例: “A“ 一组用逗号分隔的枚举值 2,4,6,8 表达式1 To 表达式2 60 To 100 Is 关系运算符表达式 Is 60,26,Select Case语句例,将例4.7 改用 Select Case 语句实现: Select Case ch Case “a“ To “z“,“A“ To “Z“ MsgBox( ch + “是字母字符“) Case “0“ To “9“ MsgBox (ch +“是数字字符“) Case Else MsgBox( ch + “是其他字符“) End Select 多分支结构,用Select Case语句比IfThenElseIf语句直观,程序可读性强。但不是所有的多分支结构均可用Select Case语句代替IfThenElseIf语句。,27,Select Case语句例,例4.9判断坐标点(x,y),落在哪个象限。,代码一 If x 0 And y 0 Then MsgBox(“在第一象限“) ElseIf x 0 Then MsgBox(“在第二象限“) ElseIf x 0 And y 0 Then MsgBox(“在第四象限“) End If,代码二 Select Case x,y Case x 0 And y 0 MsgBox(“在第一象限”) Case x 0 MsgBox(“在第二象限”) Case x 0 And y 0 MsgBox(“在第四象限”) End Select,代码二错误: 1. Select Case 后不能出现多个变量 2. Case后不能出现变量及有关运算符,28,4.2.3 条件函数,(1) IIf函数 IIf(表达式,表达式为真时的值,表达式为假时的值) IIf函数是If Then Else 结构的简洁表示 例如,将x,y中大的数,放入Tmax变量中: Tmax = IIf(x y,x,y) 该语句与如下语句等价 : If x y Then Tmax = x Else Tmax = y,29,4.2.3 条件函数,(2) Choose函数 Choose(整数表达式,选项列表) 根据表达式的值i,返回选项列表中第i个选项。如果整数表达式的值越出选项范围时,返回Null。 例 根据Nop的值,得到+、-、中的某运算符: Op= Choose(Nop,“+“,“-“,“,“) 例4.10 根据当前日期,显示今日是星期几。 t = Choose(Weekday(Now), “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”) MsgBox(“今天是:“ & Now & t),Dim nop As Integer, op As Char Randomize() nop = Int(Rnd() * 4 + 1) op = Choose(nop, “+“, “-“, “, “) MsgBox(“nop=“ & nop & “ op=“ & op),30,4.3 循环结构,计算机最擅长的功能之一就是按规定的条件,重复执行某些操作。 例如,按照人口某增长率,对人口增长统计;根据各课程的学分、绩点和学生的成绩,统计每个学生的平均绩点等。 这类问题都可通过循环结构来方便地实现。VB中提供了主要两类循环语句: For循环语句(一般已知循环次数); Do条件型循环语句(一般未知循环次数).,31,4.3.1 For循环语句,For循环语句用于控制循环次数预知的循环结构。 For 循环变量 初值 To 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量 循环变量必须为数值型。 循环次数,例4.11 计算1100的奇数和,Dim i%, sum% For i = 1 To 100 Step 2 sum = sum + i Next i MsgBox(sum),32,For循环语句,循环流程: (1) 循环变量被赋初值,它仅被赋值一次。 (2) 判断循环变量是否在终值内,如果是,执行循环体;如果否,结束循环,执行Next的下一语句。 (3) 循环变量加步长,转(2),继续循环,33,4.3.2 DoLoop循环语句,Do循环用于控制循环次数未知的循环结构。 形式1: Do While|Until 语句块 Exit Do 语句块 Loop 形式1为先判断后执行,有可能一次也不执行; 形式2为先执行后判断,至少执行一次。,形式2: Do 语句块 Exit Do 语句块 Loop While|Until ,34,DoLoop流程,35,循环例题,例4.13 我国有13亿人口,按人口年增长0.8%计算,多少年后我国人口超过26亿。 解此问题两种方法,可根据公式:,直接利用标准函数对数可求得,但求得的年数不为整数;也可利用循环求得 。,36,4.3.3 循环的嵌套,在一个循环体内又包含了一个完整的循环结构称为循环的嵌套。循环嵌套对For循环语句和DoLoop语句均适用。 例4.14 打印九九乘法表,思考:打印上三角或下三角程序如何改动?,37,4.4 其他辅助控制语句,4.4.1 Go To 语句 无条件地转移到标号或行号指定的那行语句。 Go To 标号|行号 注意:标号是字符序列,首字符必须为字母,标号后应有冒号;行号是一个数字序列; 例4.15 判断输入的数是否为素数 素数就是除1和本身以外,不能被其他任何整数整除的数。根据此定义,判别某数m是否为素数最简单的方法就是依次用i=2m-1去除,只要有一个数能整除m,m就不是素数;否则m是素数。,要求一定范围内的素数,只要将m作为外循环体变量。,38,4.4.2 退出和结束语句,1.Exit语句 VB中有多种形式的Exit语句,用于退出某种控制结构的执行。Exit的形式如下: Exit For、Exit Do、 Exit Sub、Exit Function 2.End语句 独立的End语句用于结束一个程序的运行,它可以放在任何事件过程中。,39,4.5 综合应用,例4.16 由计算机自动产生四则运算题,并能判断答案的正确性。 设计思路: (1)为了减少输入和增加试题内容的随机性,通过随机函数Rnd产生试题的操作数和运算符,操作数范围是110,运算符+、-、可对应编号14,产生表达式通过Form_Load事件过程。 (2)当产生表达式后,学生在文本框内输入结果后按回车键,在图形框显示正确与否的判断结果。 (3)当单击“计分”按钮时,计算机显示得分结果。 本题主要将随机函数、If语句、Select语句综合在一起使用。,本章目录,40,4.5 综合应用-级数求和,例4.18求自然对数e的近似值,其误差小于0.00001。,近似公式,分析:本例涉及到程序设计中两个重要运算: 累加 、连乘i!。 累加:在原有和的基础上再加一个数; 连乘:在原有积的基础上再乘以一个数。 该题先求i!,再将1/i!进行累加,循环次数未知,可先设置一个次数很大的值,然后在循环体内判断是否到达精度,也可用Do While来实现。,41,4.6 程序调试,随着程序的复杂性提高,程序中的错误也伴随而来。 对初学者,看到出现错误不要害怕,关键是如何改正错误,失败是成功之母。 上机的目的,不光是为了验证你编写的程序的正确性,还要通过上机调试,学会查找和纠正错误的方法和能力。 VB为调试程序提供了一组交互的、有效的调试工具。,42,4.6.1 错误类型,语法错误、运行时错误和逻辑错误三类。 1、语法错误,43,2、运行错误,指令代码执行了一非法操作引起的。例如,类型不匹配、试图打开一个不存在的文件等。程序会自动中断,并给出有关的错误信息。,44,3、逻辑错误,程序运行后,得不到所期望的结果,这说明程序存在逻辑错误。 例如,运算符使用不正确、语句的次序不对、循环语句的起始、终值不正确等。 通常,逻辑错误不会产生错误提示信息,故错误较难排除,需要程序员仔细地阅读分析程序,并具有调试程序的经验。,45,4.6.2 调试和排错,VB的三种模式 1、 设计模式(设计) 可以进行程序的界面设计、属性设置、代码编写等。 2、 运行模式(运行) 执行启动命令进入运行模式。在此阶段,可以查看程序代码,但不能修改。 3、 中断模式(Break) 执行中断命令,进入中断模式。在中断模式下可以查看代码、修改代码、检查数据。,本章目录,46,调试和排错-插入断点,鼠标指向所关心的变量,本章目录,47,本章小节,结构化程序设计三种结构 顺序结构、选择结构、循环结构 IfThen语句、Select Case语句、For与 Do循环语句 赋值语句与复合赋值语句 数据输出和输入 InputBox、MsgBox 常用算法 素数判定、级数求和、试凑法、迭代法解方程,48,第5章 数组和自定义类型,5.1 数组的概念 5.2 数组的基本操作和排序 5.3 列表框和组合框控件 5.4 自定义类型及其数组 5.5 综合应用,本章目录,49,5.1 数组的概念,1. 引例 例5.1 求100个学生的平均成绩,并统计高于平均分的人数。用简单变量和循环,求平均成绩程序段如下: aver = 0 For i = 1 To 100 mark = InputBox(“输入学生成绩“) aver = aver + mark Next i aver = aver / 100 问题 (1)mark只能放一个学生的成绩,无法统计高于平均分的人数。 (2)若用简单变量保存100个学生的成绩,则需定义100个变量和使用100句输入语句。由此引入了数组。,本章目录,50,用数组解决问题的程序如下: Dim mark(99) As Integer 声明数组mark Dim aver!, overn%, i% aver = 0 For i = 0 To 99 输入成绩,求分数和 mark(i) = InputBox(“输入学生的成绩“) aver = aver + mark(i) Next i aver = aver / 100 求100人的平均分 overn = 0 For i = 0 To 99 统计高于平均分的人数 If mark(i) aver Then overn = overn + 1 Next i MsgBox (“平均分:“ & aver & “高于平均分人数:“ & overn),本章目录,51,数组: 不是一种数据类型,而是一组相同类型的变量的集合。 作用:用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,和循环语句结合使用,使得程序书写简洁。 使用:必须先声明后使用 按声明时数组的大小确定与否,分为两类数组: 静态(定长)和动态(可变长),本章目录,52,5.1.2 定长数组及声明,静态(定长)数组:声明时就确定了大小的数组。 一维数组 Dim 数组名(下标下界 To 上界) As 类型 说明:下标下界缺省为0,下标上界为常数。 数组大小为:下标上界-下标下界+1。 作用:声明了数组名、类型、维数、数组大小 在内存分配一块连续的区域。,本章目录,53,例:Dim mark(99) As Integer 声明了一维定长整型数组mark , 共有100个元素,下标范围为0 To 99; mark数组的各元素是mark(0),mark(1),mark(99); mark(i)表示由下标i的值决定是哪一个元素。mark数组内存分配如下:,每个数组元素有一个唯一的顺序号,下标不能超出数组声明时的上、下界范围,否则会产生“下标越界”错误 。数组元素的使用规则与同类型的简单变量相同。,本章目录,54,多维数组声明,Dim 数组名(下标1,下标2 ,) As 类型 下标数决定了数组的维数,数组的大小为每一维大小的乘积。 例 Dim x(2,4) As Long 声明了一个长整型的二维数组 x;共占据35个长整型变量的空间,本章目录,55,注意:,(1) 下界缺省为0,也可在重新定义数组的下界。 例如: Option Base 1 (2) 错误的声明,下标是变量。 n =Inputbox(“输入n ” ) Dim x(n) As Single,56,动态数组:声明时未给出其大小的数组,当需要 使用时再用ReDim 语句指出数组大小。 优点:可根据用户需要,有效地利用存储空间。 它是在程序运行到ReDim 语句时分配空间,而定长数组是在程序编译时分配空间。,5.1.3 动态数组及声明,57,(1)用Dim 语句声明数组,但不能指定数组大小 形式:Dim 数组名( ) As 数据类型 (2)用ReDim语句动态地分配元素个数 形式: ReDim 数组名 (下标,下标2) 例:Dim s ( ) As Single Sub Form_Load( ) ReDim s(4,8) End Sub,建立动态数组要分两步:,58,定义动态数组大小注意:,Dim 是说明语句,可出现在程序的任何地方,而ReDim 是执行语句,只能在过程中 在过程中可多次使用ReDim语句来改变数组的大小,每次使用ReDim语句都会使原来数组中的值丢失,可在ReDim 后加Preserve参数用来保留原来的数据,若使用Preserve参数后,只能改变最后一维的大小。 例5.2 编一个程序,显示有n个数的非波那契数序列,59,数组定义时用数组名表示整体,但在具体使用时 针对每个数组元素进行。数组元素的引用形式为: 数组名 (下标,下标2) 数组的赋值Array函数( 见P103) 形式:变量名= Array(常量列表) 注意: (1) 变量名必须声明为 Variant类型,并作为动态数组; (2) 数组的下界默认为0,上界由参数个数决定。下界和上界可通过函数Lbound 和Ubound获得; (3)常量列表用逗号分隔。,5.2 数组的基本操作,60,2、数组的输入 通过TextBox控件或InputBox函数输入 Dim s(3,4) AS Integer For i = 0 To 3 For j = 0 To 4 s(I,j) = Val(InputBox(“输入“ & i &“,“ & j & “元素“) Next j Next i 说明:对大量数据的输入一般不用InputBox 函数。,61,3、数组的输出,例5.3 形成55的方阵,分别输出方阵中各元素、上三角和下三角元素,方阵规律:第一行的元素为04,以后每一行是前一行对应元素增加5 上三角规律: 每一行的起始列与行号相同,只要控制内循环的初值 用Tab函数或Space定位控制输出的空格,,62,4、求数组和、最小值、位置及交换元素,例5.4 求一维数组中各元素之和、最小数组元素,并将最小值数组元素与数组中第一个元素交换 求元素和 通过循环将每个元素进行累加 求数组中最小元素 假设第一个元素为最小,然后将该数与其他元素逐一比较,若发现小于最小值,就用新值替换最小值,同时记录下标值。 求最大值的方法与求最小值相似,63,本章目录,64,5、数组排序,排序是将一组数按递增或递减的次序排列,例如按学生的成绩、球赛积分等排序。排序的算法有许多,常用的有选择法、冒泡法、插入法、合并排序等。 (1)选择法排序 基本思想:每次在若干个无序数中找最小(大)数,并放在相应的位置。,65,例对于有n个数的数组,按递增次序排序的步骤: 从n个数中找出最小数的下标,最小数与第1个数交 换位置;通过这一轮排序,第1个数已确定好。 2) 除已排序的数外,其余数再按步骤1)的方法选出最小的数,与未排序数中的第1个数交换位置。 3) 重复步骤 2) n-1遍,最后构成递增序列。 如原始序列: 8 6 9 3 2 7 第1遍排序后: 2 6 9 3 8 7 第2遍排序后: 2 3 9 6 8 7,66,例5.5 对已知存放在数组中的6个数,用选择法按递增顺序排序。,选择法排序过程示意,67,(2)冒泡法排序,基本思想是: 1)从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较比较完毕,一个最大的数沉底成为数组中的最后一个元素,一些较小的数如同气泡一样上浮一个位置。 2)n个数,经过n-1轮比较后完成排序。,68,冒泡法排序,例5.6 用冒泡排序法实现例5.5的问题。,69,(3)插入数据,插入数据基本思想是: 1)首先查找待插入数据在数组中的位置k; 2)然后从最后一个元素开始往前直到下标为k的元素依次往后移动一个位置; 3) 第k个元素的位置腾出,将数据插入。,例5.7在有序数组a中插入数值x。,本章目录,70,(4)删除数据,删除操作首先也是要找到欲删除的元素的位置k; 然后从k+1到n个位置开始向前移动; 最后将数组元素减1。,例5.8 要将值为13的元素删除。,本章目录,71,5.3 列表框和组合框,列表框和组合框实质是一维字符串数组的使用 列表框 可显示多个选项供用户选择,不能直接修改其中的内容。 组合框 组合了文本框和列表框的特性而形成的一种控件。,72,1、列表框和组合框重要属性,(1) List 该属性是一个字符型数组,下标从0开始, 存放列表框的项目。 (2) ListIndex:表示执行时选中的列表项的序 号,若未选中任何项,则ListIndex的值为-1。该属性只能在程序中设置或引用。 (3) ListCount:列表框中项目的数量。 (4) Sorted:为True时,则项目按字母顺序排列显示,否则,按加入的先后顺序显示。 (5) Text:被选定的文本内容 。,73,列表框特有的属性 MultiSelect属性 组合框特有的属性 组合框有3种式样,由Style属性决定:下拉式组合框,简单组合框和下拉式列表框。,74,List1.ListIndex = 2 List1.ListCount = 6 List1.Sorted = False List1.Text 为 “C/C+程序设计 “,List1.List(List1.ListIndex)等于List1.Text,本章目录,75,2、常用方法,AddItem方法 把一个项目加入列表 对象.AddItem 项目字符串 ,索引值 索引值:决定新增项在列表中的位置,如果省略,则新增项目添加在最后。 RemoveItem方法 删除列表中指定项目 对象.RemoveItem 索引值 Clear 清除列表中所有项目 例如:List1.Clear,全部清除,76,3、重要事件,列表框:Click、DblClick 组合框:Click 例5.9编写一个能对列表框进行项目添加、修改和删除的应用程序。 关键: 1)获得选中的下标ListIndex 2)不能直接修改列表框, 先将选项显示在文本框中, 更改文本框中内容后, 再更新列表框,77,4、应用,例5.12使用组合框对省和直辖市名称管理,78,5.4 自定义类型及数组,1、概念和定义 数组存放性质相同的数据集合。若不同类型信息作为一个整体来描述,例如姓名、性别、出生年月等,通过Type语句来实现。,79,Type 自定义类型名 元素名1 As 数据类型名 元素名n As 数据类型名 End Type 其中: 元素名:表示一个成员,可以是简单变量,也可是 数组说明符; 数据类型名:既可是标准类型,也可是已定义的自定 义类型,若为字符串类型,应为定长字符串。,80,例如,定义一个有关学生信息的类型: Type StudType StudType为自定义类型名 Name As String*5 姓名 Sex As String*1 性别 Telephone As Long 电话 School As String*10 学校 End Type 注意: 自定义类型不能在过程内定义,一般放在标准模块文件,默认为Public;若在窗体模块的通用声明段定义,必须加Private。,本章目录,81,2、自定义类型变量的声明,定义了自定义类型,就可在变量的声明时使用。 形式:Dim 变量名 As 自定义类型名 例如,如下语句: Dim S1 As StudType,S2 As StudType 声明S1、S2为两个同种类型的变量,82,注意: 不要混淆StudType 和S1 ,前者如同Integer等的类型名,后者根据该类型分配所需的内存空间,存储各成员数据。 (2) 类型变量和数组相同之处它们都是由若干个成员组成;不同之处,前者的成员代表不同性质、不同类型的数据,以各个不同的成员名表示;而数组一般存放的是同种性质、同种类型的数据,以下标表示不同的元素。,83,3、自定义类型变量成员的引用,引用自定义类型变量中的某个成员,形式如下: 自定义类型变量名.成员名 例如, S1.Name S1变量中的姓名 S1.Sex 性别 可利用With语句简化成员引用: With 变量名 语句块 End With,With S1 .Name = “张华“ .Sex = “男“ .School=“同济大学“ End With,84,4、自定义类型数组及应用,自定义类型数组就是数组中的每个元素是自定义类型 例5.13用自定义类型数组,查询和显示学生信息 分析:自定义一个记录类型,由姓名、性别、电话、学校组成,声明一个存 放100个记录的数组。,85,5.5 综合应用-大量数据输入和编辑,问题: InputBox一次输入一个数据,而后不能修改 一个文本框也只能输入一项 改进:可利用文本框、字符串函数通过编程实现。 例5.15在文本框输入数据,并允许修改和自动识别非数 字数据;输入结束将它们按分隔符分离后存放在数组中。 利用Keyascii参数过滤非法数据,文本框本身具 有编辑功能; 利用Replace函数去除重复输入的分隔符。 利用Split函数将输入的内容分离到数组中。,86,第六章 过 程,6.1 函数过程的定义与调用 6.2 子过程的定义与调用 6.3 参数传递 6.4 递 归 6.5 综合应用,87,过程的引入: 使同类的操作不重复编写,写一次多次用 把一项复杂的工作分成简单的功能块,分而治之 过程: 完成一段独立功能,可供其他过程使用(调用)。 调用过程: 调用其他过程的过程,88,引例6.1 已知多边形各条边的长度,计算多边形的面积。 计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积的公式如下:,本章目录,可将需重复计算三角形面积的功能自定义为一个过程,供事件过程多次调用。,89,常用过程分类:,Sub过程,Function过程,事件过程 自定义子过程,内部函数(标准函数) 自定义函数过程,1)过程是一段程序代码,是相对独立的逻辑模块。 2)一个完整的VB应用程序由若干过程和模块组成。 本节主要介绍用户自定义的 Sub子过程:完成一定的操作和功能,无返回值。 Function函数过程:完成一定的操作和功能,并且可将数据处理的结果返回。,90,有两种方法: (1) 利用“工具”菜单的“添加过程”命令定义生成一个函数的框架。 (2) 利用代码窗口直接定义。 函数过程形式为: Public|Private Function 函数过程名(形参列表) As 类型 局部变量或常数定义 语句块1 函数名 = 表达式 函数过程体 Exit Function 语句块2 函数名 = 表达式 End Function,6.1 函数过程的定义和调用 1.函数过程的定义,91,其中: (a)函数过程名:与变量命名规则相同。 (b) As 类型:函数返回值的类型。 (c)形参列表形式为: ByVal变量名( )As 类型, ByVal变量名( ) As 类型 形参只能是变量或数组名,ByVal表示当过程被调用时此参数是值传递,否则是地址传递。 函数过程无参数时,过程名后的括号不能省略。 (d)在函数体内至少对函数名赋值一次。,92,定义函数过程area Function area(x!, y!, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqrt(c * (c - x) * (c - y) * (c - z) End Function,例如,定义计算三角形面积的函数过程。,93,2. 函数过程的调用 函数过程的调用与使用标准函数相同,形式 如下: 函数过程名 (参数列表) 如: s1=area(a,b,c) (见P126) 因函数过程名返回一个值,故函数过程不能作为 单独的语句调用,必须作为表达式或表达式的一 部分来构成语句。,94,函数过程的调用,例6.3编一函数,统计字符串中汉字的个数。 分析:在VB中,字符以Unicode码存放,每个汉字和英文是一个字符、占有两个字节,区别是汉字的机内码最高位为1,若利用Asc函数求其码值为小于0(以补码表示),而西文字符的最高位为0,Asc函数求其码值为大于0,本章目录,95,6.2 子过程的定义与调用,6.2.1 引例 以下情况使用函数过程存在不便: 不是为了获得某个函数值,而是为了某种功能 的处理。 要获得多个结果。 VB中提供了使用更灵活的子过程。 例6.4编一过程,对Label1控件进行移动,通过参数Tag的值(1或-1)决定移动方向。 该过程不是为了计算获得某个结果,而是进行对控件移动的处理。,本章目录,96,6.2.2子过程的定义,子过程定义的方法同函数过程,形式如下: Public|Private Sub 子过程名(形参列表) 局部变量或常数定义 语句 Exit Sub 语句 End Sub 子过程名、形参同函数过程中对应项的规定,当无形参时不要括号。,本章目录,97,子过程与函数过程的区别,把某功能定义为函数过程还是子过程,没有严格的规定。一般若程序有一个返回值时,函数过程直观;当有多个返回值时,习惯用子过程。 函数过程必须有返回值,函数名有类型。子过程名没有值,过程名没有类型,不能在子过程体内对子过程名赋值。,本章目录,98,子过程的调用是一句独立的调用语句,有两种形式: Call 子过程名(实参列表) 子过程名 (实参列表) 用Call关键字时,若有实参,则实参必须用圆括号括起,无实参圆括号省略。 注意:若实参要获得子过程的返回值,则实参只能是变量(与形参同类型的简单变量、数组名、结构类型),不能是常量、表达式,也不能是控件名。,6.2.3 子过程调用,本章目录,99,例6.5 分别编一统计字符串S中定冠词The出现个数的子过程和函数过程,并分别调用。 处理方法:利用InStr函数反复在字符串S找The子串。 分析:对同一问题定义两种过程时,只要抓住函数过程和子过程的区别,即函数名有一个值、子过程名无值的特点。当定义好函数过程后,要改为子过程,只要将函数过程的返回结果作为子过程的形参,即在子过程中增加一个参数;反之也然。,本章目录,100,6.3 参数传递,6.3.1 形参与实参 在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。 按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置,例如Mid函数形式: Mid(字符串$,起始位%,取几位%) 调用语句:s=Mid(“This is VB“ ,9,2) 则s中的结果为“VB”。,本章目录,101,6.3.2 传址与传值,实参与形参的结合有传址(ByRef)和传值(ByVal)两种方法。 传址方式参数结合过程 当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,实参的值就会随过程体内对形参的改变而改变。 传值方式参数结合过程 当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了联系。在过程体内对形参的任何操作不会影响到实参。,本章目录,102,例6.6 传址与传值,本章目录,形参获得实参的值,形参获得实参的地址,103,传址与传值,选用传值还是传地址一般进行如下考虑: 要将被调过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量名(包括简单变量、数组名、结构类型等),不能是常量、表达式。 不希望过程修改实参的值,则应选用传值方式,减少各过程间的关联。因为在过程体内对形参的改变不会影响实参。 形参是数组都是地址传递(可表示值传递或地址传递)。,本章目录,104,例6.7如下sum子过程求数组a各元素和、并改变数组各元素值: Function sum%(ByVal x() As Integer) Dim i% sum = 0 For i = 0 To UBound(x) sum += x(i):x(i) = 2 * x(i) Next i End Function,6.3.3 数组参数的传递,本章目录,105,形参是数组 要以数组名加圆括号表示,不要给出维数上界;多维数组,每维以逗号分隔。在过程中通过Ubound函数确定每维的上界。 实参是数组 要给出数组名(不需要圆括号)。 当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址。,数组参数的传递,形参数组 实参数组,本章目录,106,6.3.4 变量的作用域,过程级变量 在一个过程内用Dim或Static语句 声明的变量,只能在本过程中使用 模块级变量 在模块内、任何过程外用Dim、Private语句声明的变量,可被本模块的任何过程访问 全局变量 在模块级用Public语句声明的变量,可被应用程序的任何过程或函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年桂林市临桂区吾悦幼儿园招聘教师考试笔试试题(含答案)
- 动物骨骼在文物保护与修复中的应用创新创业项目商业计划书
- 物体识别AR购物体验创新创业项目商业计划书
- 动物专用止痒产品创新创业项目商业计划书
- 2025年直播电商主播影响力与直播广告营销策略研究报告
- 2025年工业互联网平台数字水印技术在数据安全治理中的应用与效果评估
- 2025年干细胞治疗神经系统疾病临床应用创新案例解析报告
- 2025年城市河道生态修复项目生态修复效果与生态修复实施
- 2026届内蒙古赤峰市宁城县化学高二上期末综合测试试题含答案
- 民法典物业培训课件
- 2025年吉林省中考语文真题(含答案)
- 2025高级会计师考试试题及答案
- 工地建筑钢板租赁合同范本
- 光传输业务配置课件
- (标准)便利店转让合同协议书带烟证
- 2025年辽宁省地质勘探矿业集团有限责任公司校园招聘笔试备考题库带答案详解
- 2025年青海辅警招聘考试题及答案
- 2025新外研版初中英语八年级上全册课文原文翻译
- GB∕T 40753-2021 供应链安全管理体系 ISO 28000实施指南
- GA∕T 1577-2019 法庭科学 制式枪弹种类识别规范
- 福州市长乐区农村宅基地及房屋确权登记
评论
0/150
提交评论