子程序与函数过程.ppt_第1页
子程序与函数过程.ppt_第2页
子程序与函数过程.ppt_第3页
子程序与函数过程.ppt_第4页
子程序与函数过程.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第6章 子程序与函数过程,本章内容,子程序过程 (2) 函数过程 (4) 过程之间参数传递 (3) 变量的作用域 (1),讲课次序,子程序过程的定义,定义格式: StaticPrivate|PublicSub子程序名 (形参列表) 语句组1 Exit Sub 语句组2 End Sub,ByValByRef变量名( )As 类型,提前结束子程序过程,只能被本窗体中的过程调用,能被程序中的所有过程调用。在模块中定义,调用时直接用过程名;在窗体中定义,调用须加该过程所在窗体名,子程序过程的定义,【实例6.1】交换两个整型变量值的子过程 Private Sub Swap( X As Integer, Y As Integer) Dim temp As Integer Temp=X : X=Y : Y=Temp End Sub 测试:参数的传递过程值传递和地址传递,用下过程。,Private Sub Command1_Click() Dim a As Integer, b As Integer a = 3 b = 5 Call Swap(a, b) Print a, b End Sub,子程序过程的建立,【工具】|【添加过程】,子程序过程的调用,子程序过程的调用格式 Call 过程名( 实际参数) 过程名 实际参数 ,必须有确定值 个数、类型必须与形参一一对应,子程序过程的调用,【实例6.2】试编写一个无参数的sub子过程Formmove( ) ,它的功能是将当前正在运行的窗体移动到屏幕的中央。,代码编写,Fommove( ) 子过程代码 Public Sub formmove() Form1.Top = (Screen.Height - Form1.Height) / 2 Form1.Left = (Screen.Width - Form1.Width) / 2 End Sub,代码编写,移动按钮代码 Private Sub Command1_Click( ) Call Formmove End sub,函数过程,函数过程的定义 函数过程的调用,函数过程的定义,函数过程的一般定义格式,StaticPrivate|Public Function 函数名 ( 形参列表 ) As 类型 语句组1 函数名返回值 Exit Function 语句组2 函数名返回值 End Function,必有该语句,提前结束函数,函数过程的调用,函数过程的调用格式 变量名 = 函数名( 实际参数 ) 注意: 必须有确定值 个数、类型必须与形参一一对应,例:定义求an值的函数。 Public Function an(a As Integer, n As Integer) x = 1 For i = 1 To n x = x * a Next i an = x End Function,求最大公约数及最小公倍数,Private Function Gcd(m As Integer, n As Integer) Dim r As Integer, t As Integer If m 0) Gcd = m End Function,m * n / Gcd(m), (n),函数过程的调用,【实例6-3】 编写一个函数过程,统计一串字符中某个字符的出现次数,通过调用函数过程实现。,代码编写,代码编写,函数过程代码 Public Function statistic(str$, s$) As Integer Dim k%, i% k = 0 For i = 1 To Len(str) If Mid(str, i, 1) = s Then k = k + 1 End If Next i statistic = k End Function,代码编写,统计按钮代码 Private Sub cmdstat_Click() Dim c1$, c2$, m% c1 = txtin.Text c2 = txtsearch.Text m = statistic(c1, c2) txtcount.Text = m End Sub,函数过程的调用,【实例6-4】某班有m名学生,要选派n名学生参加合唱队,计算有多少种选派方法。,编写代码,计算阶乘的函数过程 Public Function factorial(ByVal n As Integer) As Double Dim i As Integer, t As Double t = 1 For i = 1 To n t = t * i Next i factorial = t End Function,编写代码,计算按钮代码: Private Sub cmdcount_Click() Dim m As Integer, n As Integer, c As Double m = Val(txtstudent.Text) n = Val(txtneed.Text) c = factorial(m) / (factorial(n) * factorial(m - n) lblways.Caption = Str(c) End Sub,过程之间参数的传递,传地址与传值 传值方式 在形参前加关键字ByVal,指定该参数是传值方式例 如:Private Sub w(ByVal n%) 传地址方式 在形参前加关键字ByRef或缺省关键字,则指定该参数是传地址方式。 例如:Private Sub w(ByRef x!,y! ) 注意: 按传地址方式传递参数时,要求实参必须是变量名,过程之间参数的传递,【实例6.5】 编写 交换两个数的子过程,s1用传值方式,s2用传地址方式,区分两个过程分别调用后的结果。,代码编写,s1用传值方式 Private Sub S1(ByVal x As Integer, ByVal y As Integer) Dim temp As Integer temp = x: x = y: y = temp End Sub,代码编写,s2用传地址方式 Private Sub S2(ByRef x As Integer, y As Integer) Dim temp As Integer temp = x: x = y: y = temp End Sub,代码编写,调用代码: Private Sub Command1_Click() Dim a As Integer, b As Integer a = 20: b = 30 Print “调用前a 和b的值为:“; Tab(30); a; b Call S1(a, b) Print “调用s1后a 和 b 的值为:“; Tab(30); a; b a = 20: b = 30 Call S2(a, b) Print “调用s2后 a和b 的值为:“; Tab(30); a; b End Sub,变量的作用域,在本过程内使用的变量 在本窗体内使用的变量 在所有窗体内使用的变量,变量,局部变量,窗体/模块级变量,全局变量,动态变量,Static,静态变量,Dim,窗体或标准模块的“通用”声明段中用Dim或Private关键字声明的变量,在窗体或标准模块中“通用”“声明”段用public关键字声明;引用其它窗体模块中声明的public变量,需要加窗体名。,变量的作用域,例:分别将k定义为不同级别的变量,观察单击命令按钮事件过程中K值的变化情况。 Option explicit Private Sub Command1_Click() k = k + 1 Print k End Sub 注意:引用其它窗体模块中声明的public变量,需要加窗体名。,变量的作用域,【实例6-6】 模块级变量与局部变量应用实例 。,变量的作用域,Option Explicit Dim x% Private Sub Form_click() x = 33 Print “x=“; x Call li1 Call li2 print x1 End Sub,或工具|选项,要求声明变量,变量的作用域,Private Sub li1() Dim x1% x1 = 11 Print “x1=“; x1, Print “x=“; x End Sub,变量的作用域,Private Sub li2() Dim x2% x2 = 22 Print “x2=“; x2, Print “x=“; x End Sub,静态变量,声明形式: Static 变量名 AS 类型,案例打字测试游戏,在文本框内随机产生n个小写英文字母作为范文;当焦点进入打字区时开始计时;用户输入n个字母时计时结束,禁止向打字区再输入内容,并统计打字的速度和正确率。,编写代码,测试代码 Option Explicit Dim n%,t As Date Private Sub command1_click() Dim i%, str$ Randomize n = Int( Rnd * 31) +10 For i = 1 To n str = Chr$(Int(Rnd * 26) + 97) 随机产生小写字母 Text1.Text = Text1.Text & str Next i End Sub,编写代码,开始时间 Private Sub text2_gotfocus() t = Time Text3.Text = Time End Sub,编写代码,打字速度 Private Sub text2_keypress(keyascii As Integer) Dim dui%, cuo%, i% If Len(Text2) = n Then 键入满n个字母 Text4.Text = Time Text5.Text = str(Int(n / DateDiff(“s“, t, Time) * 100 + 0.5) / 100) & “字/秒“ Text2.Locked = True,四舍五入保留两位小数,dateDiff函数 形式:dateDiff(要间隔日期形式,日期1,日期2) 作用:两个指定日期按日期形式求相差的日期。 日期形式: yyyy(年),q(季),m(月),y(一年的天数),d(日),w(一周的日数),ww(星期),h(时),n(分),s(秒),编写代码,准确率 For i = 1 To n If Mid(Text1, i, 1) = Mid(Text2, i, 1) Then dui = dui + 1 Else cuo = cuo + 1 End If Next i Text6.Text = Int(dui / n * 10000 + 0.5) / 100 & “%“ 显示准确率 End If End Sub,Question?,下列程序代码在单击命令按钮时的输出结果 Sub SS(ByVal X, ByRef Y ,Z) X = X + 1 Y = Y + 1 Z = Z + 1 End Sub Private Sub Command1_Click() a= 1: b = 2: c = 3 Call SS(a,b,c) Print a,b,c End Sub,1 3 4,单击窗体,执行以下程序,窗体第一行的输出结果为_,第二行的输出结果为_。 Option Explicit Private x As Integer: Private y As Integer Private Sub Form_Click() x = 1: y =1 test Print x; y End Sub Sub test() Dim y As Integer Print x; y x = 2: y = 2 End Sub,1 0 2 1,Private Sub Command1_Click() Dim x As Integer, y As Integer Dim n As Integer,

温馨提示

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

评论

0/150

提交评论