




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualBasic程序设计简明教程第一章VisualBasic程序设计概述第二章VB简单的程序设计第三章VB语言基础第四章基本的控制结构第五章数组第六章过程第七章常用控件第八章界面设计第九章文件第十章图形第十一章数据库技术 第六章过程 6 1函数过程的定义与调用6 2子过程的定义与调用6 3参数传递6 4变量 过程的作用域6 5递归6 6常用算法 三 6 7重点和难点 除了系统提供的内部函数过程和事件过程外 用户可自定义过程 Sub 保留字开始的为子过程 Function 保留字开始的为函数过程一 函数过程的定义1 引例6 1已知多边形的各条边的长度 要计算多边形的面积 计算多边形面积 可将多边形分解成若干个三角形 计算三角形面积的公式如下 定义函数过程 PublicFunctionarea x y z AsSingleDimc c 1 2 x y z area Sqr c c x c y c z EndFunction 调用函数过程 Subcommand1 click 输入若干个三角形边长S area a b c area c d e area e f g PrintsEndSub 2 函数过程的定义自定义函数过程有两种方法 1 利用 工具 菜单下的 添加过程 命令定义 生成一个函数的框架 2 利用代码窗口直接定义函数过程形式 Function函数过程名 参数列表 As类型 局部变量或常数定义语句块函数名 返回值函数过程体 ExitFunction 语句块函数名 返回值EndFunction 3 函数过程的调用函数过程的调用同标准函数调用 参与表达式运算 形式如下 函数过程名 参数列表 参数列表 称为实参 它必须与形参个数相同 位置与类型一一对应可以是同类型的常量 变量 表达式 二 子过程1 引例编写两个数交换的过程供多次调用 Swap x y 子过程的定义 主调程序调用Swap子过程 PublicSubSwap x y PrivateSubForm Click DimtDima bt xa 10 x yb 20y tCallSwap a b EndSubPrint a a b bEndSub 2子过程定义Sub子过程名 参数列表 局部变量或常数定义语句 ExitSub 语句EndSub3子过程的调用子过程名 参数列表 或Call子过程名 参数列表 4 子过程与函数过程区别 1 函数过程名有值 有类型 在函数体内至少赋值一次 子过程名无值 无类型 在子过程体内不能对子过程名赋值 2 调用时 函数过程不能作为单独的语句加以调用 必须参与表达式运算子过程调用是一句独立的语句 3 一般当过程有一个返回值 使用函数过程较直观 反之若过程无返回值 或有多个返回值 使用子过程较直观 例6 4分别编一计算某级数部分和的子过程和函数过程 并调用 级数为 精度为 三 参数传递指主调过程的实参传递给被调过程的形参 1 传址与传值 1 传址 形参得到的是实参的地址 当形参值的改变同时也改变实参的值 2 传值 形参得到的是实参的值 形参值的改变不会影响实参的值 PrivateSubCommand1 Click DimaAsInteger bAsIntegera 10 b 20CallSwap1 a b Print A1 a B1 ba 10 b 20CallSwap2 a b Print A2 a B2 bEndSub PublicSubSwap2 xAsInteger yAsInteger DimtAsIntegert x x y y tEndSub PublicSubSwap1 ByValxAsInteger ByValyAsInteger DimtAsIntegert x x y y tEndSub 例6 5两个变量的交换 2 数组参数的传递当参数是数组通过传址方式进行传递 注意 在实参和形参中写数组名 忽略维数的定义 但圆括号不能省 被调过程可通过Lbound和Ubound函数确定实参数组的下 上界 Lbound和Ubound函数的形式如下 L U bound 数组名 维数 其中 维数指明要测试的是第几维的下标值 缺省是一维数组 例6 7编一函数tim 求任意一维数组中各元素之积 调用tim 求和Functiontim a AsInteger Dimt i t 1Fori Lbound a ToUbound a t t a i Nextitim tEndFunction 调用 SubCommand1 Click Dima 1To5 b 3To8 t1 tim a t2 tim b Printt1 t2EndSub 例6 7编一函数tim 求任意一维数组中各元素之积 调用tim 求和Functiontim a AsInteger Dimt i t 1Fori Lbound a ToUbound a t t a i Nextitim tEndFunction 调用 SubCommand1 Click Dima 1To5 b 3To8 t1 tim a t2 tim b Printt1 t2EndSub 四 变量 过程的作用域作用域 变量 过程随所处的位置不同 可被访问的范围 1 过程的作用域 2 变量的作用域 3 静态变量变量声明 Dim声明 随过程的调用而分配存贮单元 变量初始化 过程体结束 变量的内容自动消失 存贮单元释放 Static声明 每次调用过程 变量保持原来的值 声明形式 Static变量名 AS类型 StaticFunction函数过程名 参数列表 As类型 StaticSub子过程名 参数列表 过程名前加Static 表示该过程内的局部变量都是静态变量 例6 9PrivateSubForm Click Dimi isum Fori 1To5isum sum i Printisum NextiEndSub PrivateFunctionsum nAsInteger DimjAsInteger 每调用一次sum函数 j变量初始化为0j j nsum jEndFunctionStaticjAsInteger 结果 1 2 3 4 5 1 递归的概念用自身的结构来描述自身就称为 递归 五 递归 例 对阶乘的定义 2 递归过程过程在自身定义的内部调用自己 例6 10编fac n n 的递归函数 SubCommand1 Click Print fac 4 fac 4 EndSub Functionfac nAsInteger AsDoubleIfn 1Thenfac 1Elsefac n fac n 1 EndIfEndFunction 结果 fac 4 24 函数赋值时使用函数名 例6 11利用递归求最大公约数 PublicFunctiongcd mAsInteger nAsInteger AsIntegerIf mModn 0Thengcd nElsegcd gcd n mModn EndIfEndFunction PrivateSubForm Click Printgcd 10 4 EndSub PublicSubSearch a AsVariant ByValkeyAsVariant index Dimi Fori LBound a ToUBound a Ifkey a i Then 找到 元素的下标在index中 结束查找 index iExitSubEndIfNextiindex 1 找不到 index形参的值为 1EndSub 3 查找 1 顺序查找例6 15 顺序查找根据查找的关键值与数组中的元素逐一比较 数组可无序 平均查找次数n 2 6 6常用算法 三 PrivateSubForm Click b Array 1 3 5 7 9 2 4 k Val InputBox 指定数据1 5 7 9 CallSearch b k n PrintnEndSub Keya mid low mid 1查找区域缩小一半 继续 直到找到或查找区域中无元素 例6 16本例用递归实现Subbirsearch a low high key index 2 二分法查找要查找的数组必须有序 思想 要查找的关键值Key同数组的中间mid项元素比较 444 Key Subbirsearch a ByVallow ByValhigh ByValkey index DimmidAsIntegermid low high 2 取查找区间的中点Ifa mid keyThenindex mid 查找到 返回查找到的下标ExitSubElseIflow highThen 二分法查找区间无元素 查找不到index 1ExitSubEndIfIfkey a mid Then 查找区间在上半部high mid 1Elselow mid 1 查找区间在下半部EndIfCallbirsearch a low high key index 递归调用查找函数EndSub 主调程序调用 PrivateSubCommand1 Click Dimb AsVariantb Array 5 13 19 21 37 56 64 75 80 88 92 Callbirsearch b LBound b UBound b 21 n PrintnEndSub 4 排序选择法 冒泡法 插入法排序等 前两种排序欲排序的数据全部输入后 再进行排序 插入法排序 每输入一项 马上插入到数组应在的位置 数组始终有序 例6 17实现的步骤 1 输入欲排序的数据项x 在数组a中找x应所处的位置j 2 从数组的最后一个元素开始到下标j依次往后移 使j位置空出 3 将x放入位置j处 一个数据插入完成 4 有若干个数重复 1 3 Subinsert a AsSingle ByValx Dimi j j 1DoWhileja j 查找x应插入的位置jj j 1LoopFori n 1TojStep 1 n j个元素往右移a i 1 a i Nextia j x x插入数组中的第i个位置EndSub 6 数值积分例6 19有矩形法 梯形法 抛物线法 又称辛卜生法 等 梯形法积分的思想是 将积分区间 a b n等分 小区间的长度为 第i块小矩形的近似面积为 整个积分的结果为这n块小面积的累加 即 PublicFunctiontrapez ByVala ByValb ByValn AsSingleDimsum h x h b a nsum f a f b 2Fori 1Ton 1x a i hsum sum f x Nextitrapez sum hEndFunction PublicFunctionf ByValx f x x x 2 x 5 对不同的被积函数在此作对应的改动EndFunction PrivateSubCommand1 Click Printtrapez 1 3 30 EndSub PrivateSubPicture1 Click Picture1 Scale 0 40 4 0 Forx 1To3Step0 01y x x x 2 x 5Picture1 Line x y x 0 NextxEndSub 重点和难点 1 确定自定义的过程是子过程还是函数过程函数过程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论