第六章 过 程 6.1 函数过程的定义与调用 6.2 子过程的定义与调用 6.3 参数传递 6.4 递 归 6.5 综合应用.

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

第八章 子程序和函数 8.1 子程序概述 在VB5.0/6.0中,除了系统提供的内部函数过程和事件过程外,用户可自定义过程下列四种过程:
程式語言(I)- Visual Basic 6.0 第 9 章 結構化程式設計
实训十 子 过 程 一、实训目的 二、实训内容 1、通用过程 【实训要求】 1、掌握通用过程的定义和调用方法。
第7章 过 程 本章要点: Sub过程 Function过程 参数传递.
Oracle数据库 Oracle 子程序.
高等医药院校药学类第三轮规划教材——大学计算机基础
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
VB程序设计语言 主讲教师:王 杨.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
Visual Basic程序设计 第八章 过程 -子程序和函数
过程 第 7 章.
第4章 程序控制结构与算法基础.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
高等学校计算机基础教育教材 Visual Basic 6.0 程序设计 上海中医药大学现代教育技术中心 计算机教学部.
计算机程序设计强化复习 Visual Basic 6.0.
走进编程 程序的顺序结构(二).
辅导课程六.
3.5 用递归法解决问题 黄学鸿.
第12章 VBA模块设计.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第8章 过程 郭清溥.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
VB程序设计语言 主讲教师:王 杨.
1.2 MATLAB变量表达式与数据格式 MATLAB变量与表达式 MATLAB的数据显示格式
第 8 章 过程.
VB程序设计语言 主讲教师:王 杨.
Visual Basic程序设计.
第二章 Java语言基础.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
实验九 函数嵌套、函数参数 第27讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
VB程序设计语言 主讲教师:王 杨.
程式語言(I)- Visual Basic 6.0 第 8 章 模組化程式設計I-副程式與自定函數.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
第六章 过程 Visual Basic 程序设计.
SOA – Experiment 2: Query Classification Web Service
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
现代信息技术 微电子技术 计算机技术 传感技术 通信技术 处理、存储信息的技术 传感、采集技术 传递信息的技术
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
第二章、第三章错题分析.
姚金宇 MIT SCHEME 使用说明 姚金宇
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
用穷举法设计程序 南京师范大学 教育技术系 倪佳慧
3.16 枚举算法及其程序实现 ——数组的作用.
1位选手参加了歌唱比赛,评委们的评分如下:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
1、过程概述 2、函数过程 3、子过程 4、过程的使用 5、传递参数 6、过程的嵌套
复习 标签(label)、文本框(text)控件 按钮:点击事件
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
鸡兔同笼(续) ——选择结构.
插入排序的正确性证明 以及各种改进方法.
第7章 过 程 Visual Basic中过程分为两种,一种是事件过程,例如前面涉及到的按钮的Click事件过程、窗体的Load事件过程等。另一种是通用过程,它主要用来让事件过程或其他通用过程调用。本章主要介绍的就是这种过程。
程序调试与错误处理.
顺序结构程序设计 ——关于“字符串”和数值.
第二次课后作业答案 函数式编程和逻辑式编程
Presentation transcript:

第六章 过 程 6.1 函数过程的定义与调用 6.2 子过程的定义与调用 6.3 参数传递 6.4 递 归 6.5 综合应用

例:已知 的值。 4 7 ,求 C m!(n - m)! n! C m n = k1 = 1: k2 = 1: k3 = 1 For i = 1 To n k1 = k1 * i Next i For i = 1 To m k2 = k2 * i For i = 1 To n - m k3 = k3 * i s = k1 / k2 / k3 本章目录

把一项复杂的工作分成简单的功能块,分而治之 过程: 完成一段独立功能,可供其他过程使用。 过程的引入: 使同类的操作不重复编写,写一次多次用 把一项复杂的工作分成简单的功能块,分而治之 过程: 完成一段独立功能,可供其他过程使用。 调用过程: 调用Sprg1 调用Sprg2 子过程: Sprg1 子过程: Sprg2 本章目录

常用过程分类: 内部函数(标准函数) 自定义函数过程 Function过程 事件过程 自定义子过程 Sub过程 1)过程是一段程序代码,是相对独立的逻辑模块。 2)一个完整的VB应用程序由若干过程和模块组成。 Sub子过程:完成一定的操作和功能,无返回值。 Function函数过程:完成一定的操作和功能,并且可将数据处理的结果返回。 本章目录

6.1 函数过程的定义和调用 例6.1:已知多边形各条边的长度,计算多边形的面积。 计算多边形面积,可将多边形分解成若干个三角形。计算三角形面积的公式如下: 本章目录

6.1 函数过程的定义和调用 定义函数过程area: Function area(x!, y!, z!) As Single Dim c! c = 1 / 2 * (x + y + z) area = Sqrt(c * (c - x) * (c - y) * (c - z)) End Function Sub command1_click() … 输入若干个三角形边长 S=area(a,b,c)+area(c,d,e)+area(e,f,g) Msgbox("面积=" & S) End Sub 调用函数过程 本章目录

6.1 函数过程的定义和调用 6.1.1 函数过程的定义 在窗体、模块等的代码窗口把插入点放在所有现有过程之外,直接输入函数过程。定义函数过程的形式如下: [Public |Private] Function 函数名(形参)[As 类型] 变量声明 语句块 函数名=表达式 End Function 本章目录

6.1 函数过程的定义和调用 Public 全局函数过程,可被程序任何模块调用 Private 仅供本模块中的其它过程调用 形参(或称哑元) 只能是变量或数组名( ),仅表示参数的个数和类型,无值。 例6.2 编写一个求最大公约数的函数过程 。 Function gcd( m%, n%) As Integer If m < n Then t = m: m = n: n = t Do while n<>0 r = m Mod n : m = n: n = r Loop gcd = m End Function 本章目录

6.1 函数过程的定义和调用 6.1.2 函数过程的调用 调用形式:函数过程名([参数列表]) 参数列表(称为实参或实元):必须与形参个数相同,位置与类型一一对应。可以是同类型的常量、变量、表达式。 本章目录

6.1 函数过程的定义和调用 Sub Form_Click() Dim x%, y%, z% x = 124: y = 24 z = gcd(x, y) MsgBox("最大公约数是" & z) End Sub Function gcd( m%, n%) As Integer If m < n Then t = m: m = n: n = t Do while n<>0 r = m Mod n : m = n: n = r Loop gcd = m End Function 程序运行流程 本章目录

6.1 函数过程的定义和调用 例6.3 编一函数,统计字符串中汉字的个数。 分析:在VB中,字符以Unicode码存放,每个汉字和英文是一个字符、占有两个字节,区别是汉字的机内码最高位为1,若利用Asc函数求其码值为小于0(以补码表示),而西文字符的最高位为0,Asc函数求其码值为大于0。 本章目录

6.2 子过程的定义与调用 6.2.1 引例 以下情况使用函数过程存在不便: 不是为了获得某个函数值,而是为了某种功能的处理。 6.2 子过程的定义与调用 6.2.1 引例 以下情况使用函数过程存在不便: 不是为了获得某个函数值,而是为了某种功能的处理。 要获得多个结果。 VB中提供了使用更灵活的子过程。 例6.4编一过程,对Label1控件进行移动,通过参数Tag的 值(1或-1)决定移动方向。 该过程不是为了计算获得某个结果,而是进行对控件移动的处理。 本章目录

6.2 子过程的定义与调用 6.2.2 子过程的定义 子过程定义的方法类似函数过程,形式如下: 局部变量或常数定义 语句 6.2 子过程的定义与调用 6.2.2 子过程的定义 子过程定义的方法类似函数过程,形式如下: [Public |Private] Sub 子过程名 ([参数列表]) 局部变量或常数定义 语句 [Exit Sub] End Sub 子过程名、形参同函数过程中对应项的规定,当无形参时不要括号。 本章目录

6.2 子过程的定义与调用 1. 子过程与函数过程的区别 6.2 子过程的定义与调用 1. 子过程与函数过程的区别 把某功能定义为函数过程还是子过程,没有严格的规定。一般若程序有一个返回值时,函数过程直观;当有多个返回值时,习惯用子过程。 函数过程必须有返回值,函数名有类型。子过程名没有值,也没有类型,不能在子过程体内对子过程名赋值。 本章目录

6.2 子过程的定义与调用 2.参数问题 形参是过程与主调程序交互的接口,从主调程序获得初值,或将计算结果返回给主调程序; 6.2 子过程的定义与调用 2.参数问题 形参是过程与主调程序交互的接口,从主调程序获得初值,或将计算结果返回给主调程序; 不要将过程中所有使用过的变量均作为形参; 形参没有具体的值,只代表了参数的个数、位置、类型; 形参只能是简单变量、数组名,不能是常量、数组元素、表达式。 本章目录

6.2 子过程的定义与调用 例6.5:找定冠词的ProcThe子过程。 6.2 子过程的定义与调用 例6.5:找定冠词的ProcThe子过程。 Sub ProcThe(ByVal s$, ByRef Count%) …… End Sub Call ProcThe(Text1.Text, n ) 本章目录

6.2 子过程的定义与调用 6.2.3 子过程调用 子过程的调用是一句独立的调用语句,有两种形式: Call 子过程名[(实参列表)] 6.2 子过程的定义与调用 6.2.3 子过程调用 子过程的调用是一句独立的调用语句,有两种形式: Call 子过程名[(实参列表)] 子过程名 ([实参列表]) 用Call关键字时,若有实参,则实参必须用圆括号括起,无实参圆括号省略。 注意:若实参要获得子过程的返回值,则实参只能是变量(与形参同类型的简单变量、数组名、结构类型),不能是常量、表达式,也不能是控件名。 本章目录

6.2 子过程的定义与调用 例6.6 分别编一个统计字符串S中定冠词The出现个数的子过程和函数过程,并分别调用。 6.2 子过程的定义与调用 例6.6 分别编一个统计字符串S中定冠词The出现个数的子过程和函数过程,并分别调用。 处理方法:利用InStr函数反复在字符串S找The子串。 分析:当定义好函数过程后,要改为子过程,只要将函数过程的返回结果作为子过程的形参,即在子过程中增加一个参数。 本章目录

6.3 参数传递 6.3.1 形参与实参 在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。 6.3.1 形参与实参 在参数传递中,一般是按位置传送,按实参的位置次序与形参的位置次序对应传送,与参数名没有关系。 按位置传送是最常用的参数传递方法,如在调用标准函数时,用户根本不知道形参名,只要关心形参的个数、类型、位置,例如Mid函数形式: Mid(字符串$,起始位%,取几位%) 调用语句:s=Mid("This is VB" ,9,2) 则s中的结果为“VB”。 本章目录

6.3 参数传递 6.3.2 传地址与传值 实参与形参的结合有传地址(ByRef)和传值(ByVal)两种方法。 6.3.2 传地址与传值 缺省关键字 实参与形参的结合有传地址(ByRef)和传值(ByVal)两种方法。 传地址方式 当调用一个过程时,它将实参的地址传递给形参。因此在被调过程体中对形参的任何操作都变成了对相应实参的操作,实参的值就会随过程体内对形参的改变而改变。 传值方式 当调用一个过程时,系统将实参的值复制给形参,实参与形参断开了联系。在过程体内对形参的任何操作不会影响到实参。 本章目录

例6.7 编写交换两个数的过程,Swap1用传值方式, Swap2用传地址方式。 6.3 参数传递 例6.7 编写交换两个数的过程,Swap1用传值方式, Swap2用传地址方式。 形参获得实参的值 形参获得实参的地址 本章目录

6.3 参数传递 选用传值还是传地址一般进行如下考虑: 要将被调过程中的结果返回给主调程序,则形参必须是传址方式。这时实参必须是同类型的变量,不能是常量、表达式; 不希望过程修改实参的值,则应选用传值方式,减少各过程间的关联。因为在过程体内对形参的改变不会影响实参; 形参是数组都是地址传递。 本章目录

6.3 参数传递 6.3.3 数组参数的传递 例6.8 如下sum子过程求数组a各元素和、并改变数组各元素值: 6.3.3 数组参数的传递 例6.8 如下sum子过程求数组a各元素和、并改变数组各元素值: Function sum%(ByRef x() As Integer) Dim i% sum = 0 For i = 0 To UBound(x) sum = sum + x(i): x(i) = 2 * x(i) Next i End Function 本章目录

6.3 参数传递 形参是数组 要以数组名加圆括号表示,不要给出维数上界;多维数组,每维以逗号分隔。在过程中通过Ubound函数确定每维的上界。 实参是数组 要给出数组名(不需要圆括号)。 当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址。 形参数组 实参数组 1 3 5 7 9 本章目录

6.4 递归 用自身的结构来描述自身就称为递归。 最典型的例子是阶乘运算,作如下的定义: 递归过程在自身定义的内部调用自己。 本章目录

6.4 递归 例6.9 编fac(n)=n!的递归函数。 Function fac(n As Integer) As Integer 6.4 递归 例6.9 编fac(n)=n!的递归函数。 Function fac(n As Integer) As Integer If n = 1 Then fac = 1 Else fac = n * fac(n - 1) End If End Function 本章目录

6.4 递归 递推 回归 递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。 回归过程:不断从栈中弹出当前的参数,直到栈空。 6.4 递归 递推 回归 fac(4)=4*fac(3) fac(3)=3*fac(2) fac(2)=2*fac(1) fac(1)=1 fac(4)=4*6 fac(3)=3*2 fac(2)=2*1 递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。 回归过程:不断从栈中弹出当前的参数,直到栈空。 递归算法设计简单,但消耗的机时和占据的内存空间比非递归大,由此可见构成递归的结构如下: 递归结束条件及结束时的值; 能用递归形式表示,并且递归向终止条件发展。 本章目录

6.4 递归 例6.10 用递归求最大公约数。 Public Function gcd(m As Integer, n As Integer) As Integer If (m Mod n) = 0 Then gcd = n Else gcd = gcd(n, m Mod n) End If End Function 本章目录

6.5 变量的作用域 过程级变量 在一个过程内用Dim或Static语句声明的变量,只能在本过程中使用; 模块级变量 在模块内、任何过程外用Dim、Private语句声明的变量,可被本模块的任何过程访问; 全局变量 在模块级用Public语句声明的变量,可被应用程序的任何过程或函数访问 。 本章目录

6.5 变量的作用域 6.5.1 变量的作用域 例如,在下面一个标准模块文件中不同级的变量声明: 6.5.1 变量的作用域 例如,在下面一个标准模块文件中不同级的变量声明: Public Pa As integer ' 全局变量 Private Mb As string *10 ' 窗体/模块级变量 Sub F1( ) Dim Fa As integer '过程级变量 … End Sub Sub F2( ) Dim Fb As Single '过程级变量

6.5 变量的作用域 6.5.2 静态变量 静态变量 程序运行过程中可保留变量的值。 声明形式:Static 变量名 [AS 类型] 6.5.2 静态变量 静态变量 程序运行过程中可保留变量的值。 声明形式:Static 变量名 [AS 类型] 用Dim声明的变量,每次调用过程时重新初始化。 本章目录

6.5 变量的作用域 例6.11 编写程序,利用变量count统计单击窗体的次数。 Private Sub Form_Click() Dim count% count = count + 1 Print "已单击窗体"; count; "次" End Sub Private Sub Form_Click() Static count% count = count + 1 Print "已单击窗体"; count; "次" End Sub 本章目录

6.6 综合应用 1. 数制转换 不同进制数之间的转换,可通过编程来实现;也可通过VB提供的内部函数:十进制转换为八进制函数(Oct)、转换为十六进制函数(Hex)来实现。 本章目录

6.6 综合应用 例6.12 编一函数,实现一个十进制整数转换成二至十六任意进制的字符。 例6.12 编一函数,实现一个十进制整数转换成二至十六任意进制的字符。 分析:十进制正整数m转换成r进制数,将m不断除r取余数(若余数超过9,还要进行相应的转换,例如10变成A,11变成B等),直到商为零,以反序得到结果,即最后得到的余数在最高位。 本章目录

6.6 综合应用 2.加密和解密 信息加密是信息安全性的措施之一。信息加密有各种方法,最简单的加密方法是将每个字母平移一个位置( 称为密钥)。例如,后移5个位置,这时,A→F,B →G… Y →D,Z→E ,a →f ;解密是加密的逆操作。 例6.13 编一加密和解密的程序,即将输入的一行字符串中的所有字母加密,加密后还可再进行解密。 本章目录

6.6 综合应用 Welcome stud 对取得的一个字符“W”放入变量C中, 加密的过程如左图所示。 W C 87 IAsc=Asc(C) +5 92 IAsc>90 IAsc=IAsc-26 B C=Chr(IAsc) 本章目录

6.6 综合应用 3. 查找 查找是在线性表(在此为数组)中根据指定的关键值,找出与其值相同的元素。 查找方法:一般有顺序查找和二分法查找。 顺序查找:将待查找的关键值与数组的元素逐一比较,若相同,则查找成功,若找不到,则查找失败。 例6.14 实现顺序查找。 本章目录

6.6 综合应用 4. 字符处理应用 例6.15 编写一个英文打字训练的程序,要求如下: (1)在标签框内随机产生30个字母的范文; 例6.15 编写一个英文打字训练的程序,要求如下: (1)在标签框内随机产生30个字母的范文; (2)当焦点进入输入文本框时开始计时,并显示当时的时间; (3)当输入了30个字母时结束计时,禁止向文本框输入内容,显示打字的速度和正确率。 此题关键是:对输入的字符串与随机产生的字符串,一一对应比较,判断输入正确与否。 本章目录

思考题 1. 为什么要使用过程? 2. 简述子过程和函数过程的异同点? 3. 什么是形参?什么是实参?实参与形参之间怎样传值? 4. 按变量声明的位置可分为哪几种变量? 5. 什么是静态变量?如何声明静态变量? 本章目录