c语言程序设计课件第6章.ppt

上传人:本田雅阁 文档编号:3479689 上传时间:2019-09-01 格式:PPT 页数:50 大小:1.23MB
返回 下载 相关 举报
c语言程序设计课件第6章.ppt_第1页
第1页 / 共50页
c语言程序设计课件第6章.ppt_第2页
第2页 / 共50页
c语言程序设计课件第6章.ppt_第3页
第3页 / 共50页
c语言程序设计课件第6章.ppt_第4页
第4页 / 共50页
c语言程序设计课件第6章.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《c语言程序设计课件第6章.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计课件第6章.ppt(50页珍藏版)》请在三一文库上搜索。

1、第6章 数组,开始学习,本章要点:,6.1 子过程(Sub)的定义与调用,6.1.1 子过程的定义 Private|定义子过程的一般格式如下: Public|FriendStatic Sub 过程名(参数列表) 语句块 Exit sub 语句块 End Sub,说明: (1)子过程以Sub开头,以End Sub结束,而在Sub和End Sub之间的语句块,称为“过程体”或“子过程体”,它决定着子过程的功能; (2)Private表示只有在包含其声明的模块中的其他过程可以访问该Sub过程; (3)Public表示Sub过程是公有过程,可以在程序的任何地方调用。缺省 Private | Publi

2、c 时,系统默认为 Public; (4)Friend只能在类模块中使用;,6.1 子过程的定义与调用,(5)Static表示在调用期间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。 (6)过程名的命名规则与变量命名规则相同,在同一个模块中,同一符号名不得既用作Sub过程名,又用作Function过程名。 (7)参数列表中的参数称为形式参数(简称形参),它可以是变量名或数组名,也可以是简单变量,但不能是常量、数组元素、表达式;若有多个参数时,各参数之间用逗号分隔,形参没有具体的值。,6.1 子过程的定义与调用,形式参数格式为: B

3、yVal 变量名() As 数据类型 (8)Exit Sub语句可以提前结束过程调用,使执行立即从一个Sub过程中退出。 (9)Sub 过程不能嵌套定义,但可以嵌套调用。,6.1 子过程的定义与调用,6.1.2 建立Sub过程 建立一个子过程有如下两种方法。 1. 利用菜单“工具”|“添加过程”命令定义 具体方法如下: (1)进入代码窗口,在左侧显示对象名的下拉框中选择“通用”,在右侧显示过程的下拉框中选择“声明”,然后键入Sub及子程序名。 (2)按Enter键后,Visual Basic系统会自动加上End Sub与子程序名后的一对括号,此时便可输入子程序语句。,6.1 子过程的定义与调用

4、,2. 利用代码窗口直接定义,6.1 子过程的定义与调用,【例6-2】 打印一个平行四边形。 Private Sub triangle (Str As String, n As Integer) Dim i%, j% For i = 1 To n print spc(6-i); For j = 1 To n Print Spc(1); Str; Next j Print Next i End Sub,6.1 子过程的定义与调用,6.1.3 调用Sub过程 1. 用Call语句调用Sub过程 语法:Call 过程名(实际参数表) 说明: (1)实际参数的个数、类型和顺序,应该与被调用过程的形式参

5、数相匹配,有多个参数时,用逗号分隔。 (2)如果子程序不带参数,Call语句中子程序名后的一对括号可以省去,例如: Call Add1 这是允许的。,6.1 子过程的定义与调用,【例6-3】 编写一个名为MyDay过程输入,用户输入一个06的数字,在窗体上显示对应的星期。程序运行效果如图6-1-3所示。,6.1 子过程的定义与调用,查看代码,【例6-4】 利用过程编写求任意三角形面积的程序。 (1)界面设计,6.1 子过程的定义与调用,Private Sub area(X!, Y!, z!, s!) Dim p! p = (X + Y + z) / 2 s = Sqr(p * (p - X)

6、* (p - Y) * (p - z) End Sub,6.1 子过程的定义与调用,Private Sub cmdJs_Click() Dim a!, b!, c!, w! a = Val(txtA.Text) b = Val(txtB.Text) c = Val(txtC.Text) If a b + c Or b a + c Or c a + b Then MsgBox “输入的三条边不能构成一个三角形!“ Else Call area(a, b, c, w) txtMj.Text = Str(w) End If End Sub,2. 把过程名作为一个语句来用 语法: 过程名 实参1,实参

7、2 它与Call语句的不同点是:去掉了Call关键字和实参列表的括号。 如上例中可以改成:area a,b,c,w,6.1 子过程的定义与调用,6.2.1 函数过程的定义 定义函数过程的语法格式如下: Public|PrivateStaticFunction 函数名()As 函数名=返回值 Exit Function 函数名=返回值 End Function,6.2 函数过程的定义与调用,说明: (1)函数过程以Function开头,以End Function结束,两者之间是描述函数操作的语句块为“函数体”。 (2)函数名命名规则与变量名规则相同。但不能与系统的内部函数或其他通用子过程同名,也

8、不能与已定义的全局变量和本模块中模块级变量同名。 (3)在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的。,6.2 函数过程的定义与调用,(4)如果函数体内没有给函数名赋值,则返回对应类型的缺省值,数值函数返回0,字符串函数返回空字符串,变体型函数返回Empty。 (5)As类型:是指函数返回值的类型,若省略,则函数返回变体类型值(Variant)。 (6)Exit Function:表示退出函数过程,常常是与选择结构(If或Select Case语句)联用,即当满足一定条件时,退出函数过程。 (7)形参数列表:形参的定义与子过程完全相同。 (8)函数过程内部不

9、得再定义Sub过程或Function过程。,6.2 函数过程的定义与调用,6.2.2 建立函数过程 1. 用代码窗口直接定义 其步骤如下: (1)打开代码窗口,在“对象”列表框中选择“通用”选项。 (2)在“过程”列表框中选择“声明”选项。 (3)输入Function和函数名。 (4)按Enter键后,Visual Basic系统会自动加上End Function与函数名后的一对括号,此时便可输入函数语句。,6.2 函数过程的定义与调用,2. 利用菜单“工具”|“添加过程”命令定义 其步骤如下: (1)打开代码窗口,选择菜单“工具”|“添加过程”栏命令。打开“添加过程”对话框。 (2)在“名称

10、”文本框中输入函数名;在“类型”栏中选取“函数”定义函数过程;在“范围”栏中若选取“公有的”则定义一个公共级全局函数;若选取“私有的”,则定义一个标准模块板/窗体板的局部函数。 (3)单击“确定”按钮后,系统自动建立一个函数模板,之后就可以在其中编写函数代码。,6.2 函数过程的定义与调用,6.2.3 调用函数过程 函数过程返回一个值,这是与子过程的主要区别,其调用方式与标准函数调用一样,作为表达式中的一个部分被引用。 语法:函数名(实参列表) 注意:必须给参数加上括号,即使没有参数也不可省略括号;实际参数和形式参数对应关系的要求与子过程相同。,6.2 函数过程的定义与调用,【例6-5】 编写

11、一个程序,对输入的成绩进行评定,要求程序的评定在函数中完成,评定结果(字符串)为函数的返回值。,6.2 函数过程的定义与调用,Private Function Appraise(ByVal score%) As String Select Case score Case 0 To 59 Appraise=“重修“ Case 60 To 100 Appraise=“通过“ Case Else Appraise=“数据超出范围!“ End Select End Function Private Sub Command1_Click() Text2= Appraise(Val(Text1) End

12、Sub,6.2 函数过程的定义与调用,【例6-6】 编写计算阶乘的函数过程,当用户单击窗体时,利用下列近似公式计算 (直到最后一项小于10-7为止)。,6.2 函数过程的定义与调用,Private Sub Form_Click() Dim n! s = 1: n = 1: t = 1 Do t = 1 / Fact(n) s = s + t n = n + 1 Loop While t = 10 -7 Print s End Sub,调用函数Fact的程序代码如下: Private Function Fact(x!) Dim p! p = 1 For n = 1 To x p = p * n

13、Next Fact = p End Function,6.3.1 模块概述 Visual Basic应用程序通常由3种模块组成,即窗体模块(Form)、标准模块(Module)和类模块(Class)。,6.3 变量、过程的作用域,(1)窗体模块 窗体模块是大多数 Visual Basic 应用程序的基础。窗体模块可以包含处理事件的过程、通用过程以及变量、常数、类型和外部过程的窗体级声明。如果要在文本编辑器中观察窗体模块,则还会看到窗体及其控件的描述,包括它们的属性设置值。写入窗体模块的代码是该窗体所属的具体应用程序专用的;它也可以引用该应用程序内的其他窗体或对象。,6.3 变量、过程的作用域,

14、(2)标准模块 标准模块(文件扩展名为.BAS)是应用程序内其他模块访问的过程和声明的容器。它们可以包含变量、常数、类型、外部过程和全局过程的全局(在整个应用程序范围内有效的)声明或模块级声明。写入标准模块的代码不必绑在特定的应用程序上;如果不小心用名称引用窗体和控件,则在许多不同的应用程序中可以重用标准模块。,6.3 变量、过程的作用域,(3)类模块 在Visual Basic中类模块(文件扩展名为.CLS)是面向对象编程的基础。可在类模块中编写代码建立新对象。这些新对象可以包含自定义的属性和方法。实际上,窗体正是这样一种类模块,在其上可安放控件、可显示窗体窗口。,6.3 变量、过程的作用域

15、,6.3.2 变量的作用域 1. 局部变量 在过程内部(如Command1_Click)使用Dim或者Static关键字来声明的变量,只在声明它们的过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的局部变量而互不影响。,6.3 变量、过程的作用域,【例6-7】 编写一个程序,用来演示局部变量的作用范围和生存期。程序界面由1个窗体、2个文本框、2个命令按钮组成。,6.3 变量、过程的作用域,Private Sub cmdDim_Click() Dim n As Integer n = n + 1 txtDim.Text = n End Sub Private

16、 Sub cmdSta_Click() Static n As Integer n = n + 1 txtSta.Text = n End Sub,6.3 变量、过程的作用域,2. 窗体/模块级变量 在“通用声明”段中用Dim语句或用Private语句声明的变量,可被本窗体/模块的任何过程访问。但其他模块却不能访问该变量。 声明窗体/模块级变量要先进入程序代码窗口,单击左侧的下拉框并选择“通用”,再单击右侧下拉框并选择“声明”。例如,在“通用声明”段声明如下变量: Private s As String Dim a As Integer,b As Single,6.3 变量、过程的作用域,3.

17、 全局变量 全局变量也称工程级变量,在窗体模块或标准模块的顶部的“通用”声明段用Public或Global关键字声明,它的作用范围是整个应用程序,即可被本应用程序的任何过程或函数访问。例如: Public a As Integer Global b As single,6.3 变量、过程的作用域,【例6-8】 编写一个应用程序,其由1个窗体模块和1个标准模块组成,界面由1个窗体及其中的3个文本框、3个标签和2个命令按钮组成。,6.3 变量、过程的作用域,查看代码,6.3.3 过程的作用域 在窗体或模块中用Private定义的过程为窗体或模块级过程,只能在定义它的窗体或模块中调用。 在窗体中用P

18、ublic定义的过程,可以在其他窗体中调用,但必须在过程名前加上自定义过程所在的窗体名。 在模块中用Public定义的过程为全局级过程,可在任意窗体中调用。,6.3 变量、过程的作用域,6.4.1 形参与实参的概念 形式参数(简称形参)指出现在Sub和Function过程的定义中出现的变量名、数组名,过程被调用前,没有分配内存,其作用是说明自变量的类型和形态以及在过程中的角色。形参可以是: (1)除定长字符串变量之外的合法变量名; (2)后面跟()括号的数组名。,6.4 参数的传递,例如定义了下面一个过程: Sub Swap2(x%, y%,str$) End Sub 可以用下面的语句调用该过

19、程: Call Swap2(a%, y%, “Student “),6.4 参数的传递,过程定义:Sub Swap2( x%, y%, str$) 过程调用:Call Swap2( a%, y%, “Student“),6.4.2 按值传递参数 按值传递参数(Passed By Value)时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变.,6.4 参数的传递,在Visual Basic中,传值方式通过关键字ByVal来实现。也就是说,在定义通用过程时,如果形参前面有关键字ByVal,则该参数用传值方式传递。,【例

20、6-9】 编写一个程序,实现两个整数的相加。 Sub AddTest(ByVal m%, ByVal n%) Dim sum% sum=m+n print “a+b=“; sum End Sub Private Sub Command1_Click() a% = 10: b% = 20 Call AddTest(a, b) 传值 Print “a=“; a, “b=“; b End Sub,6.4 参数的传递,6.4.3 按地址传递参数 缺省或加“ByRef”关键字的为按地址传递参数。按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦

21、改变,相应实参的值也跟着改变。这意味着实参与形参共用同一个内存单元。,6.4 参数的传递,【例6-10】 通过下面程序观察值传递和地址传递方式的区别。 【例6-11】 阅读程序并写出程序的运行结果。,6.4 参数的传递,查看代码,查看代码,6.4 参数的传递,z=x+y,6.4.4 数组参数 VB允许把数组作为形参出现在形参表中,语法为: 形参数组名() As 数据类型 在传送数组时,除遵守参数传送的一般规则外,还应注意以下几点: (1)形参数组只能按地址传递参数,对应的实参也必须是数组,且数据类型相同。 (2)把一个数组的全部元素传送给一个过程,应将数组名分别写入形参列表中,并略去数组的上下

22、界,但括号不能省略。,6.4 参数的传递,(3)在过程中不可以用Dim语句对形参数组进行声明,否则会产生“重复声明”的错误。但在使用动态数组时,可以用ReDim语句改变形参数组的维界,重新定义数组的大小。 (4)被调过程可通过Lbound和Ubound函数确定实参数组的上、下界。 (5)实参和形参结合是按地址传递,即形参数组和实参数组共用一段内存单元。 (6)调用时形参数组m和实参数组n进行形实结合,它们共用一段内存单元。,6.4 参数的传递,【例6-12】 编写一个程序,用数组作参数,计算方阵对角元素的和。它由一个窗体模块构成,其中包括一个自定义过程和一个命令按钮的单击事件过程。,6.4 参

23、数的传递,查看代码,6.4.5 对象参数 在VB中除了用变量作参数外,还允许用窗体或控件作参数,即允许用对象作参数。在某些情况下,使用对象参数可以简化代码,提高程序效率。用对象作为参数和用其他数据类型作为参数一样,唯一的差别就是在形参表中,把形参变量的类型声明为Control或Form。,6.4 参数的传递,Function f2(x) f2=f3(x)+3 End Sub,6.5.1 过程的嵌套 在程序中调用一子过程,而在子过程中又调用另外的子过程,这种程序结构称为过程的嵌套。,6.5 过程的嵌套与递归,Sub f1(x) x=f2(xx)*3 End Sub,Sub CmdOk_Click() Call f1(y) End Sub,Function f3(x) f3=x*x End Sub,6.5.2 过程的递归 用自身的结构来描述自身称为递归,即一个过程调用过程本身,在递归调用中,一个过程执行的某一步要用到它自身的上一步或上几步的结果。例如:最典型的例子是对阶乘运算可作如下定义: n!=n*(n-1)! (n-1)!=(n-1) *(n-2)!,6.5 过程的嵌套与递归,【例6-13】 编一个计算n!(n1)的递归调用的函数。,6.5 过程的嵌套与递归,查看代码,【例6-14】 编写一个程序,求契比雪夫多项式。,6.5 过程的嵌套与递归,查看代码,本章内容结束,谢谢观看,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1