您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第七章 过程(何国斌版本)
7.1通用过程7.2常用算法举例第七章过程7.1通用过程7.1.1通用过程概念7.1.2参数传递7.1.3过程的嵌套与递归调用7.1.4变量、过程的作用域第七章过程引例:已知多边形的各条边的长度,要计算多边形的面积。第七章过程—通用过程abdfgecs3s2s1求三角形面积的代码重复使用了三次解决办法:对于重复使用的程序段,可以自定义一个过程,供多次调用.第七章过程—通用过程7.1.1通用过程概念及分类第七章过程—通用过程Sub过程(子过程)Function过程(函数过程)7.1.1.1Sub过程第七章过程—通用过程1.Sub过程的定义⑴利用代码窗口直接定义通用过程其格式为:[Private|Public][Static]Sub过程名[(参数表)]语句组[ExitSub]语句组EndSub⑵利用“工具”菜单下的“添加过程”命令定义过程第七章过程—通用过程2.Sub过程的调用⑴直接使用过程名调用Sub过程,即把过程名作为一个语句来使用,格式如下:过程名[参数列表]⑵使用Call语句调用Sub过程。格式如下Call过程名[(参数列表)]第七章过程—通用过程例2:编写Sub过程求s=1!+2!+…+n!。第七章过程—通用过程7.1.1.2Function过程1.Function过程的定义[Public|Private][Static]Function函数名([形参表])[As数据类型]语句组[函数名=表达式][ExitFunction]语句组[函数名=表达式]EndFunction第七章过程—通用过程2.Function过程的调用第七章过程—通用过程其格式为:变量名=Function过程名([参数列表])例3:编写Function过程求s=1!+2!+…+n!。第七章过程—通用过程7.1.2参数传递第七章过程—通用过程(参数传递)7.1.2.1形式参数与实际参数的概念第七章过程—通用过程(参数传递)形式参数(简称形参)是指在定义过程时,在过程头(指Sub或Fuction语句行)的参数列表中出现的变量名和数组名,在过程体中被引用。实际参数(简称实参)是调用过程时,在过程名后的参数列表中出现的变量名、数组名、常量或表达式。7.1.2.2参数按地址传递和按值传递1.按地址传递参数2.按值传递参数第七章过程—通用过程(参数传递)1.按地址传递参数例如,创建一个工程,编写一个交换两变量值的函数过程Swap:PrivateFunctionSwap(xAsInteger,yAsInteger)DimtmpAsIntegertmp=x:x=y:y=tmpEndFunction第七章过程—通用过程(参数传递)然后编写窗体的Load事件过程,调用该函数过程:PrivateSubForm_Load()DimaAsInteger,bAsIntegerShowa=10:b=15Print调用交换函数过程前:a=;a,b=;bSwapa,bPrint调用交换函数过程后:a=;a,b=;bEndSub第七章过程—通用过程(参数传递)2.按值传递参数例如,把上面调用交换变量值的函数过程Swap修改为按值传递参数:PrivateSubForm_Load()DimaAsInteger,bAsIntegerShowa=10:b=15Print调用交换函数过程前:a=;a,b=;bSwap(a),(b)‘按值传递参数Print调用交换函数过程后:a=;a,b=;bEndSub第七章过程—通用过程(参数传递)例:用Do…Loop循环编写一个求阶乘的函数过程Fact,并求1!+2!+…+n!的值。第七章过程—通用过程(参数传递)7.1.2.3传递数组参数(按地址传递)第七章过程—通用过程(参数传递)例:编写一个Sub过程,实现对数组元素从小到大排序。例7-7:编写一个Sub过程,实现对数组元素从小到大排序。第七章过程—通用过程(参数传递)7.1.3过程的嵌套与递归调用第七章过程—通用过程(过程的嵌套与递归调用)7.1.3.1过程的嵌套调用第七章过程—通用过程(过程的嵌套与递归调用)7.1.3.2过程的递归调用第七章过程—通用过程(过程的嵌套与递归调用)使用递归调用的条件是:⑴可以把要解决的问题转化为一个新的问题,而这个新的问题的解法仍与原来的解法相同,只是所处理的对象有规律地递增或递减。⑵可以用上述转化过程使问题得到解决。⑶有一个明确的结束递归的条件例7-9:采用递归方法计算n!(n0)。分析:自然数n的阶乘可以递归定义为:0)!1(1,01!nnnnn第七章过程—通用过程(过程的嵌套与递归调用)递归调用的执行过程分两部分进行:Fact(4)=4*fact(3)Fact(3)=3*fact(2)Fact(2)=2*fact(1)Fact(1)=1*fact(0)Fact(0)=1Fact(4)=4*6Fact(3)=3*2Fact(2)=2*1Fact(1)=1*1边界条件第七章过程—通用过程(过程的嵌套与递归调用)例7-10:用递归调用方法求两个正整数n和m的最大公约数。分析:通过辗转相除求两个整数最大化的方法,也可以采用递归调用方法来求解,递归终止的条件是余数为0。第七章过程—通用过程(过程的嵌套与递归调用)7.1.4变量、过程的作用域第七章过程—通用过程(变量、过程的作用域)7.1.4.1代码模块的概念1.窗体模块2.标准模块3.类模块第七章过程—通用过程(变量、过程的作用域)7.1.4.2变量的作用域1.过程级变量2.模块级变量7.1.4.3变量的生成期1.动态变量2.静态变量例7-11第七章过程—通用过程(变量、过程的作用域)7.1.4.4过程的作用域例7-121.模块级过程2.全局过程3.调用其他模块中的过程7.2常用算法举例第七章过程—通用过程(常用算法举例)例:数制转换。编写一函数过程,实现一个十进制整数转换成2~16任意进制字符串。第七章过程—通用过程(变量、过程的作用域)例:顺序查找。第七章过程—通用过程(变量、过程的作用域)例:加密和解密。简单的加密算法:将每一个字母加一序数,例如加序数5,这时“A”→“F”,“a”→“f”,“B”→“G”…“Y”→“D”,“Z”→“E”。第七章过程—通用过程(变量、过程的作用域)习题7一.单选题1.假设已通过下列Sub语句定义了Mysub过程。若要调用该过程,可以采用语句。SubMysub(xAsInteger)A.s=Mysub(2)B.Mysub(32000)C.PrintMysub(120)D.Callysub(40000)第七章过程—通用过程(习题)2.要使过程调用后返回两个参数s和t,下列的过程定义语句中,正确的是。A.SubMySub1(ByRefs,ByValt)B.SubMySub1(ByVals,ByValt)C.SubMySub1(ByRefs,ByReft)D.SubMySub1(ByVals,ByReft)第七章过程—通用过程(习题)3.以下程序段运行后,单击窗体显示的结果是。PrivateSubForm_Click()DimbAsInteger,yAsIntegerCallMysub2(3,b)y=bCallMysub2(4,b)Printy+bEndSubPublicSubMysub2(x,t)t=0Fork=1Toxt=t+kNextEndSubA.13B.16C.19D.214.下列程序段运行后,单击窗体时显示的结果是。PublicSubMysub3(ByValxAsInteger,yAsInteger)x=y+xy=xModyEndSubPrivateSubForm_Click()DimaAsInteger,bAsIntegera=11:b=22CallMysub3(a,b)Printa;bEndSubA.3311B.1111C.1122D.22115.下列程序运行后,单击窗体时显示的结果是。PublicSubMysub4(xAsInteger)x=3*x-1Ifx5Thenx=x+9Printx;EndSubPrivateSubForm_Click()x=1Mysub43+xPrintxEndSubA.201B.2014C.111D.11146.在窗体模块的通用段中声明变量时,不能使用关键字。A.DimB.PublicC.PrivateD.Static第七章过程—通用过程(习题)7.使用PublicConst语句声明一个全局的符号常量时,该语句应在。A.事件过程中B.窗体模块的通用段中C.标准模块的通用段中D.通用过程中第七章过程—通用过程(习题)8.下列论述中,正确的是。A.用户可以定义通用过程的过程名,也可以定义事件过程的过程名。B.一个工程中只能有一个SubMain过程C.窗体的Hide方法和Unload方法的作用完全相同。D.在一个窗体文件中用Private定义的通用过程,可以被其他窗体调用第七章过程—通用过程(习题)二.填空题1.下列程序段运行后,单击窗体时显示的结果是。PublicFunctionFn1(x)AsStringk=Len(x)Fn1=Mid(x,2,k-2)EndFunctionPrivateSubForm_Click()DimaAsString,bAsString,sAsStringa=ABCDEFG:b=12345s=Fn1(a)+Fn1(b)PrintFn1(Fn1(Fn1(s)))EndSub2.在窗体上已经建立了3个文本框(Text1,Text2及Text3)和一个命令按钮(Command1),运行程序后单击命令按钮,则在文本框Text1中显示的内容是⑴,在文本框Text2中显示的内容是⑵,在文本框Text3中显示的内容是⑶。PublicSubMySub5(x,ByValy)a=x+yx=a+yy=2*xEndSubPrivateSubCommand1_Click()DimbAsInteger,cAsIntegerb=1:CallMySub5(b,c)c=a+b:CallMySub5(c,b)a=a+cText1.Text=aText2.Text=bText3.Text=cEndSub3.运行下列程序段后,单击窗体,显示结果是⑴,再次单击窗体时,显示结果是⑵。去掉StaticTemp语句后,单击窗体,显示结果是⑶,再次单击窗体时,显示结果是⑷。PrivateFunctionFn2(tAsInteger)StaticTempTemp=Temp+tFn2=TempEndFunctionPrivateSubForm_Click()s=Fn2(1)+Fn2(2)+Fn2(3)PrintsEndSub4.设在窗体(启动窗体)上有一个命令按钮Command1,在该按钮的Click事件过程中已经写了一些代码,完成一定的功能,现要使程序运行时自动执行该按钮的功能,请在空白处填入合适的语句。PrivateSubForm_Load()EndSub5.从键盘输入一个十进制正整数(小于32767),利用过程To_hex的递归调用将该数转换为十六进制数。完善下列程序,使之求出正确结果。PublicSubTo_hex(nAsInteger)DimrAsInteger,chAsStringch=0123456789ABCDEFr=nMod16:n=n\16If⑴ThenTo_hex(⑵)EndIfPrintMid(⑶);EndSubPrivateSubForm_Load()DimnAsIntegerShown=Val(InputBox())To_hex(n)EndSub上机编程练习61.设计一个能检查字符串是否为数字字符串的通用过程,调用该过程检验3个框中输入的字符是否都是数字。如果都是数字,求这3个数字之和并把结果显示在第4个文本框中。2.编写一个标准模块,该模块包含一个能比较3个数大小和送回大数的Sub过程。调用该过程来求6个数的最大数。利用文本框控件数组和文本框来分别输入数据和输出最大数。3.窗体上含有两个文本框(Textl及Text
本文标题:第七章 过程(何国斌版本)
链接地址:https://www.777doc.com/doc-3777924 .html