首页 VB第6章 复习资料

VB第6章 复习资料

举报
开通vip

VB第6章 复习资料VB第6章复习资料第6章补充资料习题解答1.简述子过程和函数过程的共同点和不同之处.解答:子过程和函数过程的共同点:函数过程和子过程都是功能相对独立的一种子程序结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可以避免书写重复的程序语句,缩短代码,而且可以使程序条理清晰,容易阅读。子过程和函数过程的不同点:(1)过程声明的关键字不同,子过程用的是Sub,函数过程用的是Function。(2)子过程名无值就无类型声明,函数过程名有值就有类型声明。(3)函数过程名兼作结果变量,因此在函数过程体内至少对函数...

VB第6章 复习资料
VB第6章复习 资料 新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单 第6章补充资料习题解答1.简述子过程和函数过程的共同点和不同之处.解答:子过程和函数过程的共同点:函数过程和子过程都是功能相对独立的一种子程序结构,它们有各自的过程头、变量声明和过程体。在程序中使用它们不但可以避免书写重复的程序语句,缩短代码,而且可以使程序条理清晰,容易阅读。子过程和函数过程的不同点:(1)过程声明的关键字不同,子过程用的是Sub,函数过程用的是Function。(2)子过程名无值就无类型声明,函数过程名有值就有类型声明。(3)函数过程名兼作结果变量,因此在函数过程体内至少对函数过程名赋值;而子过程名在过程体内不能赋值。(4)调用方式不同,子过程是一条独立的语句,可用Call子过程名或省略Call直接以子过程名调用;函数过程不是一条独立的语句,是一个函数值,必须参与 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式的运算。(5)一般来说,一个函数过程可以被一个子过程代替,代替时只要改变函数过程定义的形式,并在子过程的形参表中增加一个地址传递的形参来传递结果。 2.什么是形参,什么是实参什么是值引用什么是地址引用地址引用时,对应的实参有什么限制 解答:形参是在定义过程时的一种形式虚设的参数,只代表了该过程参数的个数、类型、位置、形参的名字并不重要,也没有任何值,只表示在过程体内进行某种运算或处理。 实参是调用子过程时提供给过程形参的初始值或通过过程体处理后获得的结果。 调用时用实参代替形参,实参与形参在个数、类型、位置一一对应,实参与形参名相同与否无关。 实参与形参的结合有两种方法,即传地址(ByRef)和传值(ByVal),或称地址引用和值引用,缺省为地址引用。值引用时,系统将实参的值传递给对应的形参,实参与形参断开了联系。如果在过程体中改变形参的值,不会影响到实参。地址引用时,实参与形参变量共用同一个存储单元,如果在过程中改变了形参的值,对应的实参也将发生改变。地址引用时,实参只能是变量,不能是常量或表达式。3.指出下面过程语句说明中的错误:(1)Subf1(n%)AsInteger(2)Functionf1%(f1%)(3)Subf1(ByValn%())(4)Subf1(x(i)asInteger)解答:(1)错误为Sub子过程名无返回值,也就没有类型。(2)函数名与形参名相同。(3)形参n为数组,不允许声明为ByVal值传递。(4)形参x(i)不允许为数组元素。4.已知有如下求两个平方数和的fsum子过程:PublicSubfsum(sum%,ByValm%,ByValn%)sum=a*a+b*bEndSub在事件过程中若有如下变量声明:PrivateSubCommand1_Click()Dima%,b%,c!a=10:b=20则指出如下过程调用语句的错误所在:(1)fsum3,4,5(2)fsumc,a,b(3)fusma+b,a,b(4)Callfsum(Sqr(c),Sqr(a),Sqr(b))(5)Callfsumc,a,b解答:(1)fsum子过程的第一个形参是地址传递,因此对应的实参3不应该是常量。(2)fsum子过程的第一个形参是整形而且是地址传递,对应的实参c是单精度,类型不匹配。(3)fsum子过程的第一个形参是地址传递,因此对应的实参a+b不应该是表达式。(4)fsum子过程的第一个形参是地址传递,因此对应的实参Sqr(c)不应该是表达式。(5)用Call语句调用fsum子过程,必须加圆括号括起实参。5.利用迭代法求方程x^2-a=0的近似根,要求精度为10^-5,迭代公式为Xi+1=1/2(Xi+a/Xi)。编制三个过程:迭代函数过程、迭代子过程和递归法函数过程。解答:假定a为10,三种过程的执行效果如图所示,程序代码如下:PrivateSubCommand1_Click()Print"函数过程";f1(10)Calls1(x!,10)Print"子过程";x!Print"递柜调用";dgf(x,10)EndSubPublicFunctionf1!(a!)'函数过程DimX!,X1!x1=aDox=(x+a/x)/2IfAbs(x-x1) 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 模块声明的模块级变量、局部过程声明的静态变量(Static)。7.为了使某变量在所有的窗体中都能使用,应在何处声明该变量解答:在标准模块声明为全局变量。8.在同一模块、不同过程中声明的相同变量名,两者是否表示同一个变量两者间有没有联系解答:表示不同的变量,没有任何关系。常见错误和难点 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析   1.程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 算法的问题   该章程序编写难度较大,主要是算法的构思有困难,这也是程序设计中最难学习的阶段。但是对每一位程序设计的初学者,没有捷径可走,一定要多看、多练、知难而进。上机前一定要先编写好程序,仔细分析、检查,才能提高上机调试的效率。  2.确定自定义的过程是子过程还是函数过程   实际上过程是一个具有某种功能的独立程序单位,可供多次调用。子过程与函数过程的区别是前者子过程名无值;后者函数过程名有值。若过程有一个返回值,则习惯使用函数过程;若过程无返回值,则使用子过程;若过程返回多个值,一般使用子过程,通过实参与形参的结合返回结果,当然也可通过函数过程名返回一个,其余结果通过实参与形参的结合返回。  3.过程中确定形参的个数和传递方式   对初学者,在定义过程时较难确定形参的个数和传递方式。   过程中参数的作用是实现过程与调用者的数据传递。一方面,调用者为子过程或函数过程提供初值,这是通过实参传递给形参实现的;另一方面,子过程或函数过程将结果传递给调用者,这是通过地址传递方式实现的。因此,决定形参的个数就是由上述两方面决定的。   对初学者,往往喜欢把过程体中用到的所有变量全作为形参,这样就增加了调拥者的负担和出错概率;也有的初学者全部省略了形参,因此无法实现数据的传递,既不能从调用者得到初值,也无法将计算结果传递给调用者。   VB中形参与实参的结合有传值和传地址两种方式。区别如下:(1)在定义形式上前者在形参前加ByVal关键字,后者在形参前加ByRef关键字或缺省。(2)在作用上值传递只能从外界向过程传入初值,但不能将结果传出;而地址传递既可传入又可传出。(3)如果实参是数组、自定义类型、对象变量等,形参只能是地址传递。4.实参与形参类型对应的问题在地址传递方式时,调用过程实参与形参类型要一致。例如:函数过程定义如下:PublicFunctionf!(x!)f=x+xEndFunction主调程序如下:PrivateSubCommand1_Click()Dimy%y=3Printf(y)EndSub上例形参x是单精度型、实参y是整形,程序运行时会显示"ByRef参数类型不符"的编译提示信息。在值传递时,若是数值型,则实参按形参的类型将值传递给形参,例如:函数过程定义如下:PublicFunctionf!(x!)f=x+xEndFunction主调程序如下:PrivateSubCommand1_Click()Dimy%y=Printf(y)EndSub程序运行后显示的结果是6。5.变量的作用域问题局部变量,在对该过程调用时,分配该变量的存储空间,当过程调用结束时,回收分配的存储空间,也就是调用一次,初始化一次,变量值不保留;窗体级变量,当窗体装入时,分配该变量的存储空间,直到该窗体从内存卸掉,才回收该变量分配的存储空间。例如,要通过文本框输入若干个值,每输入一个按Enter键,直到输入的值为9999,输入结束,求输入数的平均值。PrivateSubText1_KeyPress(KeyAsciiAsInteger)Dimsum!,n%IfKeyAscii=13ThenIfVal(Text1)=9999Thensum=sum/nPrintsumElsesum=sum+Val(Text1)n=n+1Text1=""EndIfEndIfEndSub该过程没有语法错,运行程序可输入若干个数,但当输入9999时,程序显示“溢出”的错误。因为sum和n是局部变量,每按一个键,局部变量初始化为0,所以会有上述错误产生。改进方法:将要保值的局部变量声明为Static静态变量,也可将要保值的变量在通用声明段进行声明为窗体级变量。6.递归调用出现“栈溢出”如下求阶乘的递归函数过程:PublicFunctionfac(nAsInteger)AsInteger]Ifn=1Thenfac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubCommand1_Click()'调用递归函数,显示出fac(5)=120Print"fac(5)=";fac(5)EndSub当主调程序调用时,n的值为5时,显示结果为120;当n的值为-5时,显示“溢出堆栈空间”的提示信息。实际上每递归调用一次,系统将当前状态信息(形参、局部变量、调用结束时的返回地址)压栈,直到到达递归结束条件。上例中当n=5时,每递归调用一次,参数n-1,直到n=1时递归调用结束,然后不断从栈中弹出当前参数,直到栈空。而当n=-5时,参数n-1为-6,压栈,再递归调用n-1永远到不了n=1的终止条件,直到栈满,产生栈溢出的提示信息。所以设计递归过程时,一定要考虑过程中有终止的条件和终止时的值或某种操作,而且每递归调用一次,其中的参数就要向终止方向收敛,否则就会产生栈溢出。测试题一、选择题1.设有如下程序段:PublicSubF1(n%)...n=3*n+4...EndSubPrivate SubCommand1_Click()Dimn%,m%n=3m=4...'调用F1语句...EndSub则在Command1_Click事件中有效的调用语句是______。(A)CallF1(n+m)(B)CallF1(m)(C)CallF1(5)(D)CallF1(m+5)2.下面子过程语句说明合法的是______。(A)Subf1(ByValn%())(B)Subf1(n%)AsInteger(C)Functionf1%(f1%)(D)Funtionf1(ByValn%)3.要想从子过程调用后返回两个结果,下面子过程语句说明合法的是______。(A)Subf2(ByValn%,ByValm%)(B)Subf1(n%,ByValm%)(C)Subf1(n%,m%)(D)Subf1(ByValn%,m%)4.在过程中定义的变量,若希望在离开该过程后,还能保存过程中局部变量的值,则应使用______关键字在过程中定义局部变量。(A)Dim(B)Private(C)Public(D)Static5.下面过程运行后显示的结果是______。PublicSubF1(n%,ByValm%)PrivateSubCommand1_Click()n=nMod10Dimx%,y%m=m\10x=12:y=34EndSubCallF1(x,y)Printx,yEndSub(A)234(B)1234(C)23(D)1236.如下程序,运行的结果是______。Dima%,b%,c%PublicSubp1(x%,y%)Dimc%x=2*x:y=y+2:c=x+yEndSubPublicSubp2(x%,ByValy%)Dimc%x=2*x:y=y+2:c=x+yEndSubPrivateSubCommand1_Click()a=2:b=4:c=6Callp1(a,b)Print"a=";a;"b=";b;"c=";cCallp2(a,b)Print"a=";a;"b=";b;"c=";cEndSub(A)a=2b=4c=6(B)a=4b=6c=10a=4b=6c=10a=8b=8c=6(C)a=4b=6c=6(D)a=4b=6c=14a=8b=6c=6a=8b=8c=67.如下程序的运行结果是______。PublicSubProc(a%())Statici%Doa(i)=a(i)+a(i+1)i=i+1LoopWhilei<2EndSubPrivateSubCommand1_Click()Dimm%,i%,x%(10)Fori=0To4:x(i)=i+1:NextiFori=1To2:CallProc(x):NextiFori=0To4:Printx(i);:NextiEndSub(A)34756(B)35745(C)23445(D)45678二、填空题1.传地址方式是当过程被调用时,形参和实参共享_(1)__。2.按照如下要求书写函数过程定义的首语句,即Function__(2)___定义语句,要求为:形参有两个a为整形,b为一维整形数组,函数过程名为MyF,函数返回值为逻辑型。3.当形参是数组时,在过程体内对该数组操作时,为了确定数组的下界和上界,应分别用___(3)_和__(4)___函数。中的变量按其作用域分为全局变量、模块变量和_(5)____变量。5.窗体中的模块级变量应在__(6)___段声明,它作用与该窗体__(7)___。6.如下程序,运行的结果是_(8)____,函数过程的功能是__(9)___。PublicFunctionf(m%,n%)DoWhilem〈〉nDoWhilem>n:m=m-n:LoopDoWhilen>m:n=n-m:LoopLoopf=mEndFunctionPrivateSubCommand1_Click()Printf(24,18)EndSub7.将100~150之间的偶数,拆分成两个素数之和(只要一对即可),最后输出格式如图所示。其中,prime函数判断参数x是否为质数。PrivateFunctionprime(ByValxAsInteger)AsBooleanprime=__(10)____Fori=2ToSqr(x)If__(11)____Thenprime=FalseExitFunctionEndIfNextiEndFunctionPrivateSubForm_Click()i=1Forn=__(12)____Fork=3Ton/2Ifprime(k)_(13)_____ThenPrinti;":";n;"=";k;"+";n-kExitForEndIfNextk__(14)____NextnEndSub8.子过程MoveStr()是把字符数组移动m个位置,当Tag为True时左移,则前m个字符移到字符数组尾,例如,"abcdefghij"左移3个位置后,结果为"defghijabc";当Tag为False时右移,则后m个字符移到字符数组前,如"abcdefghij"右移3个位置后,结果为"hi-jabcdefg"。子过程如下:PublicSubMoveStr(a$(),m%,TagAsBoolean)Dimi%,j%,t$If__(15)____Then'左移Fori=1Tom__(16)_____Forj=0To__(17)____a(j)=a(j+1)Nextj__(18)____NextiElseFori=1Tom'右移_(19)_____Forj=Ubound(A)__(20)____a(j)=a(j-1)Nextj__(21)____NextiEndIfEndSub9.子过程CountN用来统计字符串中各数字字符("0"~"9")出现的个数;主调程序对在TextBox1框输入的文本,每次单击"统计"按钮,调用该子过程,在Label1框显示结果,如图所示。PrivateSubCommand1_Click()Dimn(9)AsInteger,i%CallCountN(n(),Fori=0To9Ifn(i)Then_(22)_____"字符"&i&"出现的次数为"&n(i)NextEndSubSubCountN(_(23)_____)DimcAsString*1,i%,m%,j%Fori=0To9num(i)=0Nextim=Len(s)Fori=1Tomc=__(24)____Ifc>="0"Andc<="9"Thenj=Val(c)num(j)=_(25)_____EndIfNextiEndSub10.子过程F(n,m,t)对一个四位数n整数判断:已知该整数n,逆向排列获得另一个4位数m是它自身的倍数(2倍以上),则t为True表示满足上述条件。主调程序用该函数,显示1000~9999中所有满足该条件的数,如图所示。提示:根据一个数n,逐一分离得到它的反序数m,然后判断m是否是n的倍数。PrivateSubCommand1_Click()DimtAsBoolean,i%,k%Text1=""Text2=""Fori=1000To9999Callf(_(26)_____)IftThenText1=Text1&i&vbCrLfText2=Text2&k&"="&i&"*"&k\i&vbCrLfEndIfNextEndSubSubf(ByValn%,ByRefm%,ByReftagAsBoolean)Dimi%tag=Falsem=0i=nDoWhilei>0m=_(27)_____'求得n的逆序i=__(28)____LoopIfmMOdn=0Andm\n>1Then'是否是倍数tag=______EndIfEndSub11.下列程序中的子过程MySplit(s,sAarray(),n)用于实现Split函数的功能(字符分离到数组),即将数字字符串s按分隔符“,”分离到sArray数组中,分离的个数为n。主调程序将文本框中输入的数字字符串按回车键后进行分离,结果在List1控件显示,如图所示。PrivateSubText1_KeyPress(KeyAsciiAsInteger)Dimstr1AsString,num(100)AsInteger,n%,i%If_(30)_____Thenstr1=TrimCallMySplit(__(31)____)=""Fori=0Tonnum(i)NextEndIfEndSubSubMySplit(ByValstr1AsString,ByRefsn()AsInteger,ByRefnAsInteger)Dimi%,j%,ch$i=0j=InStr(str1,",")DoWhilej>0sn(i)=Val(__(32)____)str1=Mid(str1,j+1)i=i+1j=__(33)____Loopsn(i)=Val(str10n=__(34)_____EndSub12.以下过程将一个有序数组中重复出现的数进行压缩,删除后只剩一个.主调程序运行后结果如图所示。Subp(a())Dimn%,m%,k%n=UBound(a)m=nDoWhile(_(35)_____)'从右往左比较、压缩Ifa(m)=a(m-1)ThenFork=__(36)____a(k-1)=a(k)Nextk__(37)____EndIf___(38)___LoopReDimPreservea(n)EndSubPrivateSubCommand1_Click()'主调程序调用P压缩过程Dimb(),i%b=Array(23,45,45,60,70,70,70,90)Callp(_(39)_____)Fori=0ToUBound(b)Printb(i);NextiEndSub13.在主教材中介绍的选择法、冒泡法排序都是在欲排序的数组元素全输入后,再进行排序。而插入排序是每输入一个数,马上插入到数组中,数组在输入过程中总是有序的,界面如图所示。在插入排序中,涉及查找、数组内数的移动和元素插入等算法。[提示]此例关键在于编一个插入排序过程,插入排序法的思路是:对数组中已有n个有序数,当输入某数x时:(1)找x应在数组中的位置j。(2)从n-j个数依次往后移,使位置为j的数让出。(3)将数x放入数组中应有的位置j,一个数插入完成。对于若干个数输入,只要调用插入排序过程即可。DimnAsIntegerPrivateSubText1_keypress(keyasciiAsInteger)Staticbb!(1To20)Dimi%Ifn=20ThenMsgBox"数据太多!",1,"警告"EndEndIfIfkeyascii=13Thenn=n+2insert_(40)_____Text1'打印刚输入的数Fori=1Ton'打印插入后的有序数bb(i)NextiText1=""EndIfEndSubSubinsert(a()AsSingle,ByValx!)Dimi%,j%j=1DoWhile__(41)____'查找x应插入的位置jj=j+1LoopFori=n-1TojStep-1'n-j个元素往右移__(42)____Nextia(j)=x'x插入数组中的第j个位置EndSub参考答案一、选择题F1子过程中的形参n是地址传递,可以从实参中获得初值,也可以把结果返回给主调程序,此时要求实参是变量,才能获得效果。而A、C、D调用时实参是表达式或常量,在VB中语法没有错(有的程序设计语言不允许),但得不到子过程中操作的结果。A形参是数组,不允许为值传递;B子过程名无值也无类型,F1不能声明为整形;C函数名与形参名同名。注意:在VB中允许子过程名与形参名同名,例如,C改为:Subf1(f1%)认为是正确的,因为子过程名无值,不会产生二义性,但尽量不要这样写,因为在有的程序设计语言中不允许。原因同第1题。Static具有保值的特点;不能在过程体内声明Public、Private变量。原因同第1题。P1子过程的形参都是地址传递,P2子过程x是地址传递,y是值传递。形参是数组,是地址传递,实参可得到过程中操作的结果。二、填空题(1)存储单元(2)MyF(a%,b%())AsBoolean(3)LBound()(4)UBound()(5)局部变量(6)通用声明(7)所有过程(8)6(9)用辗转相减法求m、n的最大公约数求最大公约数通常是用辗转相除法。(10)True初值假定为素数。(11)mModi=0'只要被i整除,x就不是质数。(12)100To150(13)Andprime(n-k)'拆分成两个素数。(14)i=i+1'统计满足的个数。(15)Tag'Tag为True左移。(16)c=a(0)'将最左边的元素移出。(17)Ubound(a)-1'数组上界减一个,循环完成,所有元素左移一次,最右边空出位置,留给最左边的刚移出元素a(0)(18)a(Ubound(a))=c'最左边的刚移出元素移到最右边(19)c=a(Ubound(a))'将最右边的元素移出(20)To1Step-1'意义同11,仅是右移。右移从右边开始逐一往右移,最左空出位置,留给最右边的移出元素a(Ubound(a))(21)a(0)=c'一次右移完成(22)'在列表框显示结果(23)ByRefnum%(),ByValAsString'与主调程序对应实参的关系,注意是地址传递还是值传递(24)Mid(s,i,1)'取一个字符进行判断(25)num(j)+1'对应数字元素加1(26)i,k,t'注意与形参对应关系(27)m*10+iMod10'求得n的逆序(28)i\10'取整(29)True'是原数的倍数(30)KeyAscii=13'按回车键表示输入结束(31)str1,num,n'调用时的实参(32)Mid(str1,1,j-1)'分离出一个数据项(33)InStr(str1,",")'找下一个分离的数(34)I'获得分离出的个数(35)m>0'从右往左比较(36)mton'当出现重复的数,从当前重复的数到最右端,逐一往前移动一个,实现压缩(37)n=n-1'压缩后数组元素减少一个(38)m=m-1'往左比较下一个(39)b()'实参是数组(40)bb(),Val(Text1)'调用插入过程(41)ja(j)'查找插入的位置(42)a(i+1)=a(i)'第n-j个元素往右移CTRL+A全选可调整字体属性及字体大小-CAL-FENGHAI.NetworkInformationTechnologyCompany.2020YEAR
本文档为【VB第6章 复习资料】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
橙子到此一游
暂无简介~
格式:doc
大小:144KB
软件:Word
页数:0
分类:
上传时间:2021-02-23
浏览量:1