1 / 29

第 6 章 函数和过程

第 6 章 函数和过程. 主要内容 函数和过程基本概念 函数和过程的使用 参数传递 模块与作用域. 函数. VB.NET 系统提供好的各种数学、字符串处理等函数 L = Len(S) 返回字符串 S 的长度. 用户自定义函数. [ Public|Private] Function 函数名 ([ 参数表 ]) [As 类型 ] 语句块 ….. [ 函数名=返回值 ] [Exit Function] 语句块 ….. 函数名=返回值 End Function. 用户自定义函数 (cont.).

december
Download Presentation

第 6 章 函数和过程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 函数和过程 • 主要内容 • 函数和过程基本概念 • 函数和过程的使用 • 参数传递 • 模块与作用域 东华大学计算机学院 2008-9-15

  2. 函数 • VB.NET系统提供好的各种数学、字符串处理等函数 • L = Len(S) • 返回字符串S的长度 东华大学计算机学院 2008-9-15

  3. 用户自定义函数 [Public|Private] Function 函数名 ([参数表]) [As 类型] 语句块 ….. [函数名=返回值] [Exit Function] 语句块 ….. 函数名=返回值 End Function 东华大学计算机学院 2008-9-15

  4. 用户自定义函数 (cont.) • 参数表使用 ByVal或 ByRef 定义 • 例如: • ByVal m As Integer • ByRef n As Single • ByVal a() as Integer 东华大学计算机学院 2008-9-15

  5. 阶乘函数 (例6-1) • Function Factorial(ByVal n As Integer) As Long '自定义函数过程 • Dim i As Integer, nn As Long • nn = 1 '阶乘初始值 • If n < 0 Then '不允许负值 • Exit Function • End If • For i = 1 To n • nn = nn * i '计算阶乘 • Next i • Factorial = nn '返回值 • End Function 东华大学计算机学院 2008-9-15

  6. 阶乘函数调用 • TextBox3.Text = • Factorial(n) / (Factorial(m) * Factorial(n - m)) • 注:这里的n, m, n-m为实在参数,将真实值传给函数定义时的形式参数n,参数传递的方式是传值。 东华大学计算机学院 2008-9-15

  7. 求最大公约数函数 (例6-2) • Function MCD(ByVal a As Integer, ByVal b As Integer) As Integer • Dim t As Integer, r As Integer • If a < b Then '若a<b,则将a、b中的值交互,保证a>b • t = a : a = b : b = t • End If • r = a Mod b 'r为a、b相除的余数 • Do While r <> 0 • a = b : b = r : r = a Mod b • Loop • MCD = b '求出的最大公约数,赋值给函数名返回 • End Function 东华大学计算机学院 2008-9-15

  8. 求最大公约数程序流程 东华大学计算机学院 2008-9-15

  9. 子过程 • 在VB.NET中,过程与函数很类似,主要的区别是过程只完成特定的功能,并不返回值 • 事件过程用于事件的响应,由系统自动生成;通用过程由用户自定义 东华大学计算机学院 2008-9-15

  10. 用户自定义过程 [Public|Private] Sub 过程名 ([参数表]) 局部变量和常量说明 语句块 ….. [Exit Sub] 语句块 ….. End Sub 东华大学计算机学院 2008-9-15

  11. 子过程调用 • Call 过程名([实在参数表]),或 • 过程名([实在参数表]) 东华大学计算机学院 2008-9-15

  12. 阶乘子过程 (例6-3) • Sub Factorial(ByVal n As Integer, ByRef nn As Long) ‘自定义子过程 • Dim i As Integer • nn = 1 '阶乘初始值 • If n < 0 Then '不允许负值 • Exit Function • End If • For i = 1 To n • nn = nn * i '计算阶乘 • Next i • End Function 东华大学计算机学院 2008-9-15

  13. 阶乘子过程调用 • Dim c As Long, m As Integer • m=6 • Call Factorial(m,c) • 注:这里形参nn的传递方式是ByRef,因此可以把计算后的结果值带到主程序中 东华大学计算机学院 2008-9-15

  14. 统计单词平均长度 (例6-4) • Sub long_string (ByVal s As String, ByRef m As Integer) • Dim k, i As Integer, t As String • k = Len(s) '求字符串的总长度 • For i = 1 To k • t = Mid(s, i, 1) '取字符串中第i个字符 • If t <> " " Then • m = m + 1 • End If • Next • End Sub 东华大学计算机学院 2008-9-15

  15. 统计单词平均长度 (cont.) • Sub num_word(ByVal s As String, ByRef n As Integer) • Dim i As Integer • s = Trim(s) '去除字符串s两端的空格 • i = InStr(s, " ") 'i返回字符串s中第一次出现空格的位置 • Do While i > 0 '当字符串中还有空格 • n = n + 1 '单词个数增加1 • s = Mid(s, i + 1) '取空格后面的子字符串作为新的字符串 • s = LTrim(s) '去除这个新字符串中左边的空格 • i = InStr(s, " ") • Loop • n = n + 1 '加上最后一个单词 • End Sub 东华大学计算机学院 2008-9-15

  16. 统计单词平均长度-主程序 • Private Sub Button1_Click(......) Handles Button1.Click • Dim l As Integer, n As Integer, s As String, evg As Single • s = TextBox1.Text • Call long_string(s, l) ‘调用子程序long_string求字符串中字符个数 • Call num_word(s, n) ‘调用子程序num_word求字符串中单词的个数 • evg = l/ n '求单词的平均长度 • TextBox2.Text = evg '将平均长度值显示在TextBox2中 • End Sub 东华大学计算机学院 2008-9-15

  17. 形参和实参 • 形参是在函数或过程中定义的参数 • 实参是在主程序中定义的常量、变量、表达式或数组等 • 实参和形参必须在顺序和类型上完全匹配 东华大学计算机学院 2008-9-15

  18. 参数传递 东华大学计算机学院 2008-9-15

  19. 参数传递 (cont.) 例: 两个变量的交换 Sub Swap1(ByVal x%, ByVal y%) t% = x: x = y: y = t End Sub Private Sub Command1_Click() a% = 10: b% = 20: Swap1 a, b '传值 Print "A1="; a, "B1="; b a% = 10: b% = 20: Swap2 a, b '传地址 Print "A2="; a, "B2="; b End Sub Sub Swap2(x%, y%) t% = x: x = y: y = t End Sub 东华大学计算机学院 2008-9-15

  20. 例6-5 • Function pd(ByVal x As Integer, ByRef y As Integer) As Integer • Dim m As Integer, n As Integer • m = x + y • x = x + 1 • y = y + 1 • n = x - y • TextBox1.Text = TextBox1.Text & "m=" & m & " x=" & x & " y=" & y & " n=" & n • TextBox1.Text = TextBox1.Text & vbCrLf • pd = n • End Function 东华大学计算机学院 2008-9-15

  21. 例6-5 (cont.) • Private Sub Button1_Click(......) Handles Button1.Click • Dim a As Integer, b As Integer, c As Integer, d As Integer • TextBox1.Text = "" • a = 2 ; b = 3; c = 0 • d = pd(a, b) • TextBox1.Text = TextBox1.Text & "a=" & a & " b=" & b & vbCrLf • d = pd(a, b) • TextBox1.Text = TextBox1.Text & "a=" & a & " b=" & b & vbCrLf • d = pd(a + b, c) • TextBox1.Text = TextBox1.Text & "a=" & a & " b=" & b & vbCrLf • End Sub 东华大学计算机学院 2008-9-15

  22. 数组参数的传递 (例6-5) • Sub Sort(ByRef a() As Integer) • Dim i, j, iMin, t As Integer • For i = 0 To UBound(a) • iMin = i '暂时假设待排序数中a(i)最小 • For j = i + 1 To UBound(a) • If a(iMin) > a(j) Then '待排序数和暂时最小数比较 • iMin = j '确定新的最小数下标 • End If • Next j • t = a(i) '将a(i)和待排序数中最小数交换 • a(i) = a(iMin) • a(iMin) = t • Next i • End Sub 东华大学计算机学院 2008-9-15

  23. 数组参数的传递 (cont.) • Private Sub Button1_Click(……) Handles Button1.Click • Dim i As Integer • Dim a() As Integer = {4, 8, 2, 6, 5, 7} '待排序数 • For i = 0 To UBound(a) • TextBox1.Text = TextBox1.Text & a(i) & Space(1) '显示待排序数 • Next i • Call Sort(a) • For i = 0 To UBound(a) • TextBox2.Text = TextBox2.Text & a(i) & Space(1) '显示排好序的数 • Next i • End Sub 东华大学计算机学院 2008-9-15

  24. 标准模块 • 标准模块主要用于定义整个项目所需要的公共变量、常量、函数和子过程等 • 定义格式 • Module 模块名 • … • End Module 东华大学计算机学院 2008-9-15

  25. 标准模块应用 • Module Module1 • Function MCD(ByVal a As Integer, ByVal b As Integer) As Integer • Dim t As Integer, r As Integer • If a < b Then '若a<b,则将a,b中的值交互,保证a>b • t = a : a = b : b = t • End If • r = a Mod b 'r为a、b相除的余数 • Do While r <> 0 • a = b : b = r : r = a Mod b • Loop • MCD = b '最大公约数 • End Function • End Module 东华大学计算机学院 2008-9-15

  26. 变量的作用域 东华大学计算机学院 2008-9-15

  27. 变量的作用域 (cont.) 东华大学计算机学院 2008-9-15

  28. 过程的作用域 • 模块级过程 (Private) • 全局过程 (Public) 东华大学计算机学院 2008-9-15

  29. 结束 谢谢听讲! 东华大学计算机学院 2008-9-15

More Related