任务四应用过程、数组、循环拓展功能.ppt_第1页
任务四应用过程、数组、循环拓展功能.ppt_第2页
任务四应用过程、数组、循环拓展功能.ppt_第3页
任务四应用过程、数组、循环拓展功能.ppt_第4页
任务四应用过程、数组、循环拓展功能.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

VB.NET程序设计,任务四应用过程、数组、循环拓展功能,学习目标,1、掌握循环结构的使用2、掌握数组定义和应用3、掌握过程定义和调用4、了解过程调用中的参数传递,循环语句,程序的另一种结构是循环结构循环结构作用是重复执行一段程序循环是有条件的、次数是有限的VB的循环语句:ForNext、DoWhileLoopForEachNext,循环语句ForNext循环,ForNext循环一般应用于循环次数已知的场合For=初值To终值Step步长语句块(循环体)Next循环变量工作原理,Step缺省为1,循环语句ForNext循环,例求1+3+5+7+99DimSumAsInteger,IAsIntegerSum=0保存累加和,先清零ForI=1To99Step2Sum=Sum+INextIMsgbox(1+3+5+99=&Sum),本例的特点是数据项之间相差2,即Step的值为2,思考:例中当输出出现时,I的值是多少?如果省略Step2,程序的结果如何?For语句能不能改写成ForI=99To1Step-2?Msgbox()的作用?,循环语句ForNext循环,例求斐波那契级数的前20项DimA,B,I,TAsIntegerA=1:B=1生成级数第一、二项Debug.write(A&“”)Debug.write(B&“”)ForI=3To20T=A+B产生级数新的一项A=B让B成为下一组的AB=T原来A+B的值成为下一组的BDebug.write(B&“”)IfIMod6=0ThenDebug.writeline(“”)NextI,每6个数一行,斐波那契级数:第一、二项为1第三项开始,每一项的值是前两项值之和,循环语句DoLoop循环,1.当型循环,先判断后执行,先执行后判断,特点:条件表达式成立执行循环体内容,循环语句DoLoop循环,例Sum=1+2+3+N求Sum不超过10000的最大整数值和数据项数NDimSum,NAsIntegerN=0开始时项数为0Sum=0保存累加值的变量Sum清零DoWhileSumD(J)ThenT=D(1):D(1)=D(J):D(J)=TEndIfNextJ,数组排序问题(选学),2.冒泡法排序(N个数据升序)第1轮比较:从第1个元素开始,两两相邻比较到N-1,值大的放在后面。比较完毕,最大的数成为第N个元素(沉底)。第2轮比较:从第1个元素开始,两两相邻比较到N-2,值大的放在后面。比较完毕,最大的数成为第N-1个元素。依此类推,直至最后一次比较。,数组排序问题(选学),例用冒泡法完成10个随机数的升序排序ConstN=10:DimD(N)AsInteger,DimI,J,TAsIntegerRandomize()ForI=1ToND(I)=Rnd*100:Debug.write(D(I)&“,”)NextIDebug.writeline(“”)ForI=N-1To1Step-1大数逐个沉底ForJ=1ToIIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJNextIForI=1ToN输出排序结果Debug.write(D(I)&“,”)NextI,最大的数成为第N个元素(沉底):I=N-1ForJ=1ToN-1这里N-1等价IIfD(J)D(J+1)ThenT=D(J):D(J)=D(J+1):D(J+1)=TEndIfNextJ,数组动态数组,1.在VB.NET中,所有数组都是变长的,也就是说所有数组都是动态数组.2.声明一个数组时可以指定它的长度,但这个长度只是初始长度,可以使用ReDim语句来修改它.3.使用ReDim语句重新定义一个数组时,不能改变数组的维数,也不能改变数组的类型.4.使用ReDim语句重新定义一个数组时,数组原有的值会丢失.但可以在ReDim语句中使用Preserve关键字来保持这些值.5.如果在ReDim语句中使用Preserve关键字,那么只能改变最后一维的长度.例:DimB(4)AsIntegerForI=0To4B(I)=INextIReDimPreServeB(6),数组二维数组(选学),1.二维数组的定义(声明)二维数组由行和列组成,有两个下标定义格式:Dim数组名(下标1,下标2)As数据类型或Dim数组名(,)As数据类型=值例如,DimData(5,9)AsInteger注意:下界默认为0例如,DimSalary(30,10)AsDecimal31行11列二维数组有行、列两维,通常需使用二重循环引用,数组二维数组(选学),二维数组中的数据按行存储,其引用与一维数组相似。DimA(2,3)AsInteger,I,J,CAsIntegerForI=0To2ForJ=0To3数组赋值A(I,J)=C:C=C+1NextJNextIForI=0To2输出数组ForJ=0To3Debug.Write(A(I,J)&“)NextJDebug.Writeline(“”)另起一行打印NextI,数组二维数组(选学),2.二维数组应用举例例,过程,过程是一段程序代码,是相对独立的逻辑模块。一个完整的VB.NET应用程序由若干过程和模块组成。常用的VB.NET过程有:Sub过程和Function过程。Sub过程(子过程):完成一定的操作和功能,无返回值,通过程序调用和事件触发而执行,分为事件过程和通用过程。Function过程(函数过程):相当于用户自定义的函数,通过程序调用才能被执行,并且可将数据处理的结果返回。一个过程的代码长度不要超过64K。,过程Sub过程,过程定义格式:Private|PublicSharedSub过程名(参数表)语句EndSubPrivate表示模块级子过程,Public表示全局级子过程(缺省值)。过程名符合VB.NET标识符的命名约定参数表可以是空表,也可以放置若干个变量(形式参数)。如:PublicSubSum(XAsInteger,YAsInteger,ZAsInteger)Sub过程分为:事件过程和通用过程,过程Sub过程,1.事件过程这类过程与对象有关,对象事件触发后被调用。事件过程的过程名由系统自动指定。建立对象的事件过程:(1)进入代码窗口方法1:双击对象方法2:“视图代码窗口”(2)选择“对象”和“事件名称”,系统自动形成该事件过程的头和尾(3)编写该事件的程序代码,过程Sub过程,2.通用Sub过程这类过程不与对象相关,是用户创建的一段共享代码。过程的名称由用户自己命名建立通用Sub过程:建立过程框架在类的内部,输入过程,按回车后系统自动添加EndSub。(2)编写该过程的程序代码,过程Sub过程,3.过程的调用方法(1)通用Sub过程的两种调用方式:Call过程名(参数表)过程名(参数表)(2)事件过程的调用一般由事件的触发而引起(单击、窗体加载等)也可以像通用Sub过程那样调用,过程Function过程,Function过程的实质是一个自定义函数,定义格式:Private|PublicSharedFunction函数过程名(参数表)As类型语句块Return语句EndFunctionPrivate、Public及参数的含义同Sub子过程Function过程具有函数值,由函数过程名返回。Function过程的建立与Sub过程的建立相似,调用方法:用Call语句将Function返回值赋给一个变量将Function过程的返回值用在表达式中,过程Function过程,例计算,过程参数传递,在调用Sub过程和Function过程时,参数的传递有两种方式:按值传递、按地址传递1.按值传递主调过程的实参与被调过程的形参各有自己的存储单元调用时:主调过程的实参值复制给被调过程的形参定义被调过程时,各形参前加ByVal2.按地址传递主调过程的实参与被调过程的形参共享同一存储单元形式参数与实际参数是同一个变量定义被调过程时,各形参前加ByRef定义过程时,缺省的参数传递方式是按值传递,过程参数传递,例参数传递示例,过程参数传递,1、地址传递(指针传递)或叫“引用”再看一个地址传递参数的例子:Subtryout(ByRefXAsInteger,ByRefYAsInteger)X=X+100Y=Y*6Debug.WriteLine(X=&X&Y=&Y)EndSubPrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimaAsInteger,bAsIntegera=10:b=20tryout(a,b)Debug.WriteLine(a=&a&b=&b)EndSub单击窗体后,输出结果如下:,X=110Y=120a=110b=120,过程参数传递,2、在VB.NET中,值传递方式通过关键字Byval实现。再看前面的例子,如果用值传递方式来传递参数,则运行结果不同:Subtryout(ByValXAsInteger,ByValYAsInteger)X=X+100Y=Y*6Debug.WriteLine(X=&X&Y=&Y)EndSubPrivateSubForm1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMyBase.ClickDimaAsInteger,bAsIntegera=10:b=20tryout(a,b)Debug.WriteLine(a=&a&b=&b)EndSub此时,事件过程Form1_click()不用做任何修改,单击窗体后,输出结果如下:,X=110Y=120a=10b=20,几条规则(不是硬性规定),(1)对整型、长整型或单精度参数,如果不希望过程修改实参的值,则应使用值传递。(2)为提高效率,字符串和数组应使用地址传递。(3)用户自定义类型和控件只能使用地址传递。(4)其它数据类型:双精度、货币型和变体型,可以用2种方式传递,但最好用值传递。(5)如果没有把握,最好先用值传递方式来传送所有变量,(字符串、数组和记录类型变量除外),待编写完程序后,再把部分参数改为地址传递方式,以加快运行速度。,过程作用域,变量的作用域指定义的变量能有效发挥其作用的范围。变量按其作用域可分为局部变量(过程级)、模块变量(模块级)和全局变量(全局级)对过程而言,也有模块级过程和全局级过程之分1.模块级过程在一个窗体模块中以Private定义的过程为模块级过程,可为模块内的各个过程引用。2.全局级过程在一个窗体模块中以Public定义

温馨提示

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

最新文档

评论

0/150

提交评论