vb大一程序设计第八章习题答案1.docx
《vb大一程序设计第八章习题答案1.docx》由会员分享,可在线阅读,更多相关《vb大一程序设计第八章习题答案1.docx(19页珍藏版)》请在冰豆网上搜索。
![vb大一程序设计第八章习题答案1.docx](https://file1.bdocx.com/fileroot1/2023-1/30/fce9716e-5eec-4ef5-9b02-e00bcfddd436/fce9716e-5eec-4ef5-9b02-e00bcfddd4361.gif)
vb大一程序设计第八章习题答案1
第八章
1.Sub过程与Function过程的主要区别是B
A.Sub过程可以通过Call语句调用,而Function过程不可以
B.Sub过程不能通过过程名返回值,而Function过程可以
C.Sub过程与Function过程的参数传递方式不一样
D.Function过程只能返回1个值,而Sub过程可以返回多个值
2.以下叙述中错误的是C.。
A.在Sub过程中可以调用Function过程
B.可以在程序的任何地方调用以Public声明的过程
C.在Sub过程中可以嵌套定义Function过程
D.用Static声明的过程中的局部变量都是Stati变量
3.以下关于函数过程的叙述中,正确的是A。
A.函数过程虚参的类型与函数返回值的类型没有关系
B.在函数过程中,过程的返回值可以有多个
C.当数组作为函数过程的参数时,既能以按值方式传递,也能以按址方式传递
D.若不指明函数过程参数的类型,则该参数没有数据类型
4.以下叙述中错误的是B。
在VB应用程序中,
A.过程的定义不可以嵌套,但过程的调用可以嵌套
B.过程的定义可以嵌套,但过程的调用不能嵌套
C.程序设计人员不能任意指定事件过程的名称
D.在Function过程中可以Sub过程
5.下列描述中正确的是(A)
(A)VB只能通过调用Sub过程
(B)Sub过程可以嵌套定义也可以嵌套调
(C)可以在Sub过程中定义1个Function过程,但不能定义Sub过程
(D)Sub过程和Function过程都必须带返回值
6.下列叙述中正确的是((B))
(A)一个Sub过程至少要有一个ExitSub语句
(B)一个Sub过程必须有一个EndSub语句
(C)可以在Sub过程中定义一个Function过程,但不能定义Sub过程
(D)调用一个Function过程可以获得多个返回值
7.以下语句用来定义过程subP,其中正确的是D。
A.DimSubsubP(x,y)B.PublicsubP(x,y)
C.PrivateSubsubP(x,y)AsIntegerD.SubsubP(x,y)
8.在窗体上放置2个标签和一个命令按钮,其名称分别为Label1.、Label2、command1
PrivateSubCommand1_Click()
a=Val(Label2.Caption)
Callfunc(Label1,a)
Label2.Caption=a
EndSub
PrivateSubForm_Load()
Label1.Caption="ABCDE"
Label2.Caption=10
EndSub
PrivateSubfunc(LAsLabel,ByValXAsInteger)
L.Caption="1234"
a=a*a
EndSub
程序运行后,单击命令按钮在2个标签中显示的内容分别是123410
9.OptionBase1
Subsubp(b()AsInteger)
Fori=1To3
b(i)=3*i
Nexti
EndSub
PrivateSubCommand1_Click()
Dima(3)AsInteger
arr=Array(8,4,3)
Fori=1To3
a(i)=arr(i)
Nexti
subpa()
Fori=1To3
Printa(i)
Nexti
EndSub
运行程序后,在窗体上输出的内容为(A)
A)3 6 9 B)8 4 3 C)9 6 3 D)3 4 8
10.Functionfunc(aAsInteger,bAsInteger)AsInteger
StaticxAsInteger,yAsInteger
x=0:
y=2
y=y+x+1:
x=y+a+b
func=x
EndFunction
PrivateSubCommand1_Click()
StatickAsInteger,mAsInteger
DimpAsInteger
k=5:
m=2
p=func(k,m)
Printp
p=func(k,m)
Printp
EndSub输出结果是1010
11.Subs1(ByValxAsInteger,ByValyAsInteger)
DimtAsInteger
t=x:
x=y:
y=t
EndSub
PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger
a=10:
b=30
s1a,b
Print"a=";a;"b=";b
EndSub
运行程序后,在窗体上输出的内容为(C)
A)a = 30 b = 10
B)a = 30 b = 30
C)a = 10 b = 30
D)a = 10 b = 10
12.Subs(xAsSingle,yAsSingle)
t=x:
x=t/y:
y=tMody
EndSub
PrivateSubCommand1_Click()
DimaAsSingle,bAsSingle
a=5:
b=4
sa,b
Printa;b
EndSub
输出结果1.251
13.Functionsubl(aAsInteger,ByValbAsInteger)AsInteger
a=Val(b)
subl=a
Printsubl
EndFunction
PrivateSubCommand1_Click()
Callsubl(-15.1,2.54)
EndSub
运行程序后,在窗体上输出的内容为(A)
A)3 B)2 C)-15 D)提示错误运行结果3
14.假定有以下两个过程:
SubS1(ByValxAsInteger,ByValyAsInteger)
DimtAsInteger
t=x:
x=y:
y=t
EndSubSub
S2(xAsInteger,yAsInteger)
DimtAsInteger
t=x:
x=y:
y=t
EndSub
则以下说法中正确的是(B)
A.用过程S1可以实现交换两个变量值的操作,S2不能实现
B.用过程S2可以实现交换两个变量值的操作,S1不能实现
C.用过程S1和S2都可以实现交换两个变量值的操作
D.用过程S1和S2都不能实现交换两个变量值的操作
15.下列关于过程及过程参数的描述中,错误的是(C)
A.过程的参数可以是控件名称
B.用数组作为过程的参数时,使用的是“传地址”方式
C.只有函数过程能够将过程中处理的信息传回调用的程序中
D.窗体可以作为过程的参数
16.以下说法正确的是( D )
A)事件过程也是过程,与通用过程完全一样
B)事件过程是程序员编写的各种子过程
C)事件过程通常放在标准模块中
D)事件过程是用来处理由用户操作或系统激发的事件的代码
17.执行“工程”菜单中的(D)命令可以添加一个标准模块。
A)添加过程B)通用过程C)添加窗体D)添加模块
18.通用过程可以通过执行“工具”菜单中的(A)命令来建立。
A)添加过程B)通用过程C)添加窗体D)添加模块
二填空题
1.
Functionfun(sAsInteger)
Fori=1Tos
Sum=Sum+i
Nexti
fun=Sum
EndFunction
PrivateSubForm_Click()
Text1.Text=Str(fun(10))
EndSub
PrivateSubtext1_change()
Label1.Caption="vbprogramming"
EndSub
文本框中显示55,而标签框中显示vbprogramming
2.阅读程序
Functionfun(xAsLong)AsInteger
IfxMod2=0Then
fun=True
(1)
Else
fun=iffun=False
(2)
EndIf
EndFunction
PrivateSubCommand1_Click()
DimnumAsLong
num=Val(Text1.Text)
p=IIf(fun(num),"奇数","偶数")(3)
PrintStr(num)&"是1个“"&p;""
EndSub
3.在命令按钮事件过程中定义1个数组,将这个数组作为参数转送到通用过程FindMax,并返回该数组的最大值
OptionBase1
Dimarr2()AsInteger
PrivateFunctionfindmax(a()AsInteger)AsInteger
DimstartAsInteger,finishAsInteger,iAsInteger
start=LBound(a)
finish=UBound(a)
Max=a(Start)
Fori=start+1Tofinish
Ifa(i)>MaxThenMax=a(i)
Nexti
findmax=Max
EndFunction
PrivateSubCommand1_Click()
Dimarr1
arr1=Array(12,435,76,24,78,54,866,43)
b=UBound(arr1)
ReDimarr2(8)AsInteger
Fori=1Tob
arr2(i)=CInt(arr1(i))
Nexti
m=findmax(arr2)
Print"最大值:
";m
EndSub
命令按钮的单击事件过程中定义1个数组,把这个数组作为参数传送到通用过程FindMax,并返回该数组的最大值
PrivateSubCommand1_Click()
Dima(1to10)AsInteger,IAsInteger,ResultAsInteger
ForI=1to10
a(i)=inputbox(“enternumplease”)
NextI
Result=FindMax(a)
Print“数组a中的最大值为:
”;result
EndSub
PrivateFunctionFindMax(b()AsInteger)
Dims1asInteger,s2ASInteger,maxAsInteger
S1=Lbound(b)
S2=Ubound(b)
max=b(s1)
ForI=s1tos2
Ifmax
Max=b(i)
Endif
NextI
FindMax=max
EndFunction
三.程序设计
1用递归过程计算两个整数的最大公约数
PrivateSubCommand1_Click()
DimmAsLong,nAsLong
m=Val(Text1.Text)
n=Val(Text2.Text)
Label3.Caption=m&"与"&n&"最大公约数是"
Ifmt=m:
m=n:
n=t
EndIf
Label3.Caption=Label3.Caption&gcd(m,n)
EndSub
PrivateFunctiongcd(aAsLong,bAsLong)AsLong
IfaModb=0Then
gcd=b
Else
gcd=gcd(b,aModb)
EndIf
EndFunction
2.求S=A!
+B!
+C!
PrivateSubCommand1_Click()
DimS1AsLong,S2AsLong,S3AsLong
S1=Val(InputBox("请输入第1数:
",,4))
S2=Val(InputBox("请输入第2数:
",,5))
S3=Val(InputBox("请输入第3数:
",,6))
MsgBoxS1&"!
+"&S2&"!
+"&S3&"!
="&JC(S1)+JC(S2)+JC(S3)
EndSub
PrivateFunctionJC(ByValSAsDouble)AsDouble
IfS=1ThenJC=1:
ExitFunction
JC=S*JC(S-1)
EndFunction
另外一种方法
PrivateSubCommand1_Click()
DimS1AsLong,S2AsLong,S3AsLong
DimJAsDouble,SAsDouble,IAsDouble
S1=Val(InputBox("请输入第1数:
",,4))
S2=Val(InputBox("请输入第2数:
",,5))
S3=Val(InputBox("请输入第3数:
",,6))
J=1
ForI=1ToS1
J=J*I
Next
S=S+J
J=1
ForI=1ToS2
J=J*I
Next
S=S+J
J=1
ForI=1ToS3
J=J*I
Next
S=S+J
MsgBoxS1&"!
+"&S2&"!
+"&S3&"!
="&S
EndSub
3.打印裴波纳契数列。
裴波纳契数列具有以下特点:
它的第一个数为0,第二个数为1,第三个数以后的数是前两个数的和。
OptionBase1
PrivateSubForm_Click()
DimnAsInteger,mAsInteger,kAsInteger,f()AsLong
m=InputBox("请输入要打印的数列项数","输入项数",10)
ReDimf(m)
f
(1)=0:
f
(2)=1
Forn=3Tom
f(n)=f(n-1)+f(n-2)
Nextn
Cls
PrintTab(10);"裴波纳契数列"
Print
k=1
Forn=1Tom
PrintTab(k*10);f(n);
Ifk=4Then
Print
k=0
EndIf
k=k+1
Nextn
EndSub
4.编一个子过程,将字符串s1中出现的子字符串s2删去,结果还是存放在s1中
PrivateFunctionDeleStr(s1AsString,ByVals2AsString)AsString
Dimi%,Is2%,Is1%
i=InStr(s1,s2)
ls2=Len(s2)
DoWhilei>0
ls1=Len(s1)
s1=Left(s1,i-1)+Mid(s1,i+ls2)
i=InStr(s1,s2)
Loop
DeleStr=s1
EndFunction
PrivateSubCommand1_Click()
Dimss1AsString
ss1=Text1.Text
ss1=DeleStr(ss1,Text2.Text)
Text3.Text=ss1
EndSub
5.对若干个整数按升序排列
PrivateSubform_click()
Dimnums()
DimiAsInteger,jAsInteger,nAsInteger,tAsInteger
n=Val(InputBox("请输入参加排序的数:
"))
ReDimnums(1Ton)
Fori=1Ton
nums(i)=Val(InputBox("请输入第"&Str(i)&"个参加排序的数"))
Nexti
Fori=1Ton-1
Forj=1Ton-i
Ifnums(j)>nums(j+1)Then
t=nums(j)
nums(j)=nums(j+1)
nums(j+1)=t
EndIf
Nextj
Nexti
Fori=1Ton
Printnums(i);
Nexti
EndSub
6.编写子程序验证哥德巴赫猜想
方法1
PrivateSubCommand1_Click()
DimNAsLong,IAsLong,JAsLong
IfIsNumeric(Text1.Text)Then
N=CLng(Text1.Text)
IfNMod2=0AndN>=6Then
ForI=2ToN\2
IfI=2OrPd(I)Then
J=N-I
IfPd(J)Then
Label1.Caption="结果:
"&N&"="&I&"+"&J&"符合!
"
ExitSub
EndIf
EndIf
Next
Label1.Caption="结果:
不符合!
"
Else
Text1.Text="请输入大于或等于6的偶数!
"
EndIf
Else
Text1.Text="请输入数字!
"
EndIf
EndSub
PrivateSubText1_GotFocus()
Text1.Text=""
Text1.ForeColor=&H0
Command1.Visible=True
EndSub
FunctionPd(aAsLong)AsBoolean
DimbAsLong
Forb=2Toa-1
DoEvents
IfaModb=0Then
Pd=False
ExitFor
Else
Pd=True
EndIf
Next
EndFunction
方法1:
PrivateSubForm_Click()
Dimn%,n1%,n2%
n=Val(InputBox("输入大于6的正整数"))
Forn1=3Ton\2Step2
n2=n-n1
IfPrime(n1)AndPrime(n2)Then
Printn&"="&n1&"+"&n2
ExitFor'结束循环
EndIf
Nextn1
EndSub
PrivateFunctionPrime(n%)AsBoolean
Dimk%,YesAsBoolean
Yes=True
Fork=2Ton\2
IfnModk=0ThenYes=False:
ExitFor
Nextk
Prime=Yes
EndFunction
7.已知函数sum(k,n)=1^k+2^k+3^k…+n^k。
已知k=2,n=5求值
PrivateFunctionPower(aAsInteger,bAsInteger)AsLong
DimiAsInteger,tAsLong
t=1
Fori=1Toa
t=t*b
Nexti
Power=t
EndFunction
PrivateFunctionSum(kAsInteger,nAsInteger)AsLong
DimiAsInteger,sAsInteger
Fori=1Ton
s=s+Power(k,i)
Nexti
Sum=s
EndFunction
PrivateSubForm_Click()
DimkAsInteger,nAsInteger,sAsLong
k=2
n=5
s=Sum(k,n)
Prints
EndSub
8.求1^2+2^2+3^2+4^2+…+k^2
PrivateSubForm_Click()
k=Val(InputBox("请输入k"))
s=0
Fori=1Tok
s=s+i^2
Next
MsgBox"结果为"&s
EndSub
9.当单击按钮时,从键盘上输入一个正整数,调用numdecl过程判断输入的数是否为降序数
PrivateSubCommand1_Click()
DimnAsLong,flagAsBoolean
n=InputBox("请输入一个正整数")
CallnumDec1(n,flag)
IfflagThen
Printn;"是降序数"
Else
Printn;"不是降序数"
EndIf
EndSub
PrivateSubnumDec1(nAsLong,flagAsBoolean)
DimxAsString,iAsInteger
x=Trim(Str(n))
Fori=1ToLen(x)
IfMid(x,i,1)Nexti
Ifi=Len(x)+1Thenflag=TrueElseflag=False
EndSub
10.编写程序,计算s!
=a!
+b!
+c!
PrivateSubCommand1_Click()
DimS1AsLong,S2AsLong,S3AsLong
S1=Text