第章VisualBasic编程基础第二部分ppt课件.ppt_第1页
第章VisualBasic编程基础第二部分ppt课件.ppt_第2页
第章VisualBasic编程基础第二部分ppt课件.ppt_第3页
第章VisualBasic编程基础第二部分ppt课件.ppt_第4页
第章VisualBasic编程基础第二部分ppt课件.ppt_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章VisualBasic6 0编程基础 第二部分 2 7基本流程结构 控制结构可控制程序执行的流程 如果未使用控制流语句 程序便从左至右 自顶向下地贯穿这些语句 有些简单程序可以只用单向流程来编写 有些流程可以依靠运算符的优先级来控制 但任何编程语言的效力和用途皆由其通过结构和循环改变语句顺序的能力而得 2 7 1顺序结构 顺序结构中程序按照语句编写的先后顺序一条一条地执行 使用顺序结构只需要将合法语句按照合理的执行顺序排列即可一一执行 案例2 6 二次函数计算器 按钮单击事件中的代码为PrivateSubCommand1 Click Dimx yAsDoubleConsta 3Constb 5x Val Text1 Text y a x 2 b x 1y y Abs a b Text2 Text Str y EndSub 2 7 2条件结构 VisualBasic6 0支持的条件结构有 If Then If Then Else Iif SelectCase 1 用If Then结构有条件地执行一个或多个语句 单行语法和多行块语法都可以使用 If条件Then语句If条件Then 语句块 EndIf 条件 通常是比较式 但它可以是任何计算数值的表达式 VisualBasic6 0将这个值解释为True或False 一个为零的数值为False 而任何非零数值都被看做True 若 条件 为True 则VisualBasic6 0执行 Then 关键字后面的所有 语句块 2 用If Then Else块定义几个语句块 执行其中一个语句 If条件1Then 语句块1 ElseIf条件2Then 语句块2 Else 语句块n EndIfVisualBasic6 0首先测试 条件1 如果它为False VisualBasic6 0就测试 条件2 依此类推 直到找到一个为True的条件 当它找到一个为True的条件时 VisualBasic6 0就会执行相应的语句块 然后执行EndIf后面的代码 作为一个选择 可以包含Else语句块 如果前n 1个条件都是False 则VisualBasic6 0执行Else语句块 3 IIf函数用于实现一些简单的条件判断分支结构 其格式如下 IIf 条件 条件为真时的值 条件为假时的值 其作用是对条件进行测试 若条件成立 为真值 则取第一个值 即 条件为真时的值 否则取第二个值 即 条件为假时的值 4 VisualBasic6 0提供SelectCase结构替代If Then Else 从而可在多个语句块中有选择地执行其中一个 SelectCase语句的能力与If Then Else语句类似 但对多重选择的情况 SelectCase语句使代码更加易读 SelectCase在结构的开始便处理一个测试表达式并只计算一次 然后 VisualBasic6 0将表达式的值与结构中每个Case的值进行比较 如果相等 就执行与该Case相关联的语句块 SelectCasetest测试表达式 Case表达式列表1 语句块1 Case表达式列表2 语句块2 CaseElse 语句块n EndSelect 案例2 7 求数据的绝对值 按钮单击事件中的代码为PrivateSubCommand1 Click DimaAsInteger 定义变量a Val Text1 Text 将文本框中输入的值赋给变量aIfa 0Then 当a为负数时取其相反数a aEndIfText2 Text Str a EndSub按钮单击事件中的代码为PrivateSubCommand2 Click Text1 Text Text2 Text EndSub 案例2 8 闰年 确定 按钮单击事件中的代码为PrivateSubCommand1 Click DimxAsIntegerx Val Text1 Text If xMod100 Then 如果X不能被100整除If xMod4 0 Then 如果x能被4整除但不能被100整除Text2 Text yes Else 如果x不能被4和100整除Text2 Text no EndIfElseIf xMod400 0 Then 如果x能被100整除 又能被400整除Text2 Text yes ElseText2 Text no EndIfEndSub 清除 按钮单击事件中的代码为PrivateSubCommand2 Click Text1 Text Text2 Text EndSub 案例2 9 查询十二生肖 Case6Text2 Text 虎 Case7Text2 Text 兔 Case8Text2 Text 龙 Case9Text2 Text 蛇 Case10Text2 Text 马 Case11Text2 Text 羊 Case0Text2 Text 猴 EndSelectEndSub PrivateSubCommand1 Click DimyearAsInteger aAsIntegeryear Val Text1 Text a yearMod12SelectCaseaCase1Text2 Text 鸡 Case2Text2 Text 狗 Case3Text2 Text 猪 Case4Text2 Text 鼠 Case5Text2 Text 牛 ElseIfa 6ThenText2 Text 虎 ElseIfa 7ThenText2 Text 兔 ElseIfa 8ThenText2 Text 龙 ElseIfa 9ThenText2 Text 蛇 ElseIfa 10ThenText2 Text 马 ElseIfa 11ThenText2 Text 羊 ElseText2 Text 猴 EndIfEndSub 使用If Then Else结构 代码如下 PrivateSubCommand1 Click DimyearAsInteger aAsIntegeryear Val Text1 Text a yearMod12Ifa 1ThenText2 Text 鸡 ElseIfa 2ThenText2 Text 狗 ElseIfa 3ThenText2 Text 猪 ElseIfa 4ThenText2 Text 鼠 ElseIfa 5ThenText2 Text 牛 2 7 3循环结构 Do Loop For Next 1 Do Loop 用Do循环重复执行一语句块 且重复次数不定 Do Loop语句有几种演变形式 但每种都计算数值条件以决定是否继续执行 如同If Then条件必须是一个数值或者值为True 非零 或False 零 的表达式 在下面的Do Loop循环中 只要 条件 为True就执行 语句块 DoWhile 条件 语句块 Loop当VisualBasic6 0执行这个Do循环时会首先测试 条件 如果 条件 为False 零 则跳过所有语句 如果 条件 为True 非零 则VisualBasic6 0执行语句 然后退回到DoWhile语句再测试条件 因此 只要 条件 为True或非零 循环可以随意执行多次 如果 条件 一开始便为False 则不会执行语句 Do Loop语句的另一种演变形式是先执行语句 然后再在每次执行后测试 条件 这种形式保证 语句块 至少执行一次 Do 语句块 LoopWhile 条件 其他两种演变形式类似于前两个 所不同的是 只要 条件 为False而不是True 它们就执行循环 2 For Next 与Do循环不同 For循环使用一个叫做计数器的变量 每重复一次循环之后 计数器变量的值就会增加或者减少 For循环的语法如下 For循环变量 初值To终值 Step步长 语句块 Next 循环变量 参数 循环变量 初值 终值 和 步长 都是数值型的 步长 参数可正可负 如果 步长 为正 则 初值 必须小于等于 终值 否则不能执行循环内的语句 如果 步长 为负 则 初值 必须大于等于 终值 这样才能执行循环体 如果没有设置 Step 步长 则 步长 缺省值为1 每执行一个循环 循环变量 循环变量 步长 在执行For循环时 其执行过程如下 设置 循环变量 等于 初值 测试 循环变量 是否在 初值 和 终值 之间 若不是的话 则VisualBasic6 0退出循环 若是的话执行语句 执行完 语句块 语句 执行Next 循环变量 循环变量 循环变量 步长 重复步骤 步骤 案例2 10 人口估算 假设我国现有人口约为12亿 设年增长率为1 计算多少年后增加到20亿 PrivateSubForm Click DimaAsDoubleDimrAsSingleDimiAsIntegera 12r 0 01i 0DoWhilea 20 当人口数大于等于20亿时结束循环a a 1 r i i 1LoopPrinti 年后中国人口达到20亿 EndSub 使用Do LoopWhile结构 代码如下 PrivateSubForm Click DimaAsDoubleDimrAsSingleDimiAsIntegera 12r 0 01i 0Doa a 1 r i i 1LoopWhilea 20 当人口数大于等于20亿时结束循环Printi 年后中国人口达到20亿 EndSub 案例2 11 累加求和 求m 1 2 3 4 100的值 PrivateSubForm Click DimmAsInteger iAsIntegerm 0Fori 1To100 步长省略 默认为1m m iNextiPrintmEndSub 2 7 4控制结构 前面介绍了几种基本的控制语句 而应用这几种基本的控制语句 可以产生各种各样的控制结构 下面讲解几种特殊的控制结构 1 嵌套控制结构 可以把控制结构放入另一个控制结构之内 例如在For Next循环中的If Then块 一个控制结构内部包含另一个控制结构叫做嵌套 nest 在VisualBasic6 0中 控制结构的嵌套层数没有限制 按一般习惯 为了使条件分枝结构和循环结构更具可读性 总是用缩排方式书写条件分枝结构或循环结构的正文部分 2 退出控制结构 用Exit语句可以直接退出For循环 Do循环 子过程或函数过程 For循环变量 初值To终值 Step步长 语句块 ExitFor 语句块 Next 循环变量 循环变量 Do While Until 条件 语句块 ExitDo 语句块 LoopExitDo语句可以在Do循环语法的所有结构中使用 ExitFor和ExitDo非常有用 因为它有时适用于立即退出循环 而且不再执行循环中的任何进一步迭代或者语句 案例2 12 人口估算 假设我国现有人口约为12亿 设年增长率为1 计算多少年后增加到20亿 PrivateSubForm Click DimaAsDoubleDimrAsSingleDimiAsIntegera 12r 0 01Fori 0to1000a a 1 r Ifa 20ThenExitFor 当人口数大于等于20亿时跳出循环NextiPrinti 年后中国人口达到20亿 EndSub 2 8数组 在VisualBasic6 0中 把一组具有同一名字 不同下标的下标变量称为数组 其一般形式如下 S i 其中S称为数组名 i是下标 一个数组可以含有若干个下标变量 下标用来指出某个数组元素在数组中的位置 S 8 代表S数组中的第八个元素 2 8 1数组的声明 声明固定大小的数组有3种方法 用哪一种方法取决于数组应有的有效范围 建立全局数组 在模块的声明段用Public语句声明数组 建立模块或窗体数组 在模块的声明段用Private语句声明数组 建立局部数组 在过程中用Private语句声明数组 声明数组时 在数组名之后跟一个用括弧括起来的 其上界 下界不得超过Long数据类型的范围 2147483648 2147483647 例如 下列数组声明可出现在模块的声明段 DimA 4 AsInteger 同时定义了A 0 A 1 A 2 A 3 A 4 5个元素 DimS 20 AsDouble 定义了S 0 到S 20 21个元素 为建立公用数组 直接用Public取代Dim PublicA 4 AsIntegerPublicS 20 AsDouble第一个声明建立了一个有5个元素的数组 其索引号为0 4 第二个声明建立了一个有21个元素的数组 其索引号范围是0 20 为了规定下界 可以使用关键字 To 显式提供下界 为Long数据类型 DimA 1To5 AsIntegerDimS 100To120 AsString在前述声明中 A 的索引值范围为1 5 而 S 的索引值范围为100 120 有时候 可能需要知道数组的上界值和下界值 这可以通过Lbound和Ubound函数来测试 其格式如下 Lbound 数组名 返回数组索引值的上界值Ubound 数组名 返回数组索引值的下界值 2 8 2动态数组 数组长度到底应该为多大才算合适 有些情况下很难确定 这就需要数组能够在运行时具有改变大小的能力 通过使用动态数组 可以在程序中任意改变数组的长度 在VisualBasic6 0中 动态数组是最灵活 最方便的 有助于有效管理内存 1 如果希望数组为公用数组 则用Public语句声明数组 如果希望数组为模块级 则在模块级用Dim语句声明数组 如果希望数组为局部数组 则在过程中用Static或Dim语句声明数组 给数组赋一个空数组 这样就将数组声明为动态数组 例如 DimA 2 用ReDim语句分配实际的元素个数 ReDimA X 1 ReDim语句只能出现在过程中 与Dim语句 Static语句不同 ReDim语句是一个可执行语句 由于这一语句 应用程序在运行时执行一个操作 ReDim语句支持这样的语法 它与固定数组中使用的语法相同 每个ReDim语句都能改变元素数目以及上下界 2 8 3数组的基本操作 建立一个数组之后 可以对数组或数组元素进行操作 数组的基本操作包括输入 输出及复制 这些操作都是对数组进行的 此外 在VisualBasic6 0中还提供了ForEach Next语句 可用于对数组的操作 1 数组元素的引用 引用数组元素的格式是 数组名 下标 例如 Number 1 A 2 Num 0 B 4 等 2 给数组元素赋值 1 利用循环结构给数组元素赋值 例如为数组元素赋初值3 Fori 1to5A i 3Nexti 2 利用Array 函数为数组元素赋值 即把一个数据集读入某个数组 其格式为 数组变量名 Array 数组元素值 例如 StaticNumberNumber Array 1 2 3 4 5 说明 Array 函数对各元素赋值 声明的数组是动态数组或连小括号都省略的数组 并且类型只能是Varient 数组下界默认为0 可通过OptionBase语句决定 上界由Array 函数括号内的参数个数决定 也可通过UBound 函数获得 数组元素值 是需要赋给数组各元素的值 各值之间以逗号分开 Array 函数只适用于一维数组 4 数组元素的复制 1 单个数组元素可以像简单变量一样从一个数组复制到另一个数组 例如 Dimb 4 a 6 b 2 a 3 2 要复制整个数组 要使用For循环语句 3 要复制整个数组 也可以使用一条简单的赋值语句即可 例如 Dima 4 asinteger b asintegerA 0 0 a 1 5 a 2 10 a 3 13 a 4 14B a使用这种方法赋值时 必须要注意 赋值号两边的数据类型必须一致 如果赋值号左边的是一个大小固定的数组 则数组赋值出错 赋值号左边的必须是一个动态数组 赋值时系统将自动给动态数组分配内存空间 使之与右边数组大小相同 5 ForEach Next语句 ForEach Next循环与For Next循环类似 与For Next语句类似 两者都是用来执行指定重复次数的语句 但ForEach Next语句是专门用于操作数组的 它的格式如下 ForEachIn Next 说明 格式中的 成员 必须是一个变体变量 是为循环提供的 代表的是数组中的每个元素 数组名 没有括号和上下界 用ForEach Next语句可以对数组中的每个元素进行处理 它包括查询 显示和读取 它所重复的次数由数组中元素的个数决定 数组中有多少个元素 就自动重复执行多少次 案例2 13 数组复制 给数组赋初值 然后复制到另一数组中 并打印输出到窗体上 PrivateSubForm Click Dima b 定义动态数a Array 1 2 3 4 5 给数组赋初值ReDimb UBound a 给动态数组分配内存空间Fori 0ToUBound a 数组复制b i a i NextiFori 0ToUBound a 数组输出Printb i NextiEndSub 案例2 14 数组求和 求数组A中所有元素的和 PrivateSubForm Click DimsumAsIntegerDimA 1To10 AsInteger 数组定义Fori 1To10 数组赋初值A i 1Nextisum 0ForEachxInA 使用ForEach Next数组求和sum sum xNextxPrintsum 输出数组和EndSub 案例2 15 数组基本操作 OptionBase1PrivateSubForm Click Dimabc 10 AsInteger 数组定义Fori 1To10 数组赋初值为0 100内的整数abc i Int Rnd 100 NextiPrint 使用普通循环输出 Fori 1To10 使用普通循环输出数组Printabc i NextiPrintPrint 使用ForEach Next输出 ForEachxInabc 使用ForEach Next输出数组Printx NextEndSub 2 9过程 将公用的 能完成某一特定功能的程序设计成可供其他程序调用的 独立的程序段 这种程序段就称为子程序 也称为过程 调用子程序的程序段称为主程序 用过程编程有两大好处 1 过程可使程序划分成离散的逻辑单元 这样程序的结构清晰且便于调试 2 一个程序中的过程 往往不必修改或只需稍做改动 便可成为另一个程序的构件 2 9 1子过程的分类 在VisualBasic中 有两类子过程 事件过程和通用过程 1 通用过程 在VisualBasic6 0中 通用过程分为两类 即子程序过程 Sub过程 和函数过程 Function过程 通用过程必须由其他过程调用 它并不与任何特定的事件直接相联系 它完成特定的任务 通用过程由用户创建 通用过程可以存储在窗体或标准模块中 2 事件过程 当用户对一个对象发出动作时 会产生一个事件 然后自动地调用与该事件相关的事件过程 事件过程就是在响应事件时执行的程序段 默认时 事件过程是私有的 事件过程是附加在窗体和控件上的 所有的事件过程都使用相同的语法 控件事件的语法 PrivateSub控件名 事件名 参数列表 语句块EndSub窗体事件的语法 PrivateSubForm 事件名 参数列表 语句块EndSub 2 9 2Sub过程 1 定义子过程子过程的语法是 Private Public Static Sub ExitSub EndSub2 建立Sub子过程 案例2 16 矩形面积计算 使用Sub过程计算矩形的面积 输入矩形的长和宽 输出矩形的面积 在 通用 声明 中定义模块级变量 DimareaAsSingle在窗体模块中建立Sub过程 并编写Sub过程响应代码 Subrecarea rlen rwid area rlen rwidEndSub 确定 按钮单击事件中的代码为PrivateSubCommand1 Click DimaAsSingle bAsSinglea Val Text1 Text b Val Text2 Text recareaa b Callrecarea a b Text3 Text areaEndSub 清除 按钮单击事件中的代码为PrivateSubCommand2 Click Text1 Text Text2 Text Text3 Text EndSub 案例2 17 打印等腰三角形 在同一窗体建立两个过程 Triangle是通用过程 Form Click是窗体事件过程 执行程序时 单击窗体将在窗体显示两个等腰三角形 如图所示 PrivateSubtriangle StrAsString nAsInteger DimiAsInteger jAsIntegerFori lTonPrintTab 16 i Forj 1To2 i 1PrintStr NextjPrintNextiEndSub PrivateSubForm Click DimcharAsString 1 nAsIntegerchar n 5Calltriangle char n char trianglechar 3EndSub 2 9 3Function函数过程 VisualBasic6 0包含内置的或内部的函数 如Sqr Cos或Chr 此外 还可用Function语句编写自己的Function函数过程 与Sub过程一样 Function过程也是一个独立的过程 可读取参数 执行一系列语句并改变其参数的值 与子过程不同 Function过程可返回一个值到调用的过程 1 定义Function过程 函数过程的语法是 Static Public Private Function As 函数名 返回值 ExitFunction EndFunction其中 As类型 函数返回值的类型 若类型说明默认 则返回变体类型值 参数列表形式同Sub过程 在函数体内至少对函数名赋值一次 2 建立Function过程 前一节提到建立Sub过程的两种方法也可以建立Function过程 只是当用第一种方法建立时 在 添加过程 对话框的 类型 栏内应选择 函数 单选按钮 另外 两种方法中的Sub应换成Function 3 调用Function过程 通常 调用自行编写的函数过程的方法和调用VisualBasic6 0内部函数过程 例如Cos 的方法一样 即在表达式中写上它的名字 下面的语句都调用函数Txt Print10 TxtX TxtIfTxt 10ThenPrint OutofRange X 10 Txt像调用Sub过程那样 也能调用函数 下面的语句都调用同一个函数 CallSin x Sinx 案例2 18 矩形面积计算 本案例使用Function过程计算矩形面积 输入矩形的长和宽 输出矩形的面积 在窗体模块中建立Function过程 并编写过程响应代码 Functionrecarea rlen rwid AsSinglerecarea rlen rwidEndFunction 确定 按钮单击事件中的代码为PrivateSubCommand1 Click DimaAsSingle bAsSinglea Val Text1 Text b Val Text2 Text Text3 Text Str recarea a b EndSub 清空 按钮单击事件中的代码为PrivateSubCommand2 Click Text1 Text Text2 Text Text3 Text EndSub 2 9 4参数使用 参数传递可以实现调用过程和被调过程之间的信息交换 在过程的调用中 调用其他过程的过程称为主过程 被调用的过程称为子过程 当被调用的子过程要使用主过程中的数据时 就必须使用参数传递 参数分为形式参数和实际参数 形式参数 简称形参 在子过程中的参数 出现在Sub过程和Function过程中 形式参数可以是变量名和数组名 实际参数 简称实参 在主过程中的参数 过程调用时实参数据会传递给形参 在VisualBasic6 0中 实参与形参的结合有两种方法 即传址 ByRef 和传值 ByVal 其中传址又称为引用 是默认的方法 1 按值传递参数 用 ByVal 关键字指出参数是按值来传递的 按值传递参数时 传递的只是变量的副本 当调用一个过程时 系统将实参的值复制给形参 实参与形参断开了联系 被调过程中的操作是在形参自己的存储单元中进行的 当过程调用结束时 形参所占用的存储单元也同时被释放 因此在过程体内对形参的任何操作不会影响到实参 2 按地址传递参数 按地址传递参数在VisualBasic6 0中是缺省的 即不用 ByVal 关键字 按传址方式时 则是把变量在内存中的地址传递给形参 这时 形参将与原变量使用内存中的同一地址 也就是说 如果在过程中改变了这个形参的值 原变量也会随之而改变 3 选用传值还是传地址的使用规则 形参是数组 自定义类型时只能用传地址方式 若要将过程中的结果返回给主调程序 则形参必须是传址方式 这时实参必须是同类型的变量名 不能是常量或表达式 若形参不是上述中的两种情况 一般应选用传值方式 这样可增加程序的可靠性和便于调试 减少各过程间的关联 因为在过程体内对形参的改变不会影响实参 案例2 19 参数传递 PrivateSu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论