vb课后练习答案习题解答.docx
《vb课后练习答案习题解答.docx》由会员分享,可在线阅读,更多相关《vb课后练习答案习题解答.docx(13页珍藏版)》请在冰豆网上搜索。
![vb课后练习答案习题解答.docx](https://file1.bdocx.com/fileroot1/2022-11/24/5074abec-42af-4c82-9c82-1103d2e7f559/5074abec-42af-4c82-9c82-1103d2e7f5591.gif)
vb课后练习答案习题解答
第7章过程
7.1填空题
1.一个VB应用程序可以包括的三种模块是:
()、()和()模块。
答案:
窗体模块、标准模块、类模块
2.函数过程定义中至少有一个赋值语句把表达式的值赋给()。
答案:
函数过程名
3.在VB中,过程定义中有两种传递形式的参数:
一种是(),称为传值调用;另一种是(),称为传址调用。
答案:
传值参数、传址参数
4.若模块中以关键字public定义子过程,则在()中都可以调用该过程。
答案:
整个应用程序
5.若窗体模块或标准模块中以关键字private定义函数过程,则该函数过程只能在()中使用。
答案:
该窗体模块或标准模块
6.每一个用标识符定义的变量、常量、过程都有一个有效围,这个围称为标识符的( )。
答案:
作用域
7.在模块定义的过程,若在关键字sub或Function加前缀Public,则该过程称为( )。
答案:
全局级过程或工程级过程
8.过程中定义的静态变量作用域是( ),生存期是( )。
答案:
该过程、整个应用程序运行结束之前
7.2选择题
1.标准模块中的代码存放在以()为扩展名的文件中。
a).frmb).basc).clsd).txt
答案:
b
2.()不能在标准模块中定义。
a)事件过程b)子过程c)函数过程d)公共过程
答案:
a
3.设已定义子过程p,有3个数值型传值参数;设a为实型变量,调用该子过程的正确语句为()。
a)pb)callp0.5,a,100
c)callp(0.5,cos(0.1),a+10)d)p(0.5,1.2,100)
答案:
c
4. 设已定义函数过程f,它有三个实型传值参数;设a,b和c为实型变量,则调用该函数的正确语句为()。
a)fb)f(a+b,b+c)
c)f(a+b,b+c,c+a)d)fa+b,b+c,c+a
答案:
c
5.在过程体中退出子过程的语句是()。
a)ExitDob)ExitFor
c)ExitSubd)ExitFunction
答案:
c
6.在过程的形式参数的前面加上关键字(),则该参数说明为传值参数。
a)Valb)refc)Byrefd)ByVal
答案:
d
7.关于过程作用域,错误的描述是()。
a)全局级过程的作用域为整个工程。
b)在某一窗体模块中定义的全局级过程,若被该模块外的模块所调用,必须在该过程名前加上窗体名称。
c)在不同模块中定义的模块级过程可以同名。
d)模块级过程与工程级过程不能同名。
答案:
d
8.关于变量的作用域,正确的描述是()。
a)在模块定义的变量,其作用域必定为所在模块。
b)同一模块中不同级的变量不能同名。
c)同一模块中所有在过程之外用Dim定义的变量为全局变量。
d)不同模块中定义的变量名字可以相同。
答案:
d
9.当鼠标在窗体上移动时,会发生()事件。
a)MouseDownb)MouseUp
c)MouseMoved)DragDown
答案:
c
10.当某个对象具有焦点时,在键盘上按下某一键时就会发生()事件。
a)KeyPressb)KeyUp
c)KeyDownd)DragDown
答案:
a、c
11.当用户()时,会引发焦点所在对象的KeyPress事件。
a)在键盘上按下有ASC码的键b)释放键盘上有ASC码的键
c)单击鼠标左键d)单击鼠标右键
答案:
a
12.当用户在键盘上按下一个有ASC码的键时会发生()事件。
a)KeyPress和KeyDownb)KeyPress和KeyUp
c)KeyDown和KeyUpd)KeyPress和KeyMove
答案:
a
7.3解答题
1.过程的主要作用是什么?
VB有什么类型的自定义过程?
试举例说明。
答:
过程的主要作用有两个:
一是任务划分。
即把一个复杂的任务划分为若干个小任务,每个小任务可以用过程来完成,从而使任务更易于理解,易于实现和维护;二是代码重用。
各种复杂的任务常常包含一些完全相同或非常相近的小任务。
把这些小任务独立地编成公用的过程,由各个任务调用,这样的做法可以避免重复的编程劳动。
在VB6中,有下列4种类型的自定义过程:
1)以关键字Sub开头的子过程;
2)以关键字Function开头的函数过程;
3)以关键字Property开头的属性过程;
4)以关键字Event开头的事件过程;
在教材中只介绍子过程和函数过程两种自定义过程。
例如,PrivateSubfact(ByvalnAsInteger,ByreffacAsLong)
DimtAsLong,iAsInteger
t=1
Fori=1Ton
t=t*i
Nexti
fac=t
EndSub
是一个求n的阶乘子过程。
又如,PrivateFunctionmax(ByValxAsInteger,ByValyAsInteger,ByValzAsInteger)
Ifx>yThenmax=xElsemax=y
Ifz>maxThenmax=z
EndFunction
是一个求三个数x、y和z最大值的函数过程。
2.传值参数和传址参数的主要作用是什么?
在调用过程进行参数传递时,它们之间有什么区别?
答:
传值参数的主要作用是把需处理的原始数据传送给被调用过程的形式参数。
传址参数的主要作用是把调用过程后的结果传递回给调用程序。
对传值参数来说,在调用过程进行参数传递时,是把实际参数的值直接传送给相应的传值参数。
值传送完之后,传值参数与相应的实际参数之间毫无任何联系。
即在调用过程时,传值参数的改变不会引起相应实际参数的改变。
对传址参数来说,在调用过程进行参数传递时,是把实际参数的地址传送给相应的传址参数。
调用过程时,对传址参数的任何操作都是对相应的实际参数进行。
即在调用过程时,传址参数的改变会引起相应实际参数的改变。
7.4阅读程序,并写出程序的运行结果。
1.PrivateSubp(ByValiAsInteger)
Dimj%,k%
Forj=0To7-i
Print"";
Nextj
Fork=0To2*i-1
Print"*";
Nextk
Print
EndSub
Privatesubcommand1_Click()
Dimi%
Fori=1To2
P(i)
Nexti
Fori=3To1Step-1
P(i)
Nexti
EndSub
答案:
**
****
******
****
**
2.PrivateSubCommand1_Click()
Dimm%
m=max(35,-21,480)
m=max(max(m,75,100),380,28)
Print"max=";m
EndSub
PrivateFunctionmax(ByValxAsInteger,ByValyAsInteger,ByValzAsInteger)
Ifx>yThenmax=xElsemax=y
Ifz>maxThenmax=z
EndFunction
答案:
max=480
3.PrivateSubCommand1_Click()
DimaAsInteger,bAsInteger,cAsInteger
Calls(10,5,a)
Calls(7,a,b)
Calls(a,b,c)
Print"a=";a,"b=";b,"c=";c
EndSub
PrivateSubs(xAsInteger,yAsInteger,zAsInteger)
z=y–x
EndSub
答案:
a=-5b=-12c=-7
4.PrivateSubCommand1_Click()
Dimi%
Constn=10
Dima(1Ton)AsInteger
Randomize
Fori=1Ton
a(i)=Int(Rnd*100+1)
Printa(i),
IfiMod4=0ThenPrint
Nexti
Print
Calls(a,n)
EndSub
PrivateSubs(a()AsInteger,ByValnAsInteger)
Dimi%,k%
Fori=1Ton
Ifa(i)Mod3=2Then
IfkMod4=0ThenPrint
Printa(i),
k=k+1
EndIf
Nexti
EndSub
答案:
输出10个1~100之间的随机整数,并把其中能被3除余2的数输出。
5.PublicxAsInteger
PrivateSubCommand1_Click()
x=10:
Printx
Calls1:
Printx
Calls2:
Printx
EndSub
PrivateSubs1()
x=x+20:
Printx
EndSub
PrivateSubs2()
DimxAsInteger
x=x+20:
Printx
EndSub
答案:
10
30
30
20
30
6.PrivateSubCommand1_Click()
s3
(1):
s3
(1):
s3
(1)
EndSub
PrivateSubs3(ByValaAsInteger)
DimxAsInteger
StaticyAsInteger
x=x+a:
y=y+a
Print"x=";x,"y=";y
EndSub
答案:
x=1y=1
x=1y=2
x=1y=3
7.5编程题
3.
,其中f(t)=(1+e
)/(1+e
),求g(2.5,3.4),g(1.7,2.5)和g(3.8,2.9)的值。
解答:
(1)界面设计和属性设置
在窗体上建立三个标签、三个文本框和两个命令按钮。
窗体和窗体上控件的主要属性设置如表3.7.3所示。
表3.7.3属性设置
控件名称
属性名
属性值
Form1
Caption
计算函数值
Label1
Caption
x=
Label2
Caption
y=
Label3
Caption
空串
Text1
Text
空串
Text2
Text
空串
Text3
Text
空串
Command1
Caption
计算
Command2
Caption
结束
(2)程序代码
PrivateSubCommand1_Click()
Dimx!
y!
x=Val(Text1.Text)
y=Val(Text2.Text)
Label3.Caption="g("&Str(x)&","&Str(y)&")="
Text3.Text=Str(g(x,y))
EndSub
PrivateSubCommand2_Click()
End
EndSub
PrivateFunctionf(ByValt!
)AsSingle
f=(1+Exp(-t))/(1+Exp(t))
EndFunction
PrivateFunctiong(ByValx!
ByValy!
)AsSingle
Ifx<=yThen
g=f(x+y)/(f(x)+f(y))
Else
g=f(x-y)/(f(x)+f(y))
EndIf
EndFunction
PrivateSubText1_Click()
Text1.Text="":
Text2.Text="":
Text3.Text=""
Label3.Caption=""
EndSub
(3)运行情况
运行程序后,屏幕出现用户界面。
把鼠标移到Text1文本框并单击,然后输入x(例如,2.5)。
再把鼠标移到Text2文本框并单击,然后输入y(例如,3.4)。
x和y输入后,单击标题为“计算”的命令按钮,系统执行相应的Click事件过程。
执行结果如图3.7.3所示。
求g(1.7,2.5)和g(3.8,2.9)的操作方法类似。
单击标题为“结束”的命令按钮,结束程序的执行。
图3.7.3执行结果
4.给定三组已按升序排列好的整型数据,使用过程编写程序把它们合并为一组仍能按升序排列的数据。
解答:
(1)界面设计和属性设置
在窗体上建立四个标签、四个文本框和两个命令按钮。
窗体和窗体上控件的主要属性设置如表3.7.4所示。
表3.7.4属性设置
控件名称
属性名
属性值
Form1
Caption
把三组升序数据合并为一组升序数据
Label1
Caption
第一组:
Label2
Caption
第二组:
Label3
Caption
第三组:
Label4
Caption
合并后:
Text1
Text
空串
Text2
Text
空串
Text3
Text
空串
Text4
Text
MultiLine
ScrollBars
空串
True
1
Command1
Caption
合并
Command2
Caption
结束
(2)程序代码
OptionExplicit
OptionBase1
DimaAsVariant,bAsVariant,cAsVariant
PrivateSubForm_load()
Dimi%
a=Array(1,2,7,8,9)
Fori=1To5'显示数组a的元素值
Text1.Text=Text1.Text&Str(a(i))
Nexti
b=Array(3,4,8,8,9,10,12,12)
Fori=1To8'显示数组b的元素值
Text2.Text=Text2.Text&Str(b(i))
Nexti
c=Array(1,5,5,6,8)
Fori=1To5'显示数组c的元素值
Text3.Text=Text3.Text&Str(c(i))
Nexti
EndSub
PrivateSubCommand1_Click()
Dimi%,m%,n%,p%
m=UBound(a)
n=UBound(b)
p=UBound(c)
Dimd()
ReDimd(m+n)
Callgsort(a,b,d)
Dime()
ReDime(m+n+p)
Callgsort(c,d,e)
Fori=1Tom+n+p'显示数组e的元素值
Text4.Text=Text4.Text&Str(e(i))
Nexti
EndSub
PrivateSubgsort(xAsVariant,yAsVariant,zAsVariant)
Dimi%,j%,k%,n1%,n2%
i=1:
j=1:
k=1
n1=UBound(x):
n2=UBound(y)
Whilei<=n1Andj<=n2
Ifx(i)>y(j)Then
z(k)=y(j):
k=k+1:
j=j+1'比较x和y中的元素,把较大的元素移到
Else'z中,直到其中一个数组搬空为止
z(k)=x(i):
k=k+1:
i=i+1
EndIf
Wend
Whilei<=n1
z(k)=x(i):
i=i+1:
k=k+1'把x中剩余的元素搬到z中
Wend
Whilej<=n2
z(k)=y(j):
j=j+1:
k=k+1'把y中剩余的元素搬到z中
Wend
EndSub
PrivateSubCommand2_Click()
End
EndSub
(3)运行情况
运行程序后,屏幕出现用户界面,并把需合并的三组数据分别在三个文本框中显示出来。
单击标题为“合并”的命令按钮,系统执行相应的Click事件过程。
执行结果如图3.7.4所示。
单击标题为“结束”的命令按钮,结束程序的执行。
图3.7.4执行结果