VB书面习题答案18章.docx
《VB书面习题答案18章.docx》由会员分享,可在线阅读,更多相关《VB书面习题答案18章.docx(28页珍藏版)》请在冰豆网上搜索。
VB书面习题答案18章
习题一P19
1.3.4.5.6.7
参考答案:
1、简述VisualBasic的特点。
答:
⑴基于对象的可视化设计工具
⑵事件驱动的编程机制
⑶提供易学易用的应用程序集成开发环境
⑷结构化的程序设计语言
⑸强大的网络、数据库、多媒体功能
⑹完备的联机帮助功能
3、VisualBasic6.0有学习版、专业版和企业版,怎样知道所安装的是哪个版本?
答:
在启动VB6.0的启动封面上,能显示对应的版本,见教材例1.1
4、VisualBasic6.0有多种类型的窗口,若想在设计时看到代码窗口,怎样操作?
答:
选择“视图∣代码窗口”命令或“工程资源管理器”窗口的“查看代码”按钮。
5.叙述建立一个完整的应用程序的过程。
答:
a)建立用户界面的控件对象。
b)控件属性的设置。
c)控件事件过程及编程。
d)运行和调试程序。
e)保存程序。
6.当建立好一个简单的应用程序后,假定该工程仅有一个窗体模块。
试问该工程涉及多少个要保存的文件?
若要保存该工程中的所有文件,应先保存什么文件,再保存什么文件?
若不这样做,系统会出现什么信息?
答:
涉及两个文件要保存。
先保存窗体文件(.frm),再保存工程文件(.vbp)。
若先保存工程文件,系统也会先弹出“文件另存为”对话框,要求先保存窗体文件。
7.保存文件时,若不改变目录名,则系统默认的目录是什么?
答:
系统的默认目录是VB98。
习题二P37
2.5.6.7.9.10
参考答案:
2、属性与方法的区别是什么?
答:
对象中的数据保存在属性中,VB程序中的对象都有许多属性,它们是用来描述和反映对象特征的参数。
可以通过两种方法来设置属性:
(1)在设计阶段利用属性窗口直接设置对象的属性值;
(2)在程序运行阶段通过赋值语句实现。
方法是附属于对象的行为和动作,也可以理解为指使对象动作的命令。
面向对象的程序设计语言,为程序设计人员提供了一种特殊的过程,称为方法供用户直接调用,这给用户的编程带来了很大的方便。
因为方法是面向对象的,所以在调用时一定要指明对象,如果省略指当前对象,一般指窗体。
5、如果文本框要显示多行文字,应对什么属性设置为何值?
答:
将该文本框的Multiline属性设置为True.
6、标签和文本框的区别是什么?
答:
标签和文本框共同点都可以在窗体上显示文字。
不同点在于:
标签的内容在Caption属性内,在窗体上只能显示文字,不能编辑;文本框内容在Text属性内,在窗体上可直接对内容进行编辑。
7、要让文本框获得焦点的方法是什么?
答:
SetFocus
9、当某文本框输入数据后(按了回车键),经判断后认为是数据输入错,应怎样删除原来文本框中的数据?
答:
[文本框.]text=””
10.在程序运行前,对某些控件设置属性值,除了在窗体中直接设置外,还可以通过代码设置,这些代码一般存放在什么事件中?
如果要将命令按钮定位在窗体的中央,试写出事件过程代码。
答:
这些代码一般放在Form_Load()事件过程中。
要将按钮定位在窗体的中央,事件过程如下:
PrivateSubForm_Load()
Command1.Left=Form1.ScaleWidth\2-Command1.Width\2
Command1.Top=Form1.ScaleHeight\2-Command1.Height\2
EndSub
其中,ScaleWidth、ScaleHeight表示窗体的相对宽度和高度。
习题三P58
1,2,3,4,5,7,9
参考答案:
1.下列哪些是VB的合法常量,分别指出其类型。
(1)100.0单精度型
(2)%100非法(3)1E1单精度型(4)123D3双精度型(5)123,456非法(6)0100整型
(7)”ASDF”字符型(8)“1234”非法(9)#2000/10/7#日期型
(10)100#双精度型(11)
非法(12)&O100八进制整型
(13)&O78非法(14)&H123十六进制整型(15)True逻辑型
(16)T非法(17)&H12ag非法(18)-1123!
单精度型
2.下列符号中,哪些是VB的合法变量名?
(1)a123合法
(2)a12_3合法(3)123_a非法(4)a123非法
(5)Integer非法(6)XYZ合法(7)False非法(8)sin(x)非法
(9)sinx合法(10)变量名合法(11)abcdefg合法(12)
非法
3.把下列算术表达式写成VB表达式。
(1)
答:
Abs(x+y)+z^5
(2)
答:
(1+x*y)^6
(3)
答:
(10*x+Sqr(3*y))/x/y
(4)
答:
(–b+sqr(b^2-4*a*c))/(2*a)
(5)
答:
1/(1/r1+1/r2+1/r3)
(6)
答:
sin(45*3.14/180)+(exp(10)+log(10))/sqr(x+y+1)
4.根据条件写出相应的VB表达式。
(1)产生”C”~”L”范围内的一个大写字符。
答:
Chr(int(Rnd*10+67))
(2)产生100~200(包括100和200)范围内的一个正整数。
答:
Int(Rnd*101+100)
(3)已知直角坐标系中任意一点的坐标(x,y),表示其位于第一或第三象限内。
答:
x*y>0
(4)表示x是5或7的倍数。
答:
xMod5=0orxMod7=0
(5)将任意一个两位数x的个位数与十位数对换。
例如,x=78,则表达式的值应为87.
答:
(xMod10)*10+x\10
(6)将变量x的值按四舍五入保留小数点后两位。
例如,x的值为123.2389,则表达式的值应为123.24。
答:
Round(x*100)/100(或Round(x,2))
(7)表示字符型变量C是字母字符(不区分大小写字母)。
答:
Ucase(c)>=”A”AndUcase(c)<=”Z”
或Lcase(c)>=”a”AndLcase(c)<=”z”
(8)取字符型变量S中从第5个字符起的6个字符。
答:
Mid(S,5,6)
(9)表示关系表达式
。
答:
x>=10Andx<20
(10)x,y之一小于z。
答:
x=zOry=z
(11)x和y都大于z。
答:
x>zAndy>z
5.写出下列表达式的值:
(1)123+23mod10\7+Asc(“A”)
答:
188
(2)100+”100”&100
答:
”200100”
(3)Int(68.555*100+0.5)/100
答:
68.56
(4)已知A$=”87654321”,求表达式Val(Left$(A$,4)+Mid$(A$,4,2))
答:
876554
(5)DateAdd(“m”,1,#1/30/2000#)
答:
#2/29/2000#
(6)Len(“VB程序设计”)
答:
6
7.VisualBasic提供了哪些标准数据类型?
声明类型时,其类型关键字分别是什么?
其类型符又是什么?
答:
见课本39页表3.1
9.将数字字符串转换成数值,使用什么函数?
判断是否是数字字符串,使用什么函数?
取字符串中的某几个字符,使用什么函数?
实现大小写字母间的转换,使用什么函数?
答:
数字字符串转换成数值,用Val()函数;IsNumeric()函数判断是否是数字字符串;Mid()函数用于取字符串中的某几个字符;Ucase()函数用于将小写字母转换成大写字母;Lcase()函数用于将大写字母转换成小写字母。
P94
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1.结构化程序设计的三种基本结构是什么?
答:
顺序结构、选择结构和循环结构。
2.指出下列赋值语句中的错误(包括运行时要产生的错误)。
⑴10x=sin(x)+y答:
10x错误变量名
⑵c=3+sqr(-3)答:
sqr(x)中自变量要求>=零
⑶c+x+y=c*y答:
赋值符号的左边是表达式
⑷x=sin(x)/(20mod2)答:
分母不能为零
3.Msgbox函数和InputBox函数之间有什么区别?
各自获得什么值?
答:
两个函数的共同之处是均显示对话框。
区别:
InputBox函数等待用户在文本框中输入数据,获得的是输入的字符串数据;Msgbox函数等待用户按一按钮,获得的是表示按钮的整数值,以决定程序的流向。
4.要使单精度变量x,y,z分别保留1位、2位、3位小数,并在窗体上显示,应使用什么函数?
如何编写对应的Print方法?
答:
PrintFormat(x,"0.0")
PrintFormat(y,"0.00")
PrintFormat(z,"0.000")
5.语句
if表达式then…
中的表达式可以是算术、字符、关系、逻辑表达式中的哪些?
答:
可以是算术、关系、逻辑表达式。
按照一般语言的规定,if后应该是关系表达式、逻辑表达式,根据其结果逻辑量是True或False决定是否执行Then后面的句子。
而在VB中还可以是算术表达式,因为VB逻辑判断中,对于非0值就作为True,而0值作为False,因此分段函数
可用VB语句表示为:
IfxTheny=sin(x)/xElsey=0
而不必写成Ifx<>0Theny=sin(x)/x
6指出下列语句中的错误。
⑴Ifx≥yThenprintx
答:
“≥”应写成“>=”
2If10答:
VB中表示x的范围“103Ifc>=〝A〞andc<=〝Z〞then
Print〝大写字母〞
ElseIfc>=〝a〞andc<=〝z〞then
Print〝小写字母〞
Endif
答:
“ElseIf”之间不能有空格,即应写成“ElseIf”
7.按照下列条件,写出相应的条件语句:
(1)当字符型变量中第三个字符是”C”时,利用Msgbox显示“Yes”,否则显示”No”。
答:
IfMid(c,3,1)=”C”ThenMsgBox”Yes”ElseMsgBox”No”
(2)利用if语句、SelectCase语句两种方法计算分段函数:
If语句
PrivateSubCommand2_Click()
x=Text1.Text
Ifx>20Then
y=x*x+3*x+2
Else
y=Sqr(3*x)-2
EndIf
Printy
EndSub
Select语句
PrivateSubCommand1_Click()
x=Text1.Text
SelectCasex
CaseIs>20
y=x*x+3*x+2
CaseIs<10
y=1/x+Abs(x)
CaseElse
Y=Sqr(3*x)-2
EndSelect
Printy
EndSub
答:
(3)利用if语句和IIf函数两种方法求三个数x,y,z中的最大值并存入变量Max中。
答:
If语句
Ifx>yThenMax=xElseMax=y
Ifz>MaxThenMax=z
IIf函数:
Max=IIf(x>y,x,y)
Max=IIf(Max>z,Max,z)
8在多分支结构的实现中,可以用if…Then…ElseIf…Endif形式的语句,也可以用SelectCase…EndSelect形式的语句,由于后者的条件书写更灵活、简洁,是否可以完全取代前者?
答:
不可以。
虽然selectcase….Endselect语句在条件的书写上更简洁和灵活,但是却不可以完全取代If…then…elseif…endif形式的语句。
因为selectcase….Endselect语句在使用上是有一些限制的。
首先,看该语句的形式:
SelectCase<变量或表达式>
Case<表达式列表1>
<语句块1>
Case<表达式列表2>
<语句块2>
…
[CaseElse
<语句块n+1>]
EndSelect
其中<变量或表达式>只能含有一个变量,任何含有多个变量的形式都是错误的。
例如,要判断x,y是否在第一、第三象限内,若输入如下语句:
SelectCasex,y,VB程序会显示“缺少:
语句结束”。
其次,在后面的Case“表达式列表”中不能出现SelectCase变量或表达式中使用的变量,也不能出现主教材上列出的四种形式以外的符号或关键字(符号是:
逗号;关键字是:
Is、To)。
例如,上述象限的判断,若语句表示如下:
SelectCasex,y
Casex>0Andy>0
Print“第一象限”
Casex<0Andy<0
Print“第三象限”
EndSelect
则程序有多处错误:
SelectCasex,y中出现了多个变量;在Casex>0Andy>0中出现了变量和And逻辑运算符。
上述例子只能用If的多分支结构来实现。
由此可见,虽然SelectCase结构清晰,但使用受到限制,凡是对多个变量的条件判断只能用If的多分支结构来实现。
9.计算下列循环语句的次数
⑴ForI=--3To20Step4
答:
循环次数为6次。
⑵ForI=-3.5To5.5Step0.5
答:
循环次数为19次。
⑶ForI=-3.5To5.5Step-0.5
答:
不循环。
步长<0,循环初值<终值。
⑷ForI=-3To20Step0
答:
无数次。
10.下列30-90为语句标号,分别标记该语句,第40句执行了几次?
,第50句执行了几次?
,第90句显示的结果是多少?
30Forj=1To12Step3
40Fork=6To2Step-2
50mk=k
60Printj,k
70Nextk
80Nextj
90Printj,k,mk
答:
第40句执行了4次。
第50句执行了12次。
第90句显示的结果是1302。
11.如果事先不知道循环次数,如何用For……Next结构来实现?
答:
只要将循环的终值设置为一个非常大的值,然后在循环体内增加If语句,判断是否达到循环结束条件。
形式如下:
For循环变量=1To非常大的数
…….
If达到循环结束条件ThenExitFor
…….
Next循环变量
12.利用循环结构,实现如下功能:
⑴
答:
S=0
Fori=1To10
S=S+(i+1)*(2*i+1)
Nexti
⑵分别统计1~100中,满足3的倍数、7的倍数的数个为多少?
答:
S3=0
S7=0
Fori=1To100
IfiMod3=0ThenS3=S3+1
IfiMod7=0ThenS7=S7+1
Nexti
⑶将输入的字符串以反序显示。
如输入“ASDFGHJKL”,显示“LKJHGFDSA”。
答:
s=InputBox("输入字符串")
Fori=Len(s)To1Step-1
PrintMid(s,i,1);
Nexti
13.下面程序运行后的结果是什么?
该程序的功能是什么?
PrivateSubCommand1_Click()
Dimx$,n%
n=20
x=""
DoWhilen<>0
a=nMod2
n=n\2
x=Chr(48+a)&x
Loop
Printx
EndSub
答:
运行后结果为10100,该程序的功能是将十进制数转换成二进制字符串。
14.下面程序运行后的结果是什么?
该程序的功能是什么?
PrivateSubCommand1_Click()
Dimx%,y%,z%
x=242:
y=44
z=x*y
DoUntilx=y
Ifx>yThenx=x-yElsey=y-x
Loop
Printx,z/x
EndSub
答:
运行后结果为22和484,该程序的功能是用相减法求x,y的最大公约数和最小公倍数。
15.利用随机函数产生20个50~100范围内的随机数,显示它们的最大值、最小值和平均值。
答:
PrivateSubCommand1_Click()
Dimi%,t%,Max%,Min%,Avr!
Form1.FontSize=12
Avr=0
Print"随机数为:
";
Randomize
t=Int(Rnd()*51+50)
Printt;
Avr=Avr+t
Max=t
Min=t
Fori=1To19
t=Int(Rnd()*51+50)
Printt;
Avr=Avr+t
Ift>MaxThenMax=t
IftNexti
Print
Avr=Avr/20
Print"最大值为:
";Max,"最小值为:
";Min,"平均值为:
";Avr
Print
EndSub
习题5答案
1.在VB6.0中,数组的下界默认为0,用什么语句可以重新定义数组的默认下界?
答:
OptionBase语句,如:
OptionBasen
2.要分配存放12个元素的整型数组,下列数组声明(下界若无,按默认规定)哪些符合要求?
(1)n=12
Dima(1Ton)AsInteger
(2)Dima%()
n=11
ReDima(n)
(3)Dima%[2,3]
(4)Dima(1,1,2)AsInteger
(5)Dima%(10)
ReDima(1To12)
(6)Dima!
()
ReDima(3,2)AsInteger
(7)Dima%(2,3)
(8)Dima(1To3,1To4)AsInteger
答:
(2),(4),(7),(8)符合要求。
(1)静态数组在声明数组时的下标必须是常数,不能出现变量
(3)不能使用方括号
(5)已声明了的静态数组,不能再用重定义语句来重定义静态数组的大小
(6)可以反复地改变数组的元素以及维数的数目,但是不能将一个数组定义为某种数据类型之后,再使用ReDim将该数组改为其他数据类型。
3.程序运行时显示“下标越界”可能产生的错误有哪几种情况?
答:
引用了不存在的数组元素.
下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。
检查数组的声明以确认其上界和下界。
若使用的是重新指定范围的数组,应使用UBound和LBound函数来决定数组访问。
如果索引指定为变量,应检查变量名的拼写。
声明数组时没有指定元素的数目
例如:
Dima%()
a(8)=5
VisualBasic并不会将没有指定范围的数组自动设为0–8,相反必须使用Dim或ReDim来指定数组中元素的数目。
4.已知下面的数组声明,写出它的数组名、数组类型、维数、各维的上下界、数组的大小、并按行的顺序列出各元素。
Dima(-1To2,3)AsSingle
答:
数组名为a、数组类型为单精度、二维、各维的下界分别为-1和0、上界分别为2和3、数组的大小4x4共16个元素,各元素排列顺序见表:
a(-1,0)
a(-1,1)
a(-1,2)
a(-1,3)
a(0,0)
a(0,1)
a(0,2)
a(0,3)
a(1,0)
a(1,1,)
a(1,2)
a(1,3)
a(2,0)
a(2,1)
a(2,2,)
a(2,3)
5.利用随机数生成两个矩阵(数据不一定相同,前者30~70范围、后者101~135)。
要求:
(1)将两个矩阵相加结果放入C矩阵中。
(2)将A矩阵转置。
(3)统计C矩阵中最大值和下标。
(4)以下三角形式显示A矩阵、上三角形式显示B矩阵。
(5)将A矩阵的第一行与第三行对应元素交换位置,即第一行元素放到第三行;第三行元素放到第一行。
(6)求A矩阵两条对角线元素之和。
(7)将A矩阵按列的次序把各元素放入一维数组D中,显示结果。
答:
Dima(4,4)AsInteger,b(4,4)AsInteger,c(4,4)AsInteger
Randomize
Print"矩阵A为:
"
Fori=1To4
Forj=1To4
a(i,j)=Int(Rnd*41+30)
PrintTab(5*j);a(i,j);
Nextj
Print
Nexti
Print"矩阵B为:
"
Fori=1To4
Forj=1To4
b(i,j)=Int(Rnd*35+101)
PrintTab(5*j);b(i,j);
Nextj
Print
Nexti
(1)两个矩阵能相加的条件是他们的行数、列数相同,利用两重循环将他们相加即可。
Fori=1to4
Forj=1to4
c(i,j)=a(i,j)+b(i,j)
Nextj
Nexti
(2)矩阵转置是将矩阵的行变为列、列变为行。
Fori=1To4
Forj=i+1To4
t=a(i,j)
a(i,j)=a(j,i)
a(j,i)=t
Nextj
Nexti
(3)因为C是两维数组,所以最大值的下标也有两个,即行下标和列下标。
DimMax%,Maxi%,Maxj%
Max=c(1,1):
Maxi=1:
Maxj=1
Fori=1To4
Forj=1To4
Ifc(i,i)>MaxThen
Max=c(i,j):
Maxi=i:
Maxj=j
EndIf