配色: 字号:
vb程序设计教程_第三版_龚沛曾_课后答案
2012-09-18 | 阅:  转:  |  分享 
  
习题一

答案在教材上找。



习题二



1.对象指现实世界中的实体。每个对象有自己的特征(属性)、行为(方法)和发生在该对象上的活动(事件)。

类是对同一种对象的集合与抽象。类包含所创建对象的属性数据,以及对这些数据进行操作的方法。封装和隐藏是类的重要特性,将数据结构和对数据的操作封装在一起,类的内部实现细节对用户来说是透明的。

VB工具箱中的可视图标是VB系统设计好的标准控件类。通过将控件类实例化,得到真正的控件对象。在窗体上画一个控件,就将类转换为对象,创建了一个控件对象。

VB中常用的对象是控件。此外,VB还提供了系统对象。窗体是个特例,它既是类也是对象。当向一个工程添加一个新窗体时,实质就由窗体类创建了一个窗体对象。

对象的三要素:属性、事件和方法。

属性:存放对象的数据(决定对象外观及功能)对象属性的设置方法:在设计阶段,利用属性窗口直接设置属性值;程序运行时,通过语句[对象名.]属性名=属性值。若属性只能在设计阶段设置,在程序运行阶段不可改变,称为只读属性。

事件:发生在对象上的事情。同一事件,对不同的对象,会引发不同的反应。

事件过程:应用程序处理事件的步骤。应用程序设计的主要工作就是为对象编写事件过程的代码。

方法:面向对象的程序设计语言,为程序设计人员提供了一种特殊的过程和函数。方法是面向对象的,调用时一定要指明对象。



2.窗体和控件具有的基本属性“

(1)Name属性:名称

所创建的对象名称,在程序中引用。

(2)Caption属性:标题

该属性决定了对象上显示的内容。

(3)Height、Width、Top和Left属性

决定对象的大小和位置。

(4)Enabled属性:对象是否允许操作

(5)Visible属性:对象是否可见

(6)Font属性组:文本的外观

FontName字体、FontSize大小

FontBold粗体、FontItalic斜体

FontStrikethru删除线

FontUnderline下划线

(7)ForeColor属性:前景颜色

(8)BackColor属性:背景颜色

(9)MousePointer属性:鼠标指针类型,设置值范围0~15,由系统指定。若为99,由用户提供的图形文件定义鼠标指针形状。

(10)MouseIcon属性:在MousePointer属性值为99时,存放自定义的鼠标图标文件(.ico或.cur)。图标库在Graphics目录下。



3.窗体的事件:Load事件是在窗体被装入工作区时触发的事件。当应用程序启动,自动执行该事件,该事件通常用来在启动应用程序时对属性和变量进行初始化。



窗体的方法:(1)Print方法

用来显示文本内容,格式:[对象.]print表达式

(2)Cls方法

清除运行时在窗体或图形框中产生的文本或图形,Cls方法不能清除窗体在设计时的文本和图形。

格式:[对象.]cls

(3)Move方法

可移动窗体或控件,并可改变其大小。

语法格式如下:

[对象.]Move左边距离[,上边距离[,宽度[,高度]]]



4.标签作用:用于显示文本(输出)信息,不能作为输入信息的界面。其内容只能通过Caption属性设置或修改,不能直接编辑。



5.文本框是一个文本编辑区域,可以在该区域输入、编辑、修改和显示正文内容。在VB中字符长度以字为单位,也就是一个西文字符与一个汉字都是一个字,长度为1。

重要属性(1)Text显示或输入的正文内容。

(2)Maxlength设置文本框可输入的文字最大长度。默认值为0,表示可以输入任意长字符串。

(3)MultiLine多行属性

设置为True时,文本框可以输入或显示多行正文,同时具有文字处理器的自动换行功能,按Enter键可插入一空行。

(4)ScrollBars滚动条属性

0-None无滚动条

1-Horizontal水平滚动条

2-Vertical垂直滚动条

3-Both同时加水平和垂直滚动条

注意:当MultiLine为True时,ScrollBars才有效

(5)PassWordChar设置显示文本的替代符。例如,当设置为“”,则在文本框输入的内容均以“”显示,而存储的值是用户输入的原文。一般用于设置口令的输入。

当MultiLine为True时,该属性不起作用,密码不允许多行。

(6)Locked指定文本控件是否可被编辑,默认值为False(可编辑),当设置为True时,文本控件相当于标签控件的作用。

注意:Locked与Enabled的区别。

(7)文本内容进行选择操作的三个属性

SelStart 选定的正文开始位置

SelLength 选定的正文长度

SelText 选定的正文内容

这3个属性互相关联,例如设置SelStart、SelLength后,SelText自动存放指定的文本。

注意:属性窗口中没有这三个属性,只能在程序代码中使用。



6.文本框的事件:(1)Change事件:当Text属性值发生改变时引发该事件

(2)KeyPress事件:按下并且释放键盘上的一个键时,引发焦点所在控件的KeyPress事件,所按键的值存放在参数KeyAscii中。对回车的判断KeyAscii=13



7.文本框最有用的方法是SetFocus,把光标移到指定的文本框中。



8.命令按钮Picture属性:按钮可显示图片文件(.bmp和.Ico),当Style为1时有效。



10.启动窗体时将命令按钮定位在窗体中央的代码



PrivateSubForm_Load()



Command1.Left=Form1.ScaleWidth/2-Command1.Width/2



Command1.Top=Form1.ScaleHeight/2-Command1.Height/2



EndSub







11.vb图片文件在C:\ProgramFiles\MicrosoftVisualStudio\Common\Graphics文件夹。



安装VB时可选择是否安装这些图片文件。





习题三



1.合法常量:



(1)Double



(2)错误



(3)Double



(4)Double



(5)错误



(6)Integer



(7)String



(8)String



(9)Date



(10)Double



(11)错误(汉字字符)



(12)Integer(八进制)



(13)错误(八进制无数码8)



(14)Integer



(15)Boolean



(16)错误



(17)错误(十六进制无数码g)



(18)Single











说明:浮点型变量默认为Double类型而非Single。







2.合法变量名:



(1)√



(2)√



(3)误:数字开头



(4)误:含空格



(5)误:关键字



(6)√



(7)误:关键字



(8)误:有括号



(9)√



(10)√



(11)√



(12)√(汉字字符可作为变量名,但不常用,且此名称易误解)



变量命名规则见P.41-42。



字母(汉字)开头,字母(汉字)、数字、下划线组成,长度为1-255个字符;关键字不可作为变量名,但可在变量名中嵌入关键字;不区分大小写。



常量、数组、类型、函数、过程、对象命名规则与此相同。常量名通常全用大写。







3.写VB表达式



(1)Abs(x+y)+z^5



(2)(1+xy)^6



(3)(10x+Sqr(3y))/(xy)



(4)(-b+Sqr(b^2-4ac))/(2a)



(5)1/(1/r1+1/r2+1/r3)



(6)Sin(453.14159/180)+(Exp(10)+Log(10))/Sqr(x+y+1)







4.根据条件写表达式



(1)随机产生大写字母Chr(Int(Rnd(Asc("L")-Asc("C")+1)+Asc("C")))



(2)[100,200]内的随机数Int(Rnd101)+100



(3)点(x,y)位于第一或第三象限x>0Andy>0Orx<0Andy<0或xy>0



(4)x是5或7的整数倍xMod5=0OrInt(x/7)=x/7



(5)将两位整数x的个位与十位对换x\10+(xMod10)10



(6)四舍五入取两位小数Round(x,2)



(7)字符变量C是字母字符(不区分大小写)——准确地说是:字符变量C的第一个字符是字母



C>="A"AndC<="Z"OrC>="a"AndC<"z"



或UCase(C)>="A"AndUCase(C)<="Z"



或LCase(C)>="a"AndLCase(C)<="z"



(8)字符变量S第5个字符起取6个字符Mid(S,5,6)



(9)10≤x<2010<=xAndx<20



(10)x,y至少有一个小于zx


(11)x,y都大于zx>zAndy>z







5.写表达式的值



(1)188——注意运算的优先级顺序,以及整除运算“\”的计算



(2)200100——计算100+"100"时,由于两个操作数类型不同,在可能的情况下自动采用精度较高的类型,即把字符型转换为数值型,100+100得到200;然后进行字符串连接运算200&100,再自动将两个数值转换为字符串,得200100。



(3)68.56——在四舍五入函数产生之前,这就是四舍五入的计算方法



(4)876554——先进行字符串的“+”运算,再转换成数值。在变量名和函数名后可加上类型符,以强调其类型,但不是必须的。



(5)2000-2-29



(6)6







6.Shell函数调用



i=Shell("mspaint.exe",1)''启动画图



i=Shell("C:\ProgramFiles\MicrosoftOffice\OFFICE11\winword.exe",1)''启动Word



说明:“画图”是Windows本身提供的程序,可以省略路径。







8.答:单精度浮点型







第7,9题答案在教材中找。





习题四



第1,3,5,8题答案在教材中找。







2.赋值语句的错误



(1)10x不能做变量名。



上机验证结果:VB将10识别为行号,x=Sin(x)+y是为变量x赋值。故无语法错误。



(2)Sqr函数的参数为负数。



上机验证结果:“无效的过程调用或参数”



(3)赋值号左边不是变量名。



上机验证结果:“缺少子程序、函数或属性”



(4)除数为0



上机验证结果:“溢出”。







4.[答案略]



说明:小数位可以使用四舍五入函数Round或输出格式函数Format。例如Round(x,2)和Format(x,“0.00”)均可使结果只保留两位小数。但如果四舍五入后要进行数值运算,则使用Round函数,例如z=Round(x,2)+Round(y,2)。而Format函数通常只用于输出格式设置。







6.指出错误



(1)“≥”应改为“>=”,前者是中文字符,不具有运算功能。



(2)“10






7.写条件语句



(1)



DimcAsString

c=InputBox("c=")

IfMid(c,3,1)="C"Then

MsgBox"Yes"

Else

MsgBox"No"

EndIf



(2)



#使用If语句

DimxAsSingle,yAsSingle

x=Val(InputBox("x="))

Ifx>20Then

y=x^2+3x+2

ElseIfx>=10Then

y=Sqr(3x)-2

ElseIfx>0Then

y=1/x+Abs(x)

EndIf

Print"y=";y



#使用SelectCase语句

DimxAsSingle,yAsSingle

x=Val(InputBox("x="))

SelectCasex

CaseIs>20

y=x^2+3x+2

CaseIs>=10

y=Sqr(3x)-2

CaseIs>0

y=1/x+Abs(x)

EndSelect

Print"y=";y



(3)



#使用If语句

DimxAsSingle,yAsSingle,zAsSingle,MaxAsSingle

x=Val(InputBox("x="))

y=Val(InputBox("y="))

z=Val(InputBox("z="))

Max=x

Ify>MaxThenMax=y

Ifz>MaxThenMax=z

Print"Max=";Max



#使用IIF函数

x=Val(InputBox("x="))

y=Val(InputBox("y="))

z=Val(InputBox("z="))

Max=IIf(x>y,x,y)

Max=IIf(z>Max,z,Max)

Print"Max=";Max







9.计算循环次数



(1)6

(2)19

(3)0

(4)死循环直至溢出







10.40号语句执行4次;第50号语句执行12次;



执行第90号语句输出的结果是:13,0,2



说明:该程序为嵌套循环,其中外循环由j值变化(1,4,7,10)控制执行4次,当j值为13时结束循环;内循环由k值变化(6,4,2)控制执行3次,当k值为0时结束循环。第40行是外循环的循环体,故执行4次;第50行是内循环的循环体,故执行43=12次。







11.可以定一个较大的循环次数,在循环体中根据条件用ExitFor退出。



但这种情况通常用DoWhile循环控制。







12.编程(并非唯一正确答案)



(1)



DimiAsInteger,sAsInteger

Fori=1To10

s=s+(i+1)(2i+1)

Nexti

Print"s=";s



(2)



DimiAsInteger,n3AsInteger,n7AsInteger

Fori=1To100

IfiMod3=0Thenn3=n3+1

IfInt(i/7)=i/7Thenn7=n7+1

Nexti

Print"1-100中3的倍数有";n3;"个"

Print"1-100中7的倍数有";n7;"个"



(3)



Dims1AsString,s2AsString,iAsInteger

s1=InputBox("InputString")

s2=""

Fori=1ToLen(s1)

s2=Mid(s1,i,1)+s2

Nexti

Print"原序:";s1

Print"反序:";s2





Fori=Len(s1)To1Step-1

s2=s2+Mid(s1,i,1)

Nexti







13.输出字符串“10100”。该程序功能是将十进制数转化为二进制。



说明:要理解该程序需要了解数制转换的计算方法(有兴趣者参看百度百科http://baike.baidu.com/view/1426817.htm)。48是字符"0"的ASCII码。







14.运行时输出22484



该程序功能是求x和y最大公约数和最小公倍数。



说明:此算法称为“辗转相减法”。可对照例4.17的辗转相除(辗转求余)法。







15.[50,100]间的20个随机数,求最大值、最小值、平均值。



DimxAsInteger,sumAsInteger,averAsSingle

Dimn%,i%,max%,min%

Randomize

max=50:min=100:n=20

Fori=1Ton

x=Int(Rnd51+50)

List1.AddItemx

sum=sum+x

Ifx>maxThenmax=x

Ifx
Nexti

aver=sum/n

Print"最大值:";max,"最小值:";min,"平均值:";aver





习题五

1.指定数组的默认下界OptionBase1



2.合理的数组声明

(1)错。定义数组不可用变量(教材99页)。

(2)正确。该数组下标为0-11。

(3)错。VB中数组下标用圆括号。

(4)正确。三维数组三个下标分别为0-1,0-1,0-2,共12个元素。

(5)错误。非动态数组,不可重定义。

(6)错误。动态数组重定义时不可改变数据类型。

(7)正确。二维数组两个下标分别为0-2,0-3,共12个元素。

(8)语法错误,二维数组定义中漏写逗号——可能是印刷错误,加上此逗号则正确。



3.当引用数组元素时下标值小于定义的最小下标,或大于最大下标时,会发生“下标越界”错误。



4.数组名:a;数组类型:Single(单精度浮点型);维数:二维;

各维的上下界:第一维下界(最小下标)为-1,上界(最大下标)为2,

第二维下界(最小下标)为0,上界(最大下标)为3;

数组的大小:4行4列共16个元素

以矩阵的格式输出二维数组:

Fori=-1To2

Forj=0To3

Printa(i,j);

Nextj

Print

Nexti

或写成更加通用的代码形式:

Fori=LBound(a,1)ToUBound(a,1)

Forj=LBound(a,2)ToUBound(a,2)

PrintTab(j8);a(i,j);

Nextj

Print

Nexti



6.一维字符数组

Dima(1To20)AsString



PrivateSubCommand1_Click()''(1)随机产生字符串

DimiAsInteger,jAsInteger,nAsInteger,cAsString1

Randomize

Fori=1To20

a(i)=""''将第i个元素清空

n=Int(Rnd10+1)''产生[1,10]的随机数

Forj=1Ton''a(i)中有n个字符

c=Chr(Int(Rnd26+97))''随机产生字母97是字母a的ASCII码

a(i)=a(i)+c

Nextj

Nexti

EndSub



PrivateSubCommand2_Click()''(2)输出字符串

DimiAsInteger

Fori=1To20

PrintTab(((i-1)Mod5)11);a(i);

IfiMod5=0ThenPrint

Nexti

EndSub



PrivateSubCommand3_Click()''(3)最长的字符串

DimiAsInteger,imaxAsInteger

imax=1

Fori=2To20

IfLen(a(i))>Len(a(imax))Then

imax=i

EndIf

Nexti

Print"最长的字符串:";a(imax)

EndSub







第7,8题答案在教材中找。



第9题“自定义变量”含义不明,暂时无法回答。



第5,10题[暂略]



习题六



第1,2,6-8题答案可在教材中找到。



3.指出过程说明中的错误

(1)Sub子过程不应该定义类型

(2)函数与形式参数不应该同名

(3)数组作为形式参数时,应使用传地址方式,不可使用传值(ByVal)

(4)形式参数应该是变量或数组名,不可以是一个数组元素



4.指出调用过程语句的错误

(1)无语法错误,但因形参sum所对应的实参是常量3,故计算结果无法传递给主调程序。

(2)实参变量c与形参sum的类型不一致。

(3)类似于(1),形参sum所对应的实参是表达式a+b,故计算结果无法传递给主调程序。

(4)类似于(1)和(2),形参sum所对应的实参是表达式Sqr(c),故计算结果无法传递给主调程序。另外srq(a)存在语法错误(拼写错)。

(5)与(2)相同,实参c与形参sum的类型不一致。



5.迭代法求平方根

(1)自定义函数的定义及调用

FunctionFSqr1(aAsSingle)AsSingle

Dimx0AsSingle,xAsSingle

x=a

Do

x0=x

x=(x0+a/x0)/2

LoopWhileAbs(x-x0)>0.00001

FSqr1=x

EndFunction



PrivateSubCommand1_Click()

Dimx!,y!

x=Val(InputBox("x="))

Ifx>=0Then

y=FSqr1(x)

Printy

EndIf

EndSub

(2)自定义子过程的定义及调用

SubFSqr2(aAsSingle,xAsSingle)

Dimx0AsSingle

x=a

Do

x0=x

x=(x0+a/x0)/2

LoopWhileAbs(x-x0)>0.00001

EndSub

PrivateSubCommand2_Click()

Dimx!,y!

x=Val(InputBox("x="))

Ifx>=0Then

CallFSqr2(x,y)

Printy

EndIf

EndSub

(3)递归函数及调用[略]







习题七



第1-9题,答案在教材上找;第10,12-14题,略。



11.检测Ctrl和F3同时按下的代码:



PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)



IfShift=2AndKeyCode=114ThenMsgBox"HAHA"



EndSub





习题八



第1,2,6,7,9题答案可阅读教材找到。



3.写Open语句

(1)Open"Seqnew.dat"ForOutputAs#1''重写

或Open"Seqnew.dat"ForAppendAs#1''添加

(2)Open"Seqold.dat"ForInputAs#2

(3)Open"Seqappend.dat"ForAppendAsFreeFile





4.编程,将文件Text.dat读入变量strTest。

DimstrTestAsString

Open"Text.dat"ForInputAs#2

DoWhileNotEOF(2)

strTest=strTest+Input(1,#2)

Loop





8.本课程不涉及二进制文件。故此处以顺序文件读写方式编程。另外合并的结果可以是合并到其中某一个文件,也可以是合并到一个新的文件,此处代码是合并到其中一个文件F1.txt。

''方法一,在2号文件一次读一个字符并写入1号文件

DimstrTempAsString1

Open"d:\F1.txt"ForAppendAs#1

Open"d:\F2.txt"ForInputAs#2

DoWhileNotEOF(2)

strTemp=Input(1,#2)

Print#1,strTemp;''注意结尾有分号,否则每个字符一行

Loop

Close

''方法二,在2号文件一次读一个字符并累加,最后将累加结果写入1号文件

DimstrTempAsString''注意方法一变量定义的区别

Open"d:\F1.txt"ForAppendAs#1

Open"d:\F2.txt"ForInputAs#2

strTemp=""

DoWhileNotEOF(2)

strTemp=strTemp+Input(1,#2)

Loop

Print#1,strTemp

Close



习题九



答案在教材上找。







习题十



答案在教材上找



献花(0)
+1
(本文系丶献世首藏)