VB第6章复习资料.docx

上传人:lao****ou 文档编号:364884 上传时间:2023-10-01 格式:DOCX 页数:15 大小:50.40KB
下载 相关 举报
VB第6章复习资料.docx_第1页
第1页 / 共15页
VB第6章复习资料.docx_第2页
第2页 / 共15页
VB第6章复习资料.docx_第3页
第3页 / 共15页
VB第6章复习资料.docx_第4页
第4页 / 共15页
VB第6章复习资料.docx_第5页
第5页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《VB第6章复习资料.docx》由会员分享,可在线阅读,更多相关《VB第6章复习资料.docx(15页珍藏版)》请在第一文库网上搜索。

1、VB第6章复习资料本文档内字体为阿里巴巴普惠体R,CTR1+A全选可调整字体属性及字体大小-CA1-FENGHA1NetworkInformationTechno1ogyCompany.2023YEAR第6章补充资料习题解答1 .简述子过程和函数过程的共同点和不同之处.解答:子过程和函数过程的共同点:函数过程和子过程都是功能相对独立的一种子程序结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可以避免书写重复的程序语句,缩短代码,而且可以使程序条理清晰,容易阅读。子过程和函数过程的不同点:(1)过程声明的关键字不同,子过程用的是Sub,函数过程用的是Function0(2)子过程

2、名无值就无类型声明,函数过程名有值就有类型声明。(3)函数过程名兼作结果变量,因此在函数过程体内至少对函数过程名赋值;而子过程名在过程体内不能赋值。(4)调用方式不同,子过程是一条独立的语句,可用CaII子过程名或省略CaII直接以子过程名调用;函数过程不是一条独立的语句,是一个函数值,必须参与表达式的运算。(5) 一般来说,一个函数过程可以被一个子过程代替,代替时只要改变函数过程定义的形式,并在子过程的形参表中增加一个地址传递的形参来传递结果。2.什么是形参,什么是实参什么是值引用什么是地址引用地址引用时,对应的实参有什么限制解答:形参是在定义过程时的一种形式虚设的参数,只代表了该过程参数的

3、个数、类型、位置、形参的名字并不重要,也没有任何值,只表示在过程体内进行某种运算或处理。实参是调用子过程时提供给过程形参的初始值或通过过程体处理后获得的结果。调用时用实参代替形参,实参与形参在个数、类型、位置一一对应,实参与形参名相同与否无关。实参与形参的结合有两种方法,即传地址(ByRef)和传值(ByVaD,或称地址引用和值引用,缺省为地址引用。值引用时,系统将实参的值传递给对应的形参,实参与形参断开了联系。如果在过程体中改变形参的值,不会影响到实参。地址引用时,实参与形参变量共用同一个存储单元,如果在过程中改变了形参的值,对应的实参也将发生改变。地址引用时,实参只能是变量,不能是常量或表

4、达式。3.指出下面过程语句说明中的错误:(1) Subf1(n%)AsInteger(2) Functionf1%(f1%)(3) Subf1(ByVa1n%()(4) Subf1(x(i)asInteger)解答:(1)错误为SUb子过程名无返回值,也就没有类型。(2)函数名与形参名相同。(3)形参n为数组,不允许声明为ByVa1值传递。(4)形参X(i)不允许为数组元素。4.已知有如下求两个平方数和的fsum子过程:Pub1icSubfsum(sum%,ByVa1m%,ByVa1n%)sum=a*a+b*bEndSub在事件过程中若有如下变量声明:PrivateSubCommand1_C1

5、ick()Dima%,b%,c!a=10:b=20则指出如下过程调用语句的错误所在:(1) fsum3,4,5(2) fsumc,a,b(3) fusma+b,a,b(4)Ca11fsum(Sqr(c),Sqr(a),Sqr(b)(5)Ca11fsumc,a,b解答:(1) fsum子过程的第一个形参是地址传递,因此对应的实参3不应该是常量。(2) fsum子过程的第一个形参是整形而且是地址传递,对应的实参c是单精度,类型不匹配。(3) fsum子过程的第一个形参是地址传递,因此对应的实参a+b不应该是表达式。(4)fsum子过程的第一个形参是地址传递,因此对应的实参Sqr(c)不应该是表达式

6、。(5)用Ca11语句调用fsum子过程,必须加圆括号括起实参。5.利用迭代法求方程x2-a=0的近似根,要求精度为10、5,迭代公式为Xi+1=1/2(Xi+aXi)0编制三个过程:迭代函数过程、迭代子过程和递归法函数过程。解答:假定a为10,三种过程的执行效果如图所示,程序代码如下:PrivateSubCommand1_C1ick()Print函数过程;f1(10)Ca11si(x!,10)Print子过程;x!Print递柜调用“;dgf(x,10)EndSubPub1icFunctionf1!(a!)函数过程DimX!,X1!x1=aDox=(x+ax)/2IfAbs(x-x1)The

7、nExitDox1=x1oopEndSubPub1icFunctiondgf!(x,a!)递归调用x1=(x+ax)/2IfAbs(x-x1)通用声明段或标准模块声明的模块级变量、局部过程声明的静态变量(Static)o7 .为了使某变量在所有的窗体中都能使用,应在何处声明该变量解答:在标准模块声明为全局变量。8 .在同一模块、不同过程中声明的相同变量名,两者是否表示同一个变量两者间有没有联系解答:表示不同的变量,没有任何关系。常见错误和难点分析1 .程序设计算法的问题该章程序编写难度较大,主要是算法的构思有困难,这也是程序设计中最难学习的阶段。但是对每一位程序设计的初学者,没有捷径可走,一定

8、要多看、多练、知难而进。上机前一定要先编写好程序,仔细分析、检查,才能提高上机调试的效率。2 .确定自定义的过程是子过程还是函数过程实际上过程是一个具有某种功能的独立程序单位,可供多次调用。子过程与函数过程的区别是前者子过程名无值;后者函数过程名有值。若过程有一个返回值,则习惯使用函数过程;若过程无返回值,则使用子过程;若过程返回多个值,一般使用子过程,通过实参与形参的结合返回结果,当然也可通过函数过程名返回一个,其余结果通过实参与形参的结合返回。3 .过程中确定形参的个数和传递方式对初学者,在定义过程时较难确定形参的个数和传递方式。过程中参数的作用是实现过程与调用者的数据传递。一方面,调用者

9、为子过程或函数过程提供初值,这是通过实参传递给形参实现的;另一方面,子过程或函数过程将结果传递给调用者,这是通过地址传递方式实现的。因此,决定形参的个数就是由上述两方面决定的。对初学者,往往喜欢把过程体中用到的所有变量全作为形参,这样就增加了调拥者的负担和出错概率;也有的初学者全部省略了形参,因此无法实现数据的传递,既不能从调用者得到初值,也无法将计算结果传递给调用者。VB中形参与实参的结合有传值和传地址两种方式。区别如下:(1)在定义形式上前者在形参前加ByVaI关键字,后者在形参前加ByRef关键字或缺省。(2)在作用上值传递只能从外界向过程传入初值,但不能将结果传出;而地址传递既可传入又

10、可传出。(3)如果实参是数组、自定义类型、对象变量等,形参只能是地址传递。4 .实参与形参类型对应的问题在地址传递方式时,调用过程实参与形参类型要一致。例如:函数过程定义如下:Pub1icFunctionf!(x!)f=x+xEndFunction主调程序如下:PrivateSubCommand1_C1ick()Dimy%Y=3Printf(y)EndSub上例形参X是单精度型、实参y是整形,程序运行时会显示ByRef参数类型不符的编译提示信息。在值传递时,若是数值型,则实参按形参的类型将值传递给形参,例如:函数过程定义如下:Pub1icFunctionf!(x!)f=x+xEndFuncti

11、on主调程序如下:PrivateSubCommand1_C1ick()Dimy%y=Printf(y)EndSub程序运行后显示的结果是6。5 .变量的作用域问题局部变量,在对该过程调用时,分配该变量的存储空间,当过程调用结束时,回收分配的存储空间,也就是调用一次,初始化一次,变量值不保留;窗体级变量,当窗体装入时,分配该变量的存储空间,直到该窗体从内存卸掉,才回收该变量分配的存储空间。例如,要通过文本框输入若干个值,每输入一个按Enter键,直到输入的值为9999,输入结束,求输入数的平均值。PrivateSubText1_KeyPress(KeyAsciiAsInteger)Dimsum!

12、,n%IfKeyAscii=13ThenIfVa1(Text1)=9999Thensum=sum/nPrintsumE1sesum=sum+Va1(Text1)n=n+1Text1=EndIfEndIfEndSub该过程没有语法错,运行程序可输入若干个数,但当输入9999时,程序显示“溢出”的错误。因为SUm和n是局部变量,每按一个键,局部变量初始化为0,所以会有上述错误产生。改进方法:将要保值的局部变量声明为StatiC静态变量,也可将要保值的变量在通用声明段进行声明为窗体级变量。6 .递归调用出现“栈溢出”如下求阶乘的递归函数过程:Pub1icFunctionfac(nAsInteger)

13、AsIntegerIfn=1Thenfac=1E1sefac=n*fac(n-1)EndIfEndFunctionPrivateSubCommand1_C1ick()调用递归函数,显示出fac(5)=120Printfac(5)=;fac(5)EndSub当主调程序调用时,n的值为5时,显示结果为120;当n的值为-5时,显示“溢出堆栈空间”的提示信息。实际上每递归调用一次,系统将当前状态信息(形参、局部变量、调用结束时的返回地址)压栈,直到到达递归结束条件。上例中当n=5时,每递归调用一次,参数n-1直到n=1时递归调用结束,然后不断从栈中弹出当前参数,直到栈空。而当n=-5时,参数n-1为

14、-6,压栈,再递归调用n-1永远到不了n=1的终止条件,直到栈满,产生栈溢出的提示信息。所以设计递归过程时,一定要考虑过程中有终止的条件和终止时的值或某种操作,而且每递归调用一次,其中的参数就要向终止方向收敛,否则就会产生栈溢出。测试题一、选择题1.设有如下程序段:Pub1icSubF1(n%)n=3*n+4EndSubPrivateSubCommand1C1ick()Dimn%,m%n=3m二4调用F1语句EndSub则在CommandC1ick事件中有效的调用语句是(A)Ca11F1(n+m)(B)Ca11F1(m)(C)Ca11F1(5)(D)Ca11F1(m+5)2 .下面子过程语句说

15、明合法的是_o(A)Subf1(ByVa1n%()(B)Subf1(n%)AsInteger(C)Functionf1%(f1%)(D)Funtionf1(ByVa1n%)3 .要想从子过程调用后返回两个结果,下面子过程语句说明合法的是_0(A) Subf2(ByVa1n%,ByVa1m%)(B) Subf1(n%,ByVa1m%)(C) Subf1(n%,m%)Subf1(ByVa1n%,m%)7.如下程序的运行结果是Pub1icSubProc(a%O)Statici%Doa(i)=a(i)+a(i+1)i=i+11oopWhi1ei2EndSubPrivateSubCommand1_C1ick(

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

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服