任务四应用过程数组循环拓展功能.ppt

上传人:本田雅阁 文档编号:2590785 上传时间:2019-04-14 格式:PPT 页数:47 大小:1,018.01KB
返回 下载 相关 举报
任务四应用过程数组循环拓展功能.ppt_第1页
第1页 / 共47页
任务四应用过程数组循环拓展功能.ppt_第2页
第2页 / 共47页
任务四应用过程数组循环拓展功能.ppt_第3页
第3页 / 共47页
任务四应用过程数组循环拓展功能.ppt_第4页
第4页 / 共47页
任务四应用过程数组循环拓展功能.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《任务四应用过程数组循环拓展功能.ppt》由会员分享,可在线阅读,更多相关《任务四应用过程数组循环拓展功能.ppt(47页珍藏版)》请在三一文库上搜索。

1、VB.NET程序设计,任务四 应用过程、数组、循环拓展功能,学习目标,1、掌握循环结构的使用 2、掌握数组定义和应用 3、掌握过程定义和调用 4、了解过程调用中的参数传递,循环语句,程序的另一种结构是循环结构 循环结构作用是重复执行一段程序 循环是有条件的、次数是有限的 VB的循环语句:ForNext、Do WhileLoop For EachNext,循环语句ForNext循环,ForNext循环一般应用于循环次数已知的场合 For = 初值 To 终值 Step 步长 语句块(循环体) Next 循环变量 工作原理,Step缺省为 1,循环语句ForNext循环,例 求1+3+5+7+99

2、 Dim Sum As Integer, I As Integer Sum = 0 保存累加和,先清零 For I = 1 To 99 Step 2 Sum = Sum + I Next I Msgbox(“1+3+5+99=“ & Sum),本例的特点是数据项之间相差2, 即Step的值为2,思考: 例中当输出出现时,I 的值是多少? 如果省略Step 2,程序的结果如何? For语句能不能改写成For I=99 To 1 Step -2 ? Msgbox()的作用?,循环语句ForNext循环,例 求斐波那契级数的前20项 Dim A, B, I, T As Integer A = 1 :

3、 B = 1 生成级数第一、二项 Debug.write (A & “ ”) Debug.write (B & “ ”) For I = 3 To 20 T = A + B 产生级数新的一项 A = B 让B成为下一组的A B = T 原来A+B的值成为下一组的B Debug.write (B & “ ”) If I Mod 6 = 0 Then Debug.writeline(“”) Next I,每6个数一行,斐波那契级数: 第一、二项为1 第三项开始,每一项 的值是前两项值之和,循环语句DoLoop循环,1. 当型循环,先判断后执行,先执行后判断,特点:条件表达式成立执行循环体内容,循环

4、语句DoLoop循环,例 Sum=1+2+3+N 求Sum不超过10000的最大整数值和数据项数N Dim Sum, N As Integer N = 0 开始时项数为0 Sum = 0 保存累加值的变量Sum清零 Do While Sum = 10000 N = N + 1 Sum = Sum + N Loop Sum = Sum - N N = N - 1 Msgbox( “Sum=“ & Sum & “N=“ & N),当Sum的值超出10000时循环才终止。因此Sum值要减去多加的一个N;而在循环过程中,N也被多加了一个1,需要减去。,循环语句DoLoop循环,2. 直到型循环,特点:

5、条件表达式不成立执行循环体内容,循环语句DoLoop循环,例 Sum=1+2+3+N 求Sum不超过10000的最大整数值和数据项数N Dim Sum, N As Integer N = 0 开始时项数为0 Sum = 0 保存累加值的变量Sum清零 Do While Sum = 10000 N = N + 1 Sum = Sum + N Loop Sum = Sum - N N = N - 1 Msgbox( “Sum=“ & Sum & “N=“ & N),当Sum的值超出10000时循环才终止。因此Sum值要减去多加的一个N;而在循环过程中,N也被多加了一个1,需要减去。,实训,求:1+

6、2+3+100的值,循环语句两重循环,例 输出乘法口诀表 Dim I As Integer, J As Integer, M As Integer For I = 1 To 9 For J = 1 To I M = I * J Debug.write (J & “*“ & I & “=“ & M & “ “) Next J Debug.writeline(“”) 打印换行 Next I,循环语句两重循环,例 计算 Dim I As Integer, J As Integer Dim F As Long 阶乘值用长整型保存 Dim r As Double For I = 0 To 10 F =

7、1 每个阶乘值先置1以便累乘 For J = 1 To I F = F * J Next J r = r + 1 / F Next I Msgbox( “r(e)=“ & r),本循环计算F= I!,循环语句多重循环,多重循环:循环次数在两重以上的循环结构 例 计算将1角钱兑换成零钱有多少种方案 Dim I, J, K, S As Integer S = 0 统计兑换1角钱的方案数 For I = 0 To 10 1分钱个数 For J = 0 To 5 2分钱个数 For K = 0 To 2 5分钱个数 If 1*I +2*J +5*K = 10 Then S = S + 1 Next K

8、 Next J Next I Msgbox( “1角钱兑换成零钱的方案有“ & S & “种”),1角钱以下的硬币有1分、2分和5分种 1角钱全换成1分需10个 1角钱全换成2分需5个 1角钱全换成5分需2个,数组数组的概念,数组用于保存大量的、逻辑上有联系的数据 数组的特点: 数据中的元素在类型上是一致的 数组元素在内存空间上是连续存放的 数组元素的引用可通过下标进行 数组在使用前必须要定义(声明),数组一维数组的定义和使用,1. 数组的定义(声明) Dim 数组名(下标) As 数据类型 或 Dim 数组名() As 数据类型 = 值 例如: Dim Data(40) As Integer

9、 Dim Data() As Integer = 1,2,3,4 定义数组可以使用类型符 例, Dim Data%(40) 数组的下标全部从 0 开始 例,Dim Salary(1000) As Decimal 通过数组名和下标可引用数组中的元素 例, Data(25)=95 Debug.write ( Data(25),数组一维数组的定义和使用,说明-1: 数组定义后的初值:数值型数组各元素为0,逻辑型数组各元素为False,字符串数组各元素为空串(“)。 可同时声明几个数组,用逗号分隔,例如 Dim A%(100), B(800) As Long 定义数组时,下标的上界值只能是常数或常数表

10、达式。下例的定义是错误的 N=100 : Dim Data(N) As Integer 定义时,数组的上界值不得超出长整型范围。,数组一维数组的定义和使用,说明-2: 数组的元素个数称为数组长度。 GetUpperBound是数组的一个方法,它可返回数组某个维的上界值. 例如 Dim Matrix1(,) As Integer = 1, 2, 3, 4, 2, 3, 4, 5, 3, 4, 5, 6 Dim Matrix2(3, 2) As Integer Dim Matrix3(,) As Integer,数组一维数组的定义和使用,2. 数组元素的使用 通过数组名和下标 例 Dim Data

11、(5) As Integer Dim Sum, I As Integer For I = 1 To 5 Data(I) = InputBox(“输入第“ & I & “个数据“) Sum = Sum + Data(I) Next I Debug.writeline( Sum),Inputbox函数运行的窗口,数组一维数组的定义和使用,说明: 数组实际上是用一个变量名字代表一组数,这组数是连续排列的,用顺序号作为下标区分各个数。 数组下标是一个整型量。 数组常见的错误: 下标出界,Dim Test(3) As Integer Test(1)=4 Test(2)=3 Test(3)=2 Test(

12、4)超出定义,数组一维数组应用例题,例 输出斐波那契级数的前20项 Dim F(20) As Integer, I As Integer F(1) = 1 : F(2) = 1 第一、第二项为1 For I = 3 To 20 第三项起每项为前二项之和 F(I) = F(I - 2) + F(I - 1) Next I For I = 1 To 20 在窗体上输出 Debug.write (F(I) & ” , ”) If I Mod 5 = 0 Then Debug.writeline(“”) Next I,数组一维数组应用例题,例 产生100个不重复的3位随机整数, 并按每行7列的格式输出

13、 Dim Data(100) As Integer, I%, J% Randomize() 设置随机化种子,保证每组数据不重复 For I = 1 To 100 循环产生100个数据 Data(I) = New System.Random().Next(100,1000) For J = 1 To I - 1 与已经产生的数据比较 If Data(I) = Data(J) Then 数据已存在则舍弃,重新产生 I = I - 1 Exit For 提前退出数据比较的循环 End If Next J Next I,转 下 页,数组一维数组应用例题,I = 1 : J = 1 Do While I

14、 100 Then Exit For Debug.write (Data(I) & “ “) I = I + 1 Next J Debug.Writeline(“”) 打印换行 Loop,接 上 页,For I = 1 To 100 Debug.write (Data(I) & “ “) If I Mod 7 = 0 Then Debug.writeline(“”) End If Next I,数组一维数组应用例题,例 统计成绩分布 Dim N(10) As Integer, I As Integer, X As Integer Const m = 10 For I = 1 To m X =

15、InputBox(“请输入“ + Str(I) + “个学生的成绩“) X = Int(X / 10) 也可写成X=X10 N(X) = N(X) + 1 Next I Debug.writeline (100 & “-“ & 100 & N(10) For I = 9 To 0 Step -1 Debug.writeline( 10 * I & “-“ & (10 * I + 9) & N(I) Next I,用For EachNext循环遍历数组,例1 使用For语句遍历数组 Dim pins As Integer() = 9,3,7,2 For index As Integer = 0

16、To pins.Length 1 Dim pin As integer =pins(index) Debug.writeline(pin) Next 例2 使用For Each语句遍历数组 Dim pins As Integer() = 9,3,7,2 For Each pin As Integer In pins Debug.writeline(pin) Next 解读: For Each语句声明了一个循环变量pin,它自动依次获得数组中每个元素的值(In是一个关键字)。使用For Each语句来遍历数组更能高效处理数组。,数组排序问题(选学),1. 选择法排序(N个数据升序) 先假设第1个

17、数据最小,依次同第2、第3、第N个数据进行比较,一旦第1个数据大于其它值则交换。这样,第1轮比较完毕,找出了最小数据作为第1个数据。 以第2个数据为最小数据,依次同第3、第4、第N个数据进行比较,若第2个数据大于其它值则交换。这样,第2轮交换完毕,则找出第二小的数据作为第2个数据。 依此类推,第N-1轮比较将找出第N-1小的数据,剩下的一个数据就是最大数,排列在最后。以6个数据为例:,原始序列:30, 20, 10, 90, 50, 60 第1轮比较结果:10 | 30, 20, 90, 50, 60 第2轮比较结果:10, 20 | 30, 90, 50, 60 第3轮比较结果:10, 20

18、, 30 | 90, 50, 60 第4轮比较结果:10, 20, 30, 50 | 90, 60 第5轮比较结果:10, 20, 30, 50, 60 | 90,数组排序问题 (选学),例 用选择法完成10个随机数据的升序排序。 Const N = 10 : Dim D(N) As Integer, I%, J%, T% Randomize() For I = 1 To N D(I) = Rnd * 100: Debug.write (D(I) & “,”)排序前的数据序列 Next I Debug.writeline(“”) For I = 1 To N - 1 挑出前N-1个小的数 Fo

19、r J = I + 1 To N If D(I) D(J) Then 数据元素交换 T = D(I) : D(I) = D(J) : D(J) = T End If Next J Next I For I = 1 To N 输出排序结果 Debug.write (D(I) & “,”) Next I,找最小数据作为第1个数据: I = 1 For J = 2 To N 这里2等价I+1 If D(1) D(J) Then T = D(1): D(1) = D(J): D(J) = T End If Next J,数组排序问题 (选学),2. 冒泡法排序(N个数据升序) 第1轮比较:从第1个元素

20、开始,两两相邻比较到N-1,值大的放在后面。比较完毕,最大的数成为第N个元素(沉底)。 第2轮比较:从第1个元素开始,两两相邻比较到N-2,值大的放在后面。比较完毕,最大的数成为第N-1个元素。 依此类推,直至最后一次比较。,数组排序问题 (选学),例 用冒泡法完成10个随机数的升序排序 Const N = 10 : Dim D(N) As Integer, I%, J%, T% Randomize() For I = 1 To N D(I) = Rnd * 100: Debug.write (D(I) & “,”) Next I Debug.writeline(“”) For I = N -

21、 1 To 1 Step -1 大数逐个“沉底“ For J = 1 To I If D(J) D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If Next J Next I For I = 1 To N 输出排序结果 Debug.write (D(I) & “,”) Next I,最大的数成为第N个元素(沉底): I = N - 1 For J = 1 To N-1 这里N-1等价I If D(J) D(J + 1) Then T = D(J): D(J) = D(J + 1): D(J + 1) = T End If N

22、ext J,数组动态数组,1. 在VB.NET中,所有数组都是变长的,也就是说所有数组都是动态数组. 2.声明一个数组时可以指定它的长度,但这个长度只是初始长度,可以使用ReDim语句来修改它. 3.使用ReDim语句重新定义一个数组时,不能改变数组的维数,也不能改变数组的类型. 4.使用ReDim语句重新定义一个数组时,数组原有的值会丢失.但可以在ReDim语句中使用Preserve关键字来保持这些值. 5.如果在ReDim语句中使用Preserve关键字,那么只能改变最后一维的长度. 例: Dim B(4) As Integer For I = 0 To 4 B(I) = I Next I

23、 ReDim PreServe B(6),数组二维数组 (选学),1. 二维数组的定义(声明) 二维数组由行和列组成,有两个下标 定义格式: Dim 数组名( 下标1 ,下标2 ) As 数据类型 或 Dim 数组名( ,) As 数据类型 = 值 例如,Dim Data( 5,9) As Integer 注意: 下界默认为0 例如, Dim Salary(30,10) As Decimal 31行11列 二维数组有行、列两维,通常需使用二重循环引用,数组二维数组 (选学),二维数组中的数据按行存储,其引用与一维数组相似。 Dim A(2, 3) As Integer, I%, J%, C%

24、For I = 0 To 2 For J = 0 To 3 数组赋值 A(I, J) = C : C = C + 1 Next J Next I For I = 0 To 2 输出数组 For J = 0 To 3 Debug.Write( A(I, J) & “ “) Next J Debug.Writeline(“”) 另起一行打印 Next I,数组二维数组 (选学),2. 二维数组应用举例 例,过程,过程是一段程序代码,是相对独立的逻辑模块。 一个完整的VB.NET应用程序由若干过程和模块组成。 常用的VB.NET过程有:Sub过程和Function过程。 Sub过程(子过程):完成一

25、定的操作和功能,无返回值,通过程序调用和事件触发而执行,分为事件过程和通用过程。 Function过程(函数过程):相当于用户自定义的函数,通过程序调用才能被执行,并且可将数据处理的结果返回。 一个过程的代码长度不要超过64K。,过程Sub过程,过程定义格式: Private|Public Shared Sub 过程名(参数表) 语 句 End Sub Private表示模块级子过程,Public表示全局级子过程(缺省值) 。 过程名符合VB.NET标识符的命名约定 参数表可以是空表,也可以放置若干个变量(形式参数) 。如: Public Sub Sum(X As Integer, Y As

26、Integer, Z As Integer) Sub过程分为:事件过程和通用过程,过程Sub过程,1. 事件过程 这类过程与对象有关,对象事件触发后被调用。 事件过程的过程名由系统自动指定。 建立对象的事件过程: (1) 进入代码窗口 方法1:双击对象 方法2:“视图代码窗口” (2) 选择“对象”和“事件名称”,系统 自动形成该事件过程的头和尾 (3) 编写该事件的程序代码,过程Sub过程,2. 通用Sub过程 这类过程不与对象相关,是用户创建的一段共享代码。 过程的名称由用户自己命名 建立通用Sub过程: 建立过程框架 在类的内部,输入过程,按回车后系统自动添加End Sub。 (2) 编

27、写该过程的程序代码,过程Sub过程,3. 过程的调用方法 (1) 通用Sub过程的两种调用方式: Call 过程名(参数表) 过程名(参数表) (2) 事件过程的调用 一般由事件的触发而引起(单击、窗体加载等) 也可以像通用Sub过程那样调用,过程Function过程,Function过程的实质是一个自定义函数,定义格式: Private|Public Shared Function 函数过程名(参数表) As 类型 语句块 Return 语句 End Function Private、Public及参数的含义同Sub子过程 Function过程具有函数值,由函数过程名返回。 Function

28、过程的建立与Sub过程的建立相似,调用方法: 用Call语句 将Function返回值赋给一个变量 将Function过程的返回值用在表达式中,过程Function过程,例 计算,过程参数传递,在调用Sub过程和Function过程时,参数的传递有两种方式:按值传递、按地址传递 1. 按值传递 主调过程的实参与被调过程的形参各有自己的存储单元 调用时:主调过程的实参值复制给被调过程的形参 定义被调过程时,各形参前加ByVal 2. 按地址传递 主调过程的实参与被调过程的形参共享同一存储单元 形式参数与实际参数是同一个变量 定义被调过程时,各形参前加ByRef 定义过程时,缺省的参数传递方式是按

29、值传递,过程参数传递,例 参数传递示例,过程参数传递,1、地址传递(指针传递)或叫“引用” 再看一个地址传递参数的例子: Sub tryout(ByRef X As Integer, ByRef Y As Integer) X = X + 100 Y = Y * 6 Debug.WriteLine(“X=“ & X & “Y=“ & Y) End Sub Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click Dim a As Integer, b As

30、Integer a = 10 : b = 20 tryout(a, b) Debug.WriteLine(“a=“ & a & “b=“ & b) End Sub 单击窗体后,输出结果如下:,X=110 Y=120 a= 110 b=120,过程参数传递,2、在VB.NET中,值传递方式通过关键字Byval实现。再看前面的例子,如果用值传递方式来传递参数,则运行结果不同: Sub tryout(ByVal X As Integer, ByVal Y As Integer) X = X + 100 Y = Y * 6 Debug.WriteLine(“X=“ & X & “Y=“ & Y) En

31、d Sub Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click Dim a As Integer, b As Integer a = 10 : b = 20 tryout(a, b) Debug.WriteLine(“a=“ & a & “b=“ & b) End Sub 此时,事件过程Form1_click( )不用做任何修改,单击窗体后,输出结果如下:,X=110 Y=120 a= 10 b=20,几条规则(不是硬性规定),(1)对整型、长整型或单

32、精度参数,如果不希望过程修改实参的值,则应使用值传递。 (2)为提高效率,字符串和数组应使用地址传递。 (3)用户自定义类型和控件只能使用地址传递。 (4)其它数据类型:双精度、货币型和变体型,可以用2种方式传递,但最好用值传递。 (5)如果没有把握,最好先用值传递方式来传送所有变量,(字符串、数组和记录类型变量除外),待编写完程序后,再把部分参数改为地址传递方式,以加快运行速度。,过程作用域,变量的作用域指定义的变量能有效发挥其作用的范围。 变量按其作用域可分为局部变量(过程级)、模块变量(模块级)和全局变量(全局级) 对过程而言,也有模块级过程和全局级过程之分 1. 模块级过程 在一个窗体模块中以Private定义的过程为模块级过程,可为模块内的各个过程引用。 2. 全局级过程 在一个窗体模块中以Public定义的过程为全局级过程,其他窗体可通过“窗体模块名.过程名”引用;在标准模块中定义的全局过程可直接通过过程名引用。,作业,实训1:设计一个动态中奖器 要求:、在给定的数值范围内选定一个中奖数值。 、在中奖数值没选定之前,中奖数值框中的数值是动态显示的 、选定的中奖号码依次显示在窗体上,且中奖号码是不重复的 预备知识:产生一个随机整数 j =New System.Random().Next(100) j = New System.Random().Next(1,100),

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

当前位置:首页 > 其他


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