VB第2章 复习资料文档格式.docx
《VB第2章 复习资料文档格式.docx》由会员分享,可在线阅读,更多相关《VB第2章 复习资料文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
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),表示其位于第1或第3象限内。
x*y>
(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
(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<
zAndy>
zOrx>
zAndy<
z
(11)x和y都大于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
6.利用Shell函数,在VB程序中分别执行画图和Word应用程序。
调用Shell函数,形式为:
Shell(“Mspaint.exe”,1)‘画图程序是Windows系统自带的,可省略路径
Shell(“C:
\ProgramFiles\MicrosoftOffice\Office\Winword.exe”,1)
7.VisualBasic提供了哪些基本数据类型?
申明类型时,其类型关键字分别是什么?
其类型符又是什么?
参见主教材表3.1。
8.哪种数据类型所需的内存容量最小,且可存储3.2345这样的值?
单精度类型。
9.将数字字符串转换成数值,使用什么函数?
判断是否是数字字符串,使用什么函数?
取字符串中的某几个字符,使用什么函数?
实现大小写字母间的转换,使用什么函数?
数字字符串转换成数值,用Val()函数;
IsNumeric()函数判断是否是数字字符串;
Mid()函数用于取字符串中的某几个字符;
Ucase()函数用于将小写字母转换成大写字符;
Lcase()函数用于将大写字母转换成小写字母。
常见错误和难点分析
1.常见错误语句和使用时的注意事项
(1)DimSinAsInterger
使用时应注意:
Sin是函数名,不要作为变量名,虽然语法上没有错误,但Sin函数无效。
(2)DimStAsString,nAsInteger
N=100
St=“n的值为:
“+n
错误:
字符串连接符两边应为字符类型,而变量n是整型,应该用“&
”连接符或Str(n)函数将n转换成字符类型。
(3)Dimx,y,zAsInteger
使用时应注意:
本语句要声明3个整型变量,这样声明使得x,y为变体型变量。
(4)S=πr^2
本语句目的为求半径r的面积。
错误之处:
π与r之间漏了乘号,而且π应该用3.14直接常量来表示。
2.逻辑表达式输入错误,编译时没有造成语法错而形成逻辑错。
例如,要将数学表达式如
以VB的逻辑表达式表示,有的写成的VB表达式为:
3<
=x<
10
此时在其他程序语言中会产生语法错,而在VB中不产生语法错,程序能继续运行,但不管x的值为多少,表达式的值永远为Ture,虽然程序能正常运行,但其结果却不是期望值。
因为在VB中,当两个不同类型的变量或常量参加运算时,有自动向精度高的类型转换的功能。
例如,逻辑常量Ture转换为数值型的值为-1,False为0;
反之数值型非0转换为逻辑型的值为Ture,0为False。
同样数字字符与数值运算,转换为数值型。
例如,语句PrintTure+3‘显示的结果是2
Print“123”+100‘显示的结果是223
Print#5/1/2006#+3‘显示的结果是2006-5-4
根据此原因,表达式:
3<
_①______
②
值的计算过程:
①根据x的值计算3<
=x,结果总为(-1)或False(0)。
②根据①计算的结果(-1或0)与10比较结果永远为Ture。
正确的VB表达式书写为:
3<
=xAndx<
3.同时给多个变量赋值,编译时没有造成语法错而形成逻辑错
例如,要同时给x,y,z三个整型变量赋初值1,有的写成如下赋值语句:
x=y=z=1
在C语言中,上述语句可以实现同时对多个变量赋值,而在VB中规定在一条赋值语句内只能给一个变量赋值,但上述语句并没有产生语法错,运行后x,y,z中的结果均为0。
原因是VB将上述三个“=”表示不同的含义,最左的一个表示赋值号,其余表示为关系运算符等号;
因此将y=z=1作为一个关系表达式,再将表达式的结果赋值给x。
在VB中默认数值型变量的初值为0,根据上面错误2的分析类推,因此表达式y=z=1的结果为0,所以x赋得的值为0,y、x变量的值为默认值0。
4.标准函数名输入错误
VB提供了很多标准函数,如IsNumeric()、Data()、Left()等。
当函数名写错时,如将IsNumeric写成IsNummeric,系统显示“子程序或函数未定义”,并将该写错的函数名选中提醒用户修改。
如何判断函数名、控件名、属性、方法等是否写错,最简便的方法是当该语句写完后,按Enter键,系统把被识别的上述名称自动转换成规定的首字母大写形式,否则为错误的名称。
5.数据合法性检查中引起程序的死循环
在数据输入时,经常要对输入的数据做合法性检查,以确保程序运行的正确性。
如在实验B第一题中,输入的温度要求是数字,否则删除原输入内容,焦点仍定位于文本框。
有关属性设置参见表2.1,界面如图2.1所示,程序段如下:
表2.1控件有关属性
有关控件名
TabIndex
Text1
2
Text2
3
Command1
4
5
图2.1实验B.1运行界面
PrivateSubText1_LostFocus()PrivateSubText2_LostFocus()
IfNotIsNnmeric(Text1)ThenIfNotIsNnmeric(Text2)Then
Text1=””Text2=””
Text1.SetFocusText2.SetFocus
EndIfEndIf
EndSubEndSub
当华氏温度输入值有错误按回车键后,焦点在Text2处不停地闪动,程序产生死循环。
原因是Text1输入结束按Tab键,激发Text1_LostFocus事件,焦点已到Text2;
但当判断Text1文本框输入数据错时,执行Text1.SetFocus,使焦点从Text2拉回到Text1;
又激发Text2_LostFocus事件,此时判断Text2文本框输入数据错,又执行Text2.SetFocus,使焦点从Text1拉回到Text2,如此交错造成死循环。
而当摄氏温度(Text2)输入错误时,程序正常运行。
因为当Text2输入结束按Tab键,焦点已到Comman2,因此不会产生死循环。
解决方法:
只要把privateSubTexst2_LostFocus()事件的If表达式IfNotIsNnmeric(Text2)Then改为:
IfText2<
>
””AndNotIsNumeric(Text2)Then即可。
6.如何终止死循环
当编写程序时考虑不周到,产生死循环(尤其在使用第4章介绍的循环结构)时,只要同时按Ctrl+Break键就可以终止死循环,找出死循环的原因,修改程序。
7.声明局部变量和窗体级变量的问题
在VB程序中,除了控件对象外,还要使用一些变量,暂时存放一些中间结果。
这些变量一般在过程内声明,称为局部变量。
但当多个过程需要用到同一个变量时,该变量必须放在代码的最前面级“通用声明”段声明,称为窗体级变量。
有关概念将在主教材的第6章介绍。
具体对实验B第2题来说,在方法一的窗体内有4个过程,共同要用到三个变量a,b,c,因此对这变量的声明应在“通用声明”段,否则Click事件过程中a,b,c变量的值为零。
在方法二中只有一个事件过程,变量a,b,c作为过程级变量声明。
方法一:
方法二:
Dima#,b#,c#
PrivateSubText1_LostFocus()PrivateSubForm_Click()
…’对变量a赋值Dima#,b#,c#
EndSub…’用到变量a,b,c
PrivateSubText2_LostFocus()EndSub
…’对变量b赋值
EndSub
PrivateSubText3_LostFocus()
…’对变量c赋值
PrivateSubCommand1_Click()
…’用到变量a,b,c
8.在Form_Load事件中,Print方法、SetFocus方法不起作用
因为系统在窗体装入内存是无法同步地Print、SetFocus方法显示后定位控件的焦点。
①Print显示解决的方法:
在属性窗口将窗体AUTOREDRAW属性设置为TRUE(默认FALSE)。
②SetFocus定位解决的方法:
在属性窗口对要定位焦点的控件将其TABINDEX值设置为0即可。
9.Print方法中定位问题
定位通过TAB、SPC函数和最后的逗号、分号和无符号来控制。
VB中通过PRINT方法中各参数的综合使用达到所需的结果,但初学者往往难以掌握。
(1)TAB(N)与SPC(N)的区别
TAB(N)从最左第1列开始算起定位于第N列,若当前打印位置已超过N列,则定位于下一行的第N列,这是常常定位不好出现的问题。
在格式定位中,TAB用的最多。
SPC(N)从前一打印位置起空N个空格。
例如,下面程序段显示了TAB与SPC的区别,效果如图2.2所示。
图2.2运行效果例一图2.3运行效果例二
PrivateSubCommand1_Click()
Print"
1234567890"
PrintTab
(1);
"
**"
;
Tab
(2);
%%%"
Spc
(2);
$$$$"
(2)紧凑格式“;
”分号的使用
紧凑格式“;
”,即输出项之间无间隔。
但对于数值型,输出项之间系统自动空一格。
而由于数值系统自动加符号位,因此,大于零的数值,实际空两列。
对于字符型之间无空格。
例如,下面程序段,效果如图2.3所示。
Print1;
-2;
3
1234"
5678"
A"
B"
C"
D"
E"
F"
G"
H"
从该例应能区分数值和字符在紧凑格式输出上的差异。
10.程序运行时对多个文本框焦点移动的问题
方法一:
按“TAB”键。
这时可不必编程,直接利用系统提供的功能方便的在各控件之间移动。
若要确定离开或进入哪个控件,则利用“控件_LostFocus”或”控件_GotFocus”事件进行判断。
方法二:
按“回车”键.这时必须通过KeyPress事件编程来实现,有关程序段如下:
PrivateSub某文本框_KeyPress(KeyAsciiASInteger)
IFKeyAscii=13Then
…
另一控件.SetFocus
EndIf
测试题
一、选择题
1.在一行语句内写多条语句时,每个语句之间用______符号分隔。
A,B:
C\D;
2.一条语句要在下一行继续写,用_____符号作为续行符。
A+B-C_D…
3.下面___是合法的变量名。
A.X_yzB.123abcC.integerD.X-Y
4.下面___是不合法的整常数。
A.100B.&
O100C.&
H100D.%100
5.下面____是合法的字符常数。
A.ABC$B.”ABC”C.’ABC’D.ABC
6.下面_____是合法的单精度型变量。
A.Num!
B.Sun%C.xinte$D.mm#
7.下面_____是不合法的单精度常数。
A.100!
B.100.0C.1E+2D.100.0D+2
8.表达式16/4-2^5*8/4MOD5\2的值为____。
A.14B.4C.20D.2
9.数学表达式3≤X<10在VB中的逻辑表达式为_____。
A.3<
10B.3<
=xANDx<
C.x>
=3ORx<
10D.3<
=xAND<
10.\、/、Mod、*4个算术运算符中,优先级别最低的是__。
A.\B./C.ModD.*
11.与数学表达式
对应,不正确的VB算术表达是__。
A.a*b/(3*c*d)B.a/3*b/c/d
C.a*b/3/c/dD.a*b/3*c*d
12.Rnd函数不可能为下列__值。
A0B1C0.1234D0.0005
13.Int(198.555*100+0.5)/100的值_。
A198B199.6C198.56D200
14.已知A$=”12345678”,则表达式Val(Left$(A$,4)+Mid$(A$,4,2))的值为__。
A123456B123445C8D6
15.MsgBox函数返回值的类型是__。
A.整型数值B.字符串C.变体D.数值或字符串
16.InputBox函数返回值的类型是__。
A.整型数值B.字符串C.变体D.数值或字符串
17.表达式Len(“123程序设计ABC”)的值是__。
A.10B.14C.20D.17
18.以下关系表达式中,其值为False的是__。
A.”ABC”>
”AbC”B.”女”>
”男”
C.”BASIC”=UCase(“basic”)D.”123”<
”23”
19.下面正确的赋值语句是__。
A.x+y=30B.y=π*r*r
C.y=x+30D.3y=x
20.为了给x,y,z三个变量赋初值1,下面正确的赋值语句是__。
A.x=1:
y=1:
z=1B.x=1,y=1,z=1
C.x=y=z=1D.xyz=1
21.赋值语句:
a=123+Mid(“123456”,3,2)执行后,a变量中的值是__。
A.”12334”B.123C.12334D.157
22.赋值语句:
a=123&
Mid(“123456”,3,2)执行后,a变量中的值是__。
A.”12334”B.123C.12334D.157
23.语句:
Print”Sqr(9)=”;
Sqr(9)的输出结果是__。
A.Sqr(9)=Sqr(9)B.Sqr(9)=3
C.”3”=3D.3=Sqr(9)
24.如果要处理一个值为50000的整数,应采用哪种VB基本数据类型描述更合适?
__。
A.IntegerB.LongC.SingleD.String
二、填空题
1.在VB中,1234、123456&
、1.2346E+5、1.2346D+54个常数分别表示
(1)、
(2)、(3)、(4)类型。
2.整型变量x中存放了一个两位数,要将两位数交换位置,例如,13变成31,实现的表达式是(5)。
3.数学表达式
的VB算术表达式为(6)。
4.数学表达式
的VB算术表达式为(7)。
5.表示x是5的倍数或是9的倍数的逻辑表达式为(8)。
6.已知a=3.5,b=5.0,c=2.5,d=True,则表达式:
a>
=0Anda+c>
b+3OrNotd的值是(9)。
7.Int(-3.5)、Int(3.5)、Fix(-3.5)、Fix(3.5)、Round(-3.5)、Round(3.5)的值分别是(10)、(11)、(12)、(13)、(14)、(15)。
8.表达式Ucase(Mid(“abcdefgh”,3,4))的值是(16)。
9.在直角坐标系中,x、y是坐标系中任意点的位置,用x与y表示在第一或第三象限的表达式是(17)。
10.计算现在起离北京奥运会(以2008年8月8日开幕)举行还有多少天的函数表达式是(18)。
11.计算现在起离你毕业还有多少个星期的函数表达式是(19)。
12.表示s字符变量是字母(不区分大小写字母)的逻辑表达式为(20)。
13.下面程序段的输出结果为(21)。
x=35:
y=20
Print"
("
&
x&
\"
y&
)*"
="
(x\y)*y
x;
y;
14.下面程序段的输出结果为(22)。
x=10:
Printx;
+"
Printx+y
计算结束"
参考答案
一、选择题
1.B
2.C
3.AB数字开头错误;
C是VB表示表示整型关键字,不可使用;
D中间是减号。
4.DA是十进制整常数;
B是八进制整常数;
C是十六进制整常数。
5.BA是字符变量;
C字符串常量不允许单引号;
D没有类型声明,则默认为变体类型的变量。
6.AB整型;
C字符型;
D双精度型。
7.DD是双精度常数的形式。
8.B掌握算术运算符优先级别和整除,取余运算符的使用。
9.B见常见错误和难点分析1。
10.C次序为:
/,*,﹨,Mod。
11.D按D的表示,数学表达式为:
。
12.BRnd的随机函数产生0~1(包括0,不包括1)的随机数。
13.C
14.B掌握取子字符串函数Left,Mid,Right函数的使用。
15.A该函数表示在当前日期按“m”月格式加一个月,本应该C,但这是不合法的日期。
16.C该函数表示两个指定日期间的时间间隔数目。
本例格式“y”表示日数。
17.ALen求的字串个数,在VB中一个汉字,一个英文字符都是一个字。
18.CLenB求的是字节数,在VB中的一个汉字,一个英文字都是两个字节。
19.CA错误在于赋值号左边只允许是变量;
B错误在于表达式中应该用3.14直接常量表示。
D错误在于3y是非法的变量名。
20.AB错误VB规定不允许使用“,”作为语句分隔符;
C错误不能同时给三个变量赋值,此语句在VB中语法没有错,但结果错。
D错误xyz是一个变量。
21.DMid(“123456”,3,2)的值为”34”,与整数123进行“+”运算。
在VB中,“+”既可作算术相加,也可作字符串连接加,到底属于哪一种,就看两边的操作数,类型均相同,不必考虑。
当类型不同时,一边是数字,另边是数字字符,按算术加处理,否则出现“类型不匹配”的错误。
本例中数字字符“34”自动转换成数值34,再和123相加,结果为157。
22.A“&
”是字符串连接符,连接的两边先转换成字符类型,再连接。
23.B输出时,“Sqr(9)=”字符串直接按样输出,Sqr(9)表达式输出其值。
24.BInteger类型存放的最大值为32767,因此用Long类型存放;
而Single和Double为实数类型,占用空间比整数类型多。
(1)整数
(2)长整型
(3)单精度型
(4)双精度型
(5)(xMod10)*10+x\10
‘利用xMod10和x/10运算可将一个两位数分离出来,要连接起来,通过乘10再加个位数即可