分章节解析

更新时间:2023-03-08 17:14:37 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 Visual Basic程序设计概述

一、本章知识点

1、面向对象的可视化编程

VB应用面向对象的程序设计方法(00P),把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,这些对象以可视化设计工具的形式存放在集成开发界面上,做到把Windows界面设计的复杂性“封装”起来。 2、事件驱动的编程机制

VB通过“事件”来激活某个对象,随着该对象的活动,会引发新的“事件”,这个事件又可能使另一个“对象” 激活,对象之间就是以这种方式联系在一起的。每个事件都可以通过一段程序(称为“事件过程”)来响应。 3、友好的VB集成开发环境

VB提供了易学易用的应用程序集成开发环境。在该集成开发环境中,用户可以设计界面、编写代码和调试及运行程序 4、对象

在VB程序设计中,对象主要有窗体和控件两类。对象具有属性、事件和方法三要素。 5、属性

每个对象都有其特征,称之为对象的属性(Property)。不同的对象有不同的属性。 6、方法

方法(Method)是对象可以进行的动作或行为。方法的应用格式如下: [对象名.] 方法名 [参数] 7、事件

“事件(Event)”是由VB系统预先设置好的、能够被对象识别的动作。 8、开发VB应用程序的一般步骤

(1)创建程序的用户界面

(2)设置界面上各个对象的属性 (3)编写对象响应事件的程序代码 (4)保存工程

(5)运行和调试应用程序 (6)创建可执行程序

二、试题与解析

选择题

1.扩展名为.vbp的工程文件中包含有__________。 A.工程中所有模块的有关信息

B.每个窗体模块中的所有控件的有关信息 c.每个模块中所有变量的有关信息

D.每个模块中所有过程的有关信息 【答案】A

填空题

第2章 VB的界面设计

一、本章知识点

1、窗体

(1)属性:Name(名称)、Caption、BackColor、ForeColor、BorderStyle、Enabled、Visible、Font、Left、Top、Width、Height等

(2)方法:Hide、Show、Move、Print、PrintForm、Refresh、Cls

(3)事件:Initialize事件、Activate/Deactivate事件、Load/Unload事件、Click/DblClick事件、Resize事件

(4)与窗体相关的操作语句:Load装载窗体语句、Unload卸载窗体语句、End语句、Print方法

2、控件的公共属性

Name、Caption、Enabled、Visible、Height、width、Top、Left、BackColor、ForeColor、FontName、FontSize、FontBold、FontItalic、FontStrikethru、FontUnderline、Font 3、文本框控件(TextBox)

(1)属性:Text、MultiLine、ScrollBars、Alignment、MaxLength、PasswordChar (2)事件:Change、LostFocus、Gotfacus、Keypress (3)方法:Refresh、Setfocus 4、标签(Label)

(1)属性:Caption、Alignment、AutoSize、BorderStyle、BackStyle (2)事件:Click(单击),DblClick(双击) (3)方法:Refresh、Move 5、命令按钮(CommandButton)

(1)属性:Default、Cancel、Style (2)事件:Click(单击) (3)方法:SetFocus

6、单选按钮(OptionButton)和复选按钮(CheckButton)

(1)属性:Value、Alignment、Style (2)事件:Click 7、框架(Frame):容器对象。框架控件可从功能上把在其范围之内的相关控件组织在一起 8、列表框(ListBox)

(1)属性:List、ListCount、ListIndex、Text、Selected、Sorted、Columns、Style (2)事件:Click,DblClick

(3)方法:AddItem、RemoveItem、Clear 9、组合框(ComboBox)

(1)属性:style、Text

(2)事件:Change、Click、DblClick (3)方法:AddItem、RemoveItem、Clear 10、图片框(PictureBox)和图像框(Image)

(1)属性:Picture、AutoSize(用于图片框)、Stretch(适用于图像框) (2)方法:Cls、Print 11、定时器(Timer)

(1)属性:Enabled、Interval (2)事件:Timer

二、试题与解析

选择题

1.如果窗体上有命令按钮“确定”,在代码编辑窗口有与之相对应的OK_Click()事件过程,则命令按钮控件的名称属性和Caption属性分别为________。

A.“OK”和“确定” B.“确定” 和“OK” C.“Command1” 和“确定” D.“Command1” 和“OK” 【答案】A

【解析】名称属性每个对象均有,而Caption属性只有部分对象具有。Caption属性是指控件的标题,即在控件上显示的文字。此题中命名按键上显示“确定”,则该控件的Caption属性为“确定”。事件过程的命名为<对象名>_<事件名>,OK_Click()事件则表示该控件的名称为OK,即名称属性为OK。注意:窗体对象的事件过程名称例外,一律为

_<事件名>。

2.以下所列项目不属于窗体事件的是________。 A.Initialize B.SetFocus C.GotFocus D.LostFocus 【答案】B

【解析】SetFocus是方法而不是事件。

3.以下关于方法的叙述中,错误的是__________。 A.方法是构成对象实体的一个部分 B.方法是一种特殊的过程或函数

C.调用方法的一般格式是:对象名称.方法名称 [参数] D.在调用方法时,对象名称是不可缺少的 【答案】D

4.创建应用程序的界面时,在窗体上设置了一个命令按钮,运行程序后,命令按钮没有出现在窗体上,可能的原因是__________。 A.该命令按钮的Value属性被设置为False B.该命令按钮的Enabled属性被设置为False C.该命令按钮的Visible属性被设置为False D.该命令按钮的Default属性被设置为True 【答案】C

5.若需要在同一窗体内安排两组相互独立的单选按钮(0ptionButton),可使用__________控件将它们分隔开。

①TextBox ②Picture ③Image ④Frame

A.①② B.②③ C.②④ D.③④ 【答案】C

6.单击滚动条两端的箭头时,滚动条Value属性值的改变量由__________属性值决定。 A.LargeChange B.Max C.SmallChange D.Min 【答案】C

7.设S是字符型变量,以下语句正确的是__________。 A.S=List1.Caption B.S=Timer1.Caption C.S=Text1.Caption D.S=Label1.Caption 【答案】D

8.以下控件对象中,具有Picture属性的是__________。

①PictureBox ②Frame ③OptionButton ④CommandButton ⑤ListBox ⑥CheckBox ⑦Label A.①③④⑥ B.①②⑤⑥⑦ C.①③④⑤⑥ D.①②③④⑤⑥ 【答案】A

填空题

1.若窗体有列表框List1,则List1.List(List1.ListIndex)的值等于List1的________属性值。 【答案】List1.text

2.执行下面的程序,当单击Command1时,列表框List1的第2列表项内容是____1____,第4列表项内容是____2____,第5列表项内容是____3____。

Private Sub Command1_Click() Dim I As Integer, j As Integer For I=1 To 10 J=I+J

List1. Additem j Next I

For I=1 To 4

List1. Removeitem List1. ListCount-I Next I End Sub

【答案】(1)3,(2)15,(3)28

第3章 VB程序设计基础

一、本章知识点

1、数据类型

整型(-32768~32767)、长整型、字节型、单精度型、双精度型、货币型、字符型、布尔型、日期型、变体型

2、常量

(1)数值常量:由正负号、数字和小数点组成,如123,-0.123,1.23E-6,3.14159265D8,&O137,&H137等。

(2)字符常量:把一串字符用引号括起来,就构成一个字符常量。如:\Basic \,\,\等。

(3)逻辑型常量:只有两个取值,True(真),False(假)。

(4)日期型常量:表示日期,用“#”括起来。如#06/11/2005#,#Jan l,2004#。

(5)符号常量:VB内部定义了许多符号常量,在使用程序代码为窗体及各种控件的某些属性赋予新的取值时,可以直接使用相应的内置符号常量,如vbRed、vbBlack等。用户也使用可自定义符号常量,应用Const语句先行说明。Const语句格式如下:

[Public|Private] Const <常量名> [As Type]=<值> 3、变量

(1)变量的命名规则: ①变量名必须以字母开头。

②只能由字母、数字和下划线组成,不能含有小数点、空格等字符。 ③字符个数不得超过255个。 ④不能使用VB的关键字 (2)变量的声明

Dim|Private|Static|Public 变量名[As数据类型][,变量名[As数据类型]?]

(3)变量的作用域:局部、窗体、全局 4、运算符与表达式

(1)算术运算符与算术表达式

算术运算符:^ → - (取负)→ * ,/ → \\ → mod → + , - (减) (优先顺序)

算术表达式:用算术运算符把数值型常量、变量、函数连接起来的式子。 (2)字符串连接符:& 和 + (3)关系运算符与关系表达式

关系运算符:>、>=、=、<>、<、<=

关系表达式:用关系运算符把两个比较对象连接起来的式子 (4)逻辑运算符与逻辑表达式 逻辑运算符:Not→And→Or、Xor

逻辑表达式:用逻辑运算符把逻辑变量、常量连接起来的式子

(5)运算规则:算术运算符→字符串运算符→关系运算符→逻辑运算符 5、VB常用内部函数

(1)数学函数:Abs(x)、Exp(x)、Sqr(x)

(2)字符串函数:Instr([f,]字符串1,字符串2[,k])、Lcase(字符串)、Len(字符串)、Left(字符串,n)、Ltrim(字符串)、Mid(字符串,m[,n])、Right(字符串,n)、Rtrim(字符串)、Trim(字符串)、Ucase(字符串)

(3)日期与时间函数:Date、Now

(4)转换函数:Asc(x)、Chr(x)、Cint(x) 、Val(x)、Str(x)、CStr(x) 、Fix(x)、Int(x)

(5)格式输出函数:Spc(n)、Tab (n)、Format(表达式,格式符) (6)随机函数:Rnd(x)、Randomize 6、数据输入输出

(1)赋值语句 Var=<表达式>

对象.属性值=<表达式> (2)InputBox函数

Var = InputBox(prompt[,title][,default][,xpos][,ypos]) (3)MsgBox函数

变量 = MsgBox(prompt [,button] [,title]) MsgBox prompt [,button] [,title] 7、VB应用程序的结构

窗体模块、标准模块、类模块

二、试题与解析

选择题

1.窗体上放置了三个文本框,若在Text1中输入456,在Text2中输入78,在程序中执行语句Text3=Text1 + Text2后,则在Text3中显示________。

A.534 B.45678 C.溢出 D.语法错误 【答案】B

【解析】文本框中的数据为字符型,两个字符型数据进行“+”运算,即将两个字符串进行连接。注意:字符运算符“&”与“+”的区别。

2.假设变量BOOL是一个布尔型变量,则下列中,正确的是________。

A.BOOL = ?True? B.BOOL = .TRUE. C.BOOL = #TRUE# D.BOOL = True 【答案】D

【解析】布尔型变量只有两个值,即True和False,两边不须加任何符号。 3.表达式6.5 * 5 Mod 28 \\ 8的值是________。

A.0 B.1 C.2 D.3 【答案】C

【解析】算术运算的优先级别为:^ → - (取负)→ * ,/ → \\ → mod → + , - (减),故先计算乘,再运算整除,最后进行取余运算。而取余运算要求参加运算的数据为整型,故对32.5进行取整为32,所以结果为2。 4.函数Cint、Int、Fix都返回整数值,以下能正确地描述他们返回值的大小关系的是________。

A.Cint(-4.51) = Int(-4.51) < Fix(-4.51) B.Int(-4.51) < Cint(-4.51) < Fix(-4.51) C.Cint(-4.51) < Fix(-4.51) < Int(-4.51) D.Int(-4.51) < Fix(-4.51) = Cint(-4.51) 【答案】A

【解析】Cint(-4.51)是对小数部分进行四舍五入,值为-5,Int(-4.51)是得到一个不大于-4.51的最大整数,为-5,Fix(-4.51)是舍去小数部分得到一个整数,所以值为-4。

5.可以把变长字符串S中的第一个“ABC”子串,替换成“1234”的语句是________。

A.S = Left(S, InStr(S, “ABC”)) & “1234” & Right(S, Len(S) – Instr(S,”ABC”) – 2) B.Mid(S, InStr(S, “ABC”), 3) = “1234” C.Mid(S, InStr(S, “ABC”), 4) = “1234”

D.S = Left(S, InStr(S, “ABC”) - 1) & “1234” & Right(S, Len(S) – Instr(S,”ABC”) – 2) 【答案】D

【解析】此题中的Mid是语句而不是函数,因为函数只能返回值,而不能对函数进行赋值。Mid语句的格式:

Mid(<字符型内存变量名>,<起始位置>[,<长度>])=<字符串> 功能:将内在变量中指定位置的指定的字符个数替换成指定的字符串。替换的字符个数与长度相等,如省略长度,则其长度由赋值号后面的字符个数决定。 6.执行下面语句后,Len函数值最大的是________。

Dim IA As Integer,B As Single,S As String*5,Ch As String IA=32767:B=23.5:S=”A”:Ch=”abcd”

A.Len(IA) B.Len(B) C.Len(S) D.Len(ch) 【答案】C

【解析】Len函数测试内存变量所占内存空间的大小,IA是整型,占2个字节,B是单精度型,占4个字节,S为定长字符串,长度为5,因此其所占内存空间为固定的5个字节,Ch为不定长字符串,其长度由其值决定,此题中其值为”abcd”,共4个字符,故其占4个字节。 7.假设变量Lng为长整型变量,下面不能正常执行的语句是________。 A.Lng=16384*2 B.Lng=4*0.5*16384 C.Lng=190^2 D.Lng=32768* 2 【答案】A

【解析】VB在运算时,如两个运算对象的类型相同,它们的运算结果也将是同一类型,如不同数据类型进行运算,结果的类型为两个运算对象中存储长度较长的那个对象的类型。A中16384和2均为整型,故其结果也是整型,但其值超出整型取值范围,因此不能正常执行。 8.设变量D为Date型、A为Integer型、S为String型、L为Long型,下面赋值语句中不能执行的是___________。

A.D=#12:30:00 PM# B.A=\ C.S=Now D.L=\【答案】B

9.下面表达式中,___________的值是整型(Integer或Long)。 ①36+4/2 ②123 +Fix(6.61) ③57+5.5\\2.5 ④356 & 21 ⑤\ ⑥4.5 Mod 1.5

A.①②④⑥ B.③④⑤⑥ C.②④⑤⑥ D.③⑥ 【答案】D

10.在窗体的通用说明部分有以下说明语句,其中正确的是__________。 A.Private Const A As Integer=235/2 B.Const B As Integer=Cint(2.53) C.Dim Const C As Integer=3579 D.Public Const S As Boolean=True 【答案】A

11.在过程中已说明a、b、c均为Integer型变量,且均已被赋值,其中a=30、b=40、C=50,如再执行下面的语句,可正常执行的是___________。

A.Print a*b*c B.Print a*b*c*1& C.Print 1&*a*b*c D.Print a*b*c*1! 【答案】C

12.表达式x Mod Y\\z>5 And A+B+C>=36中最先被执行的运算是_________。 A.+ B.And C.Mod D.\ 【答案】D

填空题

1.在下面程序中,Command1_Click()事件过程的功能是生成一个5×5的矩阵,该矩阵的副对角线(指矩阵左下角到矩阵右上角连线上的元素)上方元素都是偶数,副对角线和它的下方元素都为奇数。Command2_Click()事件过程的功能是,交换以副对角线为界线的上三角和下三角的对应元素。完善程序,实现以上功能。

Option Explicit Option Base 1

Dim A(5, 5) As Integer

Private Sub Command1_Click() Dim I As Single, J As Integer

Dim N As Integer Randomize For I =1 To 5 For J = 1 To 5 Do N = Int(Rnd * 90) + 10 If J <= 5 – I And N Mod 2 = 0 Then A(I, J) = N ElseIf J > 5 – I And N Mod 2 <> 0 Then

A(I, J) = N End If Loop ____1_____ Text1=Text1 & Str(A(I, J)) Next J Text1 = Text1 & vbCrLf Next I End Sub

Private Sub Command2_Click()

Dim I As Integer, L As Integer, T As Integer Dim J As Integer, R As Integer For I = 1 To 5 For J = 1 To 5 – I T = A(I, J) ____2_____ ____3_____ A(I, J) = A(L, R) A(L, R) = T

Next J Next I For I = 1 To 5 For J = 1 To 5 Text2 = Text2 & Str(A(I, J)) Next J Text2 = Text2 & vbCrLf Next I End Sub 【答案】(1)Until A(I,J)<>0,(2)R=6-I,(3)L=6-J

【解析】Command1_Click过程中通过二重For-Next循环对二维数组的各个元素进行赋值,Do-Loop循环体内二个判断语句判断所要赋值的元素是否处于副对角线上方及生成的随机数的奇偶性,如符合题意,则对该元素进行赋值,如不符合,则不能赋值,即执行一次循环体,不一定能对元素赋值。Command2_Click是将A(I,J)和A(L,R)元素值进行交换,因此第2、3个空是对L、R进行赋值。

2.执行下面的程序,当单击Command1时,Picture1中显示内容的第二行与第四行分别是_____1____与____2____,Picture2中显示内容的第一行和第三行分别是____3____与____4____。

Private Sub Command1_Click()

Dim a(4, 4) As Integer, i As Integer, J As Integer Dim b(4, 4) As Integer For i=1 To 4 S="" For J=1 To 4

a(I, j)=((i-1)*4+j)

S=S & Right("" & Str(a(I, j)), 3) next j

Picture1.Print S Next i

For i=1 To 4 For J=1 To 4 b(5-j, i)=a(I, J) Next j Next i

For i=1 To 4 S="" For J=1 To 4

If Len(CStr(b(I, J)))<2 Then

S=S & "" & CStr(b(I, j)) & "" E1se

s=s & CStr(b(I, j)) & "" End If Next J

Picture2.Print S

Next i End Sub 【答案】(1)5 6 7 8,(2)13 14 15 16,(3)481216(4)261014

3.下面程序的功能是,输入x的值,利用递推法分别求出级数前n项(n=0,1,2,3,?)之和。

S?a0?a1???an??

其中, a0=1,an=an-1.

x?3?2n? n=1,2,3,.... 2n计算级数,直到第n项的绝对值小于等于0.001时停止。完善程序,实现以上功能。

Option Explicit

Private Sub Command1_Click()

Dim x As Single, i As Integer, S As Single Dim a As Single, a1 As Single X=Text1 a=1:S=a

List1.AddItem "S(" & "0)=" & Str(S) Do i=i+1

____1____

S=S+a1

List1.AddItem "S(" & CStr(i) & ")=" & Str(S) If Abs(a1)<=0.001 Then Text2=i ____2____ else a=a1 end if Loop End Sub 【答案】(1)a1=a*x*(3-2*I)/(2*I),(2)exit do

4.执行下面的程序,单击窗体,则在窗体上显示的是

Option Explicit

Private Sub Form_Click()

Dim a As Integer, b As Integer, C As Integer b=6:c=6.5 a=b=c Print a End Sub 【答案】-1

第4章 VB控制结构

一、本章知识点

1、If语句

(1)单分支结构的If语句 (2)双分支If语句 (3)多分支If语句 2、IIf函数

Var=IIf(条件,True部分,False部分) 3、Select Case语句(p121)

测试表达式可以是数值表达式或字符串表达式,也可以是一个常量或一个变量。如:

Case l,3,7 Case \,\

Case 1 To l0,\Case Is > 15

4、计数型循环(For - Next)

首先计算初值表达式(简称初值)、终值表达式(简称终值)、步长表达式(简称步长)的值,循环中其值不会发生改变 5、条件型循环(Do - Loop)

条件型循环的四种基本格式

二、试题与解析

选择题

1.在Select Case x结构中,描述判断条件3≤X≤7的测试项应该写成__________。 A.Case 3<=X<=7 B.Case 3<=X,X<=7 C.Case Is<=7,Is>=3 D.Case 3 To 7 【答案】D

填空题

1. 执行下面的程序,当单击窗体时,显示在窗体上第一行的内容是________,第二行的内

容是________。

Private Sub Form_Click( )

Dim i As Integer, Sum As Integer For I = 0.5 To 8.5 Step 2.5 Sum = Sum + I * 10 Next I Print Sum

Print I End Sub

【答案】200,10

【解析】I为整型变量,赋初值为0.5,系统将其转换为整型0,第一次循环结束后,加上步长2.5,即0+2.5,再转换为2,因此此题循环变量的取值为0,2,4,6,8,当循环变量的值为10时,超出终值,终止循环。(给整型变量赋带小数的值时,系统自动转换为整型,转换原则为四舍六入五成双,如3.1为3,3.6为4,3.5为4,2.5为2)

2.执行下面的程序,当单击窗体时,显示在窗体上第一行的内容是________,第三行的内容是________,第五行是________。

Private Sub Form_Click( ) Dim S As String, i As Integer, n(9) As Integer Dim S1 As String * 1, j As Integer S = Trim(“12345a307291b233”) For i = 1 To Len(S) S1 = Mid(S, I, 1) If S1 >= “0” And S1 <=”9” Then j = Val(S1) n(j) = n(j) + 1 End If Next I For j = 0 To 9 Print j; “:”; n(j) Next j

End Sub

【答案】0:1,2:3,4:1

【解析】此程序功能为统计字符串S中0—9数字出现的次数。 3.下面程序的功能是对密文解密。密文的加密方法是以字符为单位,取其ASCII码,按逆序保存(例如字母“e”的ASCII码是01100101,密文中则为10100110)。解密是加密的逆过程。完善程序,实现以上功能。

Private Sub Command1_Click()

Dim S As String, st As String Dim i as integer , n as integer S = Text1 Do Until n >=Len(S) ____1_____ If n Mod 8 <> 0 Then St = st & Mid(s , n, 1) Else St = st & Mid(s , n, 1) List1.AddItem St _____2____ End If

Loop End Sub

Private Sub Command2_Click() Dim S as String, st as String, I as Integer For I = 0 To ____3_____ ST = List1.List(i) For j = 1 To Len(st) S = Mid(st, j, 1) & S Next j For j = Len(S) To 1 Step –1 N = ____4______ Next j Text2 = Text2 & Chr(N) S = “” ____5____ Next i End Sub

【答案】(1)N=N+1,(2)St=””,(3) List1.ListCount-1,(4)N+Val(Mid(s,j,1))*2^(8-J),(5)N=0

【解析】Command1_Click过程中:N为计数器,表示对第N个数字进行操作,通过If语句对N进行判断是否是8的倍数,如是则表示St是一个密文字符的ASCII码逆序,输出至List1中,并将St清空,为下一个字符作准备。Command2_Click过程中:循环次数为List1中的列表项数,由于循环变量I是从0开始,因此循环终值为List1.ListCount-1,由于List1中存放的是密文的逆序,通过第一个For-Next j循环将其反射输出至S中,即S中存放的是密文的正序,再通过第二个For-Next j循环将S由二进制转换成十进制数N,最后再在循环体结束处将S和N清空,为解密下一字符作准备。

4.下面程序的功能是,验证任意一个大于5的奇数可表示为3个素数之和。完善程序,实现以上功能。

Option Base l

Private Sub Command1_Click()

Dim P() As Integer, N As Integer, L As Integer Dim I As Integer, J As Integer, k As Integer Dim ch As String

N=InputBox("输入一个大于5的奇数")

Label1.Caption=____1____ Call Prime(P, N) L=UBound(P) For I=1 To L For J=1 To L For k=1 To L

If ____2____ Then

ch=CStr(P(I)) & "+" & CStr(P(J)) & "+" & CStr(P(k)) Text1.Text=ch

____3____

End If Next k Next J Next I End Sub

Private Sub Prime(A() As Integer, N As Integer) Dim I As Integer, Idx As Integer Dim J As Integer For I=2 To N

For J=2 To Sqr(I)

If I Mod J=0 Then Exit For Next J

If J>Sqr(I) Then ____4____

ReDim Preserve A(Idx) A(Idx)=I

End If Next I End Sub

【答案】(1) N & \,(2) N = P(I) + P(J) + P(k) ,(3) Exit Sub ,(4) Idx = Idx + 1

5.将20个棋子围成一圈,按顺时针方向从1~20给棋子编号,从中取出棋子的规则是:从某编号棋子开始取出第1个棋子,然后按顺时针方向围绕圆周数棋子,从1数到2取第2个,再从1数到3取第3个,再从1数到4取第4个??直到取完。本程序的功能就是找出依照上述规则取棋子的编号序列,使得最后一个被取棋子的编号为指定的编号。例如:若指定最后取棋子的编号为9,则必须从编号为17的棋子开始取第一个棋子,取棋子的顺序是:17,19,2,6,11,18??9。完善程序,实现以上功能。

Option base 1

Private sub command1_Click()

Dim a(20) as integer, i as integer , k as integer Dim n as integer, number as integer, s as string Number=val(text2) For k=1 to 20 For i=1 to 20 a(i)=1 next i

s=____1____

call sub1(a, k, n, s) if n=number then text1=s exit for end if next k end sub

private sub sub1(a() as integer, Byval Idx As integer, n as integer, s as string) dim i as integer, js as integer, sum as integer dim ub as integer, step as integer ____2____ js=1:step=1 A(Idx)=0

Do while js<20 Step=step+1

____3____

Do While Sum

If Idx>Ub Then ____4____ Sum=Sum+A(Idx)

Loop A(Idx)=0

S=S & Left(CStr(Idx) & " ", 3) _____5____

If Js Mod 10=0 Then S=S & vbCrLf Loop N=Idx End Sub

【答案】(1) s = Left(CStr(k) & \ \,(2) ub = UBound(a)(或ub=20) ,(3) sum = 0 ,(4) Idx = 1,(5) js = js + 1

6.下列程序的功能是计算圆周率π(计算精确到第n项减1的绝对值小于10-5为止)。

??2?22?22?2?22?2?2???

Option Explicit

Private Sub Form_Click()

Dim Y As Single, t As Single, a As Single Y=2:t=0 Do

_____1______

a=2/t

If ______2_______ Then Exit Do Y=Y*a Loop

Print \End Sub 【答案】(1)t = Sqr(2 + t)(2)abs(a – 1) < 0.00001

7.执行下面程序,单击按钮Command1,在图片框Pic2中显示的第一行是_____1_____,第二行是_____2_____,第三行是____3_____。

Option Explicit Option Base 1

Private Sub Command1_Click()

Dim sa(3, 3) As String*1, i As Integer, J As Integer Dim S As String, k As Integer S=\K=1

For i=1 To 3 For J=1 To 3

sa(I, J)=Mid(S, k, 1) Pic1. Print sa(i, j); \ k=k+1 Next J Pic1.Print Next i For i=1 To 3

For J=1 To 3

k=(Asc(sa(I, J))-Asc(\ sa(I, j)=Chr(k+Asc(\ Pic2.Print sa(I, J); \ \ Next J Pic2.Print Next i End Sub 【答案】(1)L S P(2)H X F(3)B G J

8.执行下面的程序,单击按钮Command1,在窗体上显示的第一行是____1_____,第二行是_____2_____,第三行是____3____,事件过程Command1_Click中的For循环共执行了_____4_____次。

Private Sub Command1_Click()

Dim X As Integer, Y As Integer, m As Integer Y=2

For X=1 To 8 Step y M=x +Y

Call sub1(m, x) Print m, x Next X End Sub

Private Sub Sub1(ByVal a As Integer, b As Integer) a=a +b b=b+1 End Sub 【答案】(1)3 2(2)6 5(3)9 8(4)3

第5章 数组

一、本章知识点

1、数组与数组元素

数组是一组按一定顺序排列的数据集合形式如下: 数组名(下标1[,下标2,?]) 2、数组的维数

一个下标的数组称为一维数组,两个下标的数组称为二维数组,?? 3、声明语句

Dim|Static|Private|Public数组名([下界1 To] 上界1[,[下界2 To] 上界2 ?])[As数据类型] 4、数组的类型

与变量的类型相同,不能在窗体的通用声明处声明全局数组。 5、与数组相关的函数

LBound函数、UBound函数、Array函数 6、动态数组的定义

ReDim [Preserve] 变量(下标) As 数据类型 7、数组刷新语句(Erase)

功能是清除静态数组的内容,或者释放动态数组占用的存储空间 8、数组元素的赋值

(1)利用赋值语句为数组元素赋值 (2)利用循环语句为数组元素赋值

(3)利用InputBox函数为数组元素赋值 (4)利用Array函数为数组元素赋值 9、数组元素的输出

通常采用循环方式输出 10、控件数组

其数组元素由一组相同类型的控件组成 (1)件数组具有相同的控件名

(2)控件数组中的控件具有相同的属性设置 (3)所有控件共享相同的事件过程

二、试题与解析

选择题

1.下面有关数组的说法中,错误的是________。

A. 数组必须先定义后使用 B. 数组形参可以是定长字符串类型 C. Erase语句的作用是对已定义数组的值重新初始化

D. 定义数组时,数组维界值可以不是整数 【答案】C

【解析】Erase语句功能是清除静态数组的内容,或释放动态数组占用的存储空间。定义数组时,数组维阶若不是整数,自动对其四舍五入。

2.在窗体模块代码窗口的通用声明处,可以使用________语句说明数组。 ①Public A(10) As Integer ②Dim A(IO) As Integer ③Private A(IO) As Integer ④Static A(10) As Integer A.①② B.②③ C.③④ D.①④ 【答案】B

【解析】定义数组时,在过程中可用Dim和Static定义局部数组和静态数组,在模块通用声明处可用Private和Dim定义模块级数组,Public只能在标准模块的声明处定义全局数组。 3.以下有关ReDim语句用法的说明中,错误的是__________。 A.ReDim可用于定义一个新数组

B.ReDim语句既可以在过程中使用,也可以在模块的通用声明处使用 C.无Preserve关键字的ReDim语句,可重新定义动态数组的维数 D.在ReDim语句中,可使用变量说明动态数组的大小 【答案】B

填空题

1.执行下面程序,单击按钮Command1,A(1,1)的值是_____1____,A(1,4)的值是____2____,A(4,1)的值是____3_____,A(4,4)的值是_____4______。

Option Base 1

Private Sub Command1_Click()

Dim A() As Integer, I As Integer, J As Integer Dim K As Integer, n As Integer n=4

ReDim A(n, n) I=1:J=n: A(I, J)=l For K=2 To n*n If I+1>n Then I=n-J+2: J=1

ElseIf I+1<=n And J+1>n Then J=J-I:I=1 E1se

I=I+1:J=J+1 End If A(I, J)=K Next K

For I=1 To n For J=l To n Print A(I, J); Next J Print Next I

End Sub 【答案】(1)7(2)1(3)16(4)10

第6章 过程

一、本章知识点

1、建立Sub过程

格式如下:

[Static][Private][Public] Sub过程名[(参数表)] ?

[Exit Sub]

?

End Sub 2、调用Sub过程

(1)用Call语句调用Sub过程 Call 过程名[(实际参数)]

(2)把过程名作为一个语句来使用 过程名 [实参1[,实参2, ?]] 3、建立Function过程

[Static][Private][Public]Function函数名[(参数表)][As类型] ?

[函数名=表达式] [Exit Function] ? End Function 4、调用Function过程

函数名([实参表]) 5、形参与实参

形参是在过程的声明中出现的变量,实参则是在调用过程时传递给过程的常量、变量、表达式和数组。 6、按值传递

形参表的参数前使用关键词ByVal,称为按值传递 7、按地址传递

形参表的参数前使用关键词ByRef(通常省略) 8、数组参数的传递

传递方式只能是按地址传递 9、递归的概念

递归是一种过程自身调用自身的调用机制,递归分为两种类型:一种是直接递归,即在过程中调用本身;另一种是间接递归,即过程间接地调用自身。 10、局部变量

该变量只能在本窗体(或本模块)中有效,在其他窗体或模块中不能引用该变量。

11、模块级变量

在窗体模块的通用声明段中声明的变量 12、全局变量

全局变量可以被应用程序中的任何一个窗体和模块直接访问 13、同名变量

在一个窗体中可以包括许多过程,在不同过程中定义的局部变量可以同名 14、静态变量

退出过程时,其局部变量的值被保留,当再次调用该过程时,其值还能使用的变量为静态变量

二、试题与解析

选择题

1.下面定义Sub子过程的各个语句中,正确的语句是________。 ① Private Sub Sub1(A( ) As String) ② Private Sub Sub1(A(1 To 10 ) As String*8) ③ Private Sub Sub1(S As String) ④ Private Sub Sub1(S As String*8)

A.①②③④ B.①②③ C.①③④ D.①③ 【答案】D

【解析】形参可以是:(1)除定长字符串之外的合法变量名(数组可以是定长的字符串);(2)后面跟有左、右括号的数组名。此题中的②数组A不能有维数及上下限说明,④为定长字符串。

2.程序中有两个过程Private Sub Fun1(S As String)和Private Sub Fun2(a() As String* 6),在调用过程中用Dim St(6) As String*6定义了一个字符串数组。下面调用语句中正确的是________。

①Call Fun1(St(3)) ②Call Fun2(St) ③Call Fun1(St) ④Call Fun2(st(6)) A.①② B.①③ C.②③ D.②④ 【答案】A

【解析】在函数Fun1中形参为字符型变量,调用该函数时实参应为字符型变量或数组的某个元素,Fun2中形参为数组,调用该函数时实参也应为数组。③在调用Fun1时实参为数组, ④在调用Fun2时实参为数组的下标为6的元素。

3.下面关于过程参数的说法,错误的是___________。 A.过程的形参不可以是定长字符串类型的变量

B.形参是定长字符串型的数组,则对应的实参必须是定长字符串型数组,且长度相同 C.若形参是按地址传递的参数,形参和实参也能以按值传递方式进行形实结合 D.按值传递参数,形参和实参的类型可以不同,只要相容即可 【答案】B

4.以下有关事件过程的说法中,错误的是___________。 A.标准模块中不能包含事件过程

B.事件过程都是无参(没有形式参数)的过程

C.事件过程也可以通过Call语句调用执行 D.在事件过程中不能声明全局变量 【答案】B

填空题

1.运行下面的程序,当单击Command1时,窗体上显示的第一行内容是________,第二行内容是________, 最后一行的内容是________。

Option Explicit Dim N As Integer

Private Sub Command1_Click()

Dim i As Integer, j As Integer For i=3 To 1 Step-2

N = Fun(I, N) Print N Next i End Sub

Private Function Fun(A As Integer, B As Integer) As Integer

Static X As Integer

Dim Sum As Integer, I As Integer X = X + N For I = 1 To A B = B + X + I N = N – I \\ 2 Sum = Sum + B Next I A = A + 1 Fun = Sum + A End Function 【答案】11,61,136

【解析】此题考的是变量的作用域。N为窗体级变量,在过程Command1_Click()和函数Fun 中均有效,过程中调用函数Fun时两个参数均为按地址传递,故函数Fun中的变量B即为过程中的变量N,B的值改变会改变N的值。另外在函数中使用了静态变量X,第一次调用函数时,X的初值为0,以后调用函数时,X的初值为上一次调用结束时的值。

2.执行下面的程序,单击Command1后,显示在窗体上第一行的内容是________,第二行的内容是_________,第三行的内容是________。 Option Explicit

Private Sub Command1_Click()

Dim N As Integer, M As Integer N = 2

Do While M < 3

N = N +2

If Fun(n) Then

Print N M = M +1

End If Loop End Sub

Private Function Fun(Byval N As Integer) As Boolean If N / 2 = Int(N / 2) Then Fun = Fun(n / 2) Else If N = 1 Then Fun = True End If End Function 【答案】4,8,16

【解析】N/2=Int(N/2)为判断N是否是偶数,如是偶数,则递归调用函数Fun,如不是,则再判断N是否等于1,如等于1,则函数值为True,否则为False。当函数值为True时,则输出N的值,共输出3个。

3.下面程序的功能是,找出100以内所有可以表示成3个连续自然数之和的数。完善程序,实现以上功能。

Option Explicit

Private Sub Command1_Click() Dim I As Integer, N As Integer Dim Js As Integer, S As String For I = 1 To 100

If Fun(I, N, Js) Then S = Str(I) & “ = “ & N Do _____1_____ N = N + 1 S = S & “ + “ & N Loop List1.AddItem S End If Next I End Sub

Private Function Fun(L As Integer, M As Integer, Js As Integer)As Boolean Dim I As Integer, Sum As Integer, K As Integer For I = 1 To L ____2____ K = 0 ____3____ Do While Sum < L And K < 3 K = K + 1 Js = Js + 1 Sum = Sum + Js Loop If ____4____ Then M = I

Fun = True Exit For End If Next I End Function 【答案】(1)While N

【解析】在Command1_click过程中,如Fun函数值为真,则将字符串S添加至List1中,由S = Str(I) & “ = “ & N语句可以得出I为满足条件的一个自然数,N为三个连续数中的第一个数。再分析函数Fun,形参L即为实参I,M为N,Sum中存放的是三个连续数的和,因此如Sum的值等于L,则函数值为真,同时M=I,即表示L可表示为I开始的三个连续自然数之和,但在求和时Sum是和Js进行的累加,所以必须使第一个相加时Js的值为I,结束后Js中保存的是三个连续数中的最后一个数;如不等,则重新循环,但应在求和之前先将Sum清零。再回到过程中,输出的S应为三个连续自然数,但在循环时没有计数器,故只能用Js来控制循环次数。

4.运行下面的程序,当单击Command1时,窗体上显示的第一行内容是____1____,第三行内容是____2____, 第四行内容是____3____。

Private Sub Command1_Click() Print Test(3) End Sub

Private Function Test(t As Integer)As Integer Dim i As Integer If t>=1 Then Call Test(t-1)

For i=3 To t Step-1

Print Chr(Asc("A")+i);

Next i Print End If Test = t End Function 【答案】(1)DCB(2)D(3)3

5.运行下面的程序,当单击窗体时,窗体上显示的第一行内容是____1____,第三行内容是____2____,第四行内容是____3____。

Dim X As Integer, y As Integer Private Sub Form_Click()

Dim a As Integer, b As Integer a=5: b=3

Call sub1(a, b) Print a, b Print X, Y End Sub

Private Sub sub1(ByVal m As Integer, n As Integer) Dim Y As Integer

X=m +n: Y=m - n m=fun1(X, Y) n=fun1(Y, X) End Sub

Private Function fun1(a As Integer, b As Integer)As Integer X=a +b:Y=a-b Print x, Y Fun1=X+Y End Function 【答案】(1)10 8(2)5 2(3)12 -10

6.执行下面的程序,单击按钮Command1,在窗体上显示的第一行是____1____,第二行是_____2_____,第三行是_____3_____。

Option Explicit

Private Sub Command1_click() Dim X As Single, i As Integer X=1.2

For i=l To 3 X=x*i

Print fun1(X) Next i End Sub

Private Function fun1(x As Single) As Single Static Y As Single Y=y +X Fun1=Y/2 End Function 【答案】(1)0.6(2)1.8(3)5.4 7.执行下面的程序后,单击按钮Command1,则N的值是_____1____,A的值是_____2_____,B的值是_____3_____。

Option Explicit Dim N As Integer

Private Sub Command1_Click() Dim A As Integer, B As Integer A=2: B=3 For N=1 To 6

If N Mod 2=0 Then B=Fun(N, A)+A Else

A=Fun(B, N)+B End If Next N

Print N, A, B End Sub

Private Function Fun(X As Integer, Y As Integer)As Integer

X=Y-1+N Y=X+Y-N Fun=X+Y End Function 【答案】(1)10(2)27(3)9

8.执行下面程序,单击按钮Command1,窗体上显示的结果中I的值是____1____,J的值是____2____,K的值是_____3_____。

Option Explicit

Private Sub Command1_Click() Dim I As Integer, j As Integer Dim K As Integer I=1: J=2

K=Fun(I, Fun(I, J))+I+J Print \End Sub

Private Function Fun(A As Integer, ByVal B As Integer)As Integer A=A+B B=A+B Fun=A+B End Function 【答案】(1)11(2)2(3)43

9.本程序的功能是从给定的纯英文字符串中找出最长的一个按字母顺序排列的子串。程序界面参见图1。

Option Explicit

Private Sub Command1_Click() Dim st As String st=Text1

Text2=max_st(st) End Sub

Private Function max_st(st As String)As String

Dim i As Integer, sta As String 图 1 Dim P As String P=Mid(st, 1, 1)

For i=1 To Len(st)-1

If Asc(Mid(st, i+1, 1))-Asc(Mid(st, I, 1))=1 Then

______1______ Else

If Len(P)>1 And Len(p)>Len(sta) Then

Sta=_____2_____

End If

_____3______

End If Next i

If Len(P)>1 And Len(P)>Len(sta) Then ______4_____ E1se

Max_st=sta End If End Function 【答案】(1)P = P + Mid(st, i + 1, 1)(2)p(3)P = Mid(st, i + 1, 1)(4)max_st = P 10.下面程序的功能是找出由两个不同的数字组成的回文平方数。程序界面参见图2。

Option Explicit

Private Sub Command1_Click()

Dim A(0 To 9) As Integer, I As Long, Flg As Boolean Dim L As Long, J As Integer, Sum As Integer For I=10 To 1000 L=I* I

____1_____

Call ____2____ If Flg then For J=0 To 9

Sum=Sum+A(J) Next J

If Sum=2 Then

List1. AddItem CStr(I) & \& Str(L)

End If

End If 图 2 Sum=0 Next I End Sub

Private Sub Sub1(byval X As Long, A()As Integer, BL As Boolean) Dim N As Integer, Idx As Integer, I As Integer BL=False

N=Len(CStr(X)) For I=1 To N/2

If _____3______ Then Exit Sub End If Next I BL=True For I=1 To N

Idx=X Mod 10 _____4______

X=(X\\10) Next I End Sub

【答案】(1)Erase A(2)Sub1(L, A, Flg)(3)Mid(CStr(X), I, 1) <> Mid(CStr(X), N - I + 1, 1)(4)A(Idx) = 1

11.下面程序的功能是随机生成10个不同的两位数,从中找出所有互质数对。若两个数除了1以外没有其他公约数,这两个数就是互质数。其中函数Rec是一个递归函数。程序界面参见图3。

Option Explicit

Private Sub Command1_Click()

Dim A(10)As Integer, I As Integer, J As Integer Dim N As Integer, K As Integer Randomize

A(1)=Int(90*Rnd)+10 Text1=A(1) _____1_____ Do _____2_____

N=Int(90*Rnd)+10 If _____3______ (Text1,CStr(N))=0 Then

Text1=Text1 & Str(N)

K=K+l 图 3 A(K)=N End If Loop

For I=1 To 9

For J=I+1 To 10

If Not Rec(A(I), A(J), 2) Then

List1.AddItem Str(A(I)) & Str(A(J)) End If Next J Next I End Sub

Private Function Rec(N As Integer, M As Integer, K As Integer)As Boolean If K>N Then _____4_____

E1se

If N Mod K=0 And M Mod K=0 Then Rec=True

_____5_____ E1se

_____6______ End If End If End Function 【答案】(1)k=1(2)While K < 10(3)InStr(4)Exit Function(5)Exit Function(6)Rec = Rec(N, M, K + 1)

12.执行下面程序,单击按钮Command1,窗体上显示的第一行是____1_____,第二行是____2____。

Private Sub Command1_Click()

Dim x As Integer, y As Integer, Z As Integer X=6: y=12: Z=20 Print fun1(x, y)

Print fun1(fun1(x, y), z) End Sub

Private Function fun1(a As Integer,b As Integer)As Long Dim Y As Integer Y=a DO

If y Mod b=0 Then Fun1=y

Exit Function Else

y=y +a End If Loop End Function 【答案】(1)12(2)60

13.执行下面程序,单击按钮Command1,窗体上显示的第一行是_____1_____,第二行是____2____。

Option Explicit Dim a As Single

Private Sub Command1_Click() Dim a As Single, b As Integer a=1. 2: b=3 Print fun1(a, b) Print a End Sub

Private Function fun1(x As Single, y As Integer)As Integer Dim i As Integer For i=1 To y x=x*2 a=a+1 Next i Fun1=a End Function 【答案】(1)3(2)9.6

14.执行下面程序后,单击按钮Command1,窗体上第一行显示的内容是____1____,第二行显示的内容是_____2____,第三行显示的内容是____3_____。

Private Sub Command1_Click()

Dim X As Integer, Y As Integer, S As Integer

X=12:Y=18 If X>Y Then

S=Recur(X, Y, 1) Else

S=Recur(Y, X, 1) End If Print S Print X, Y End Sub

Private Function Recur(A As Integer, B As Integer, K As Integer) Static X As Integer X=X+K

If A<=B Then Recur=A+B-X

Print \ Else

A=A-X B=B+X

Recur=Recur(A, B, X) End If X=0 End Function 【答案】(1)X=4(2)26(3)15 15 15.本程序利用级数法求解下面函数的近似值,规定当n取某一值时,若则停止运算。函数的级数展开式如下:

x2n?1n!≤0.0000l,

x3x5x7x2n?1f(x)?x????...??...

3?1!5?2!7?3!(2n?1)?n!Private Sub Command1_Click()

Dim X As Single, eps As Single X=Text1:eps=0.00001 Text2=fun(x, eps) End Sub

Private Function fun(x As Single, eps As Single)As Double Dim n As Integer, t As Double, Y As Double, S As Single Y=X:t=x

Do _____1____ N=n+1

S=_____2_____ T=_____3_____ Y=Y+S*t/(2*n+1) Loop fun=Y

End Function 【答案】(1)While Abs(t) > esp(2)(-1)^n(3)t*x^2/n 16.本程序是一个采用矩阵变换对西文进行加密的程序。取大于或等于原文长度的最小平方数n2,构造一个n×n的矩阵,将原文中的字符逐个按行写入该矩阵,多余的矩阵元素则写入空格字符,再按列读出此矩阵,即为密文。程序界面参见图l。

Option Explicit

Private Sub Command1_Click() Dim msg As String msg=Text1

Text2=encode(msg) End Sub

Private Function sr(n As Integer)As Integer

Dim k As Integer

k=n 图 1 Do

If _____1_____ Then Sr=Sqr(k):Exit Do

Else

_____2______ End If Loop

End Function

Private Function encode(orc As String)As String Dim n1 As Integer, n2 As Integer, m()As String*1 Dim i As Integer, j As Integer, k As Integer n1=Len(orc) n2=sr(n1) k=1

_____3_____ For i=l To n2 For J=l To n2 If k<=n1 Then

m(I, j)=Mid(orc, k, 1) Else

_____4_____

End If k=k+1 Next j Next i

For J=1 To n2 For i=1 To n2

encode=encode & m(I, j) Next i

Next J End Function 【答案】(1)Int(Sqr(k)) ^ 2 >= n(2)k = k + 1(3)ReDim m(n2, n2)(4)m(i, j) = \

17.本程序的功能是生成20个不可约真分数。要求分子和分母均为两位正整数且分数中没有相同数字。提示:不可约真分数是指分子小于分母并且分子和分母除1以外没有其他公约数。

程序界面参见图2。 Option Explicit

Private Sub Command1_Cl ick()

Dim Fz As Integer, Fm As Integer, Js As Integer Randomize Do

Fz=Int(90*Rnd)+10 Fm=Int(90*Rnd)+10

If _____1______ Then If Vilidata(Fz, Fm) Then Text1=Text1 & Fz & \/\& Fm & \

Js=Js+1 图 2 If Js Mod 5=0 Then Text1=Text1 & vbCrLf End If End If

Loop While Js<20 End Sub

Private Function Vilidata(Fz As Integer, Fm As Integer)As Boolean Dim N As Integer, I As Integer, S As String For N=2 To Fz

If Fz Mod N=0 And Fm Mod N=0 Then _____2_______ end if next n

s=_____3______ for I=1 to len(s)-1 for n=I+1 to len(s)

if _____4____ then exit function end if next n next I

vilidata=true End Function 【答案】(1)Fz < Fm(2)Exit Function(3)Fz & Fm(4)Mid(S, I, 1) = Mid(S, N, 1)

18.本程序可快速排序。排序算法是以数组中间位置的一个数为基准,将数组中所有小于它的数移动到它的左边,大于它的数移动到它的右边,然后再对它左右两边的数据分别按此方

法进行处理,依次类推,直到每一边只剩下一个数据为止,本方法是递归算法。程序界面参 见图3。

Option Explicit

Private Sub Command1_Click()

Dim a(10) As Integer, S As String, I As Integer Randomize For I=1 to 10

a(i)=Int(90* Rnd)+10 s=S & Str(a(i))

Next i Text1=s

Call rs(a, 1,10) ______1_____ For i=1 To 10

S=S & Str(a(i))

Next i Text2=S End Sub

Private Sub rs(a() As Integer,left As

Integer, Right As Integer) 图 3

Dim I As Integer, j As Integer, X As Integer,Y As Integer,mid As Integer i=left:j=right

mid=(left+right)/2 X=____2_____ Do

If a(i)

ElseIf X

y=a(i) a(i)=a(J) a(j)=y I=i+1

J=j-1 End If

Loop while _____4_____ If left

第7章 程序调试

一、本章知识点

1、三种错误类型

(1)语法错误(Syntax Error) (2)运行错误(Run Time Error) (3)逻辑错误(Logic Error) 2、应用程序的工作模式

(1)设计模式(“设计”) (2)运行模式(“运行”) (3)中断模式(“Break”) 3、调试工具:常用调试工具的用途

4、使用调试窗口:本地窗口、立即窗口、监视窗口

二、试题与解析

选择题

填空题

第8章 文件操作

一、本章知识点

1、驱动器列表控件

(1)属性:Name、Drive (2)事件:Change 2、文件夹列表控件

(1)属性:Name、Path (2)事件:Change 3、文件列表控件

(1)属性:Name、Path、Pattern、FileName、ListCount、ListIndex、List、MultiSelect、Selected、Archive、Hidden、Normal、ReadOnly和System

(2)事件:PathChange 4、传统的文件操作语句和函数

复制文件语句FileCopy、删除文件语句Kill、重命名语句Name、Dir函数、FileLen函数、FileDateTime函数、GetAttr函数、SetAttr函数 5、数据文件的结构

字符(Character)、字段(Field)、记录(Record)、文件(File) 6、数据文件的类型

(1)按数据的存取方式和结构,VB数据文件分为顺序文件、随机文件 (2)按数据的编码方式,又可以分为ASCII文件和二进制文件 7、文件处理的一般步骤

(1)打开(或新建)文件 (2)进行读、写操作 (3)关闭文件 8、文件的打开和关闭

(1)打开文件(open)

Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度]

(2)关闭文件(Close)

Close[[#]文件号1[,[#]文件号2?]] 9、数据文件相关的语句和函数

FreeFile函数、Seek语句和Seek函数、Eof函数、Lof函数、Loc函数 10、顺序文件的写操作

Print#语句、Write#语句 11、顺序文件的读操作

Input语句、Input Line语句、Input函数 12、声明记录类型

声明记录类型、声明记录类型变量 13、随机文件的打开

Open 文件名 [For Random] As [#] 文件号Len = 记录长度 14、随机文件的读写操作

Put # 语句、Get # 语句 15、二进制文件的打开与关闭

Open文件名For Binary As [#]文件号 Close

16、读写二进制文件

Get [#]文件号,[位置],变量 Put [#]文件号,[位置],变量

二、试题与解析

选择题

1.执行赋值语句________后,会触发相应控件的Change事件(控件名均为缺省名)。

A.Dir1.ListIndex = -2 B.Drive1.ListIndex = 2 C.List1.ListIndex = 3 D.File1.ListIndex = 3 【答案】B

【解析】列表框和文件列表框无Change事件,文件夹列表框改变其ListIndex值,只相当于用鼠标单击,选中了某一文件夹,并未打开文件夹,即未改变默认文件夹,故产会触发其Change事件。

2.下面有关文件管理控件的说法,正确的是___________。

A.ChDir语句的作用是指明新的缺省工作目录,同时也改变目录列表框的Path属性值 B.改变文件列表框的FileName属性值,仅改变列表框中显示的文件名,不会引发其它事件

C.改变驱动器列表框的ListIndex属性值,会改变Drive属性值并触发Change事件 D.单击目录列表框中某一项,会触发Change事件 【答案】C

3.以下有关文件的说法中,正确的是_________。 A.打开随机文件时,参数Len的值可任意设置

B.若以Output、Append、Random或Binary方式打开一个不存在的文件,系统会出错 C.在Input方式下,不能使用不同文件号同时打开同一个文件 D.在一个过程中,一个文件号有可能被用于打开不同的文件 【答案】D

填空题

1.在下面程序中,Command1_Click()事件过程的功能是将26个大写字母A~Z依此写到二进制文件Myfile中,Command2_Click()事件过程的功能是将文件中的大写字母在原位置一一改写成小写字母。完善程序,实现以上功能。

Option Explicit Dim S As String * 1

Private Sub Command1_Click() Dim I As Integer For I=0 To 25 S = ___1____ Put # 12, , S Next I End Sub

Private Sub Command2_Click()

Dim Rc_NO As Integer Seek #12, 1

Do While ____2_____ ____3____ S = Lcase(S) ____4____ Put #12, Rc_NO, S Loop End Sub

Private Sub Form_Load()

Open “e:\\Myfile” For Binary As # 12 End Sub 【答案】(1)Chr(Asc(“A”)+I),(2)Loc(12)

2.c盘根目录下的数据文件data.txt中有两组数据,第一组数据未排序,并以-1表示该组数据结束;第2组数据按从小到大顺序排列。下面程序的功能是,单击“读入数据”按钮,将文件中的两组数据,分别读入到A、B数组中,单击“插入排序”按钮,则把A数组的元素按其大小依次插入到B数组的适当位置,使得B数组中元素仍为从小到大排列。完善程序,实现以上功能。

Dim a() as integer, b() as integer Private sub command1_Click()

Dim i As Integer, J As Integer, n As Integer, s As String ____1____ Do

Input #1l, n

If n=-1 Then Exit Do i=i+1

ReDim Preserve a(i) a(i)=n

s=s & Str(a(i)) Loop Text1=S S=””

____2____

J=j+1

ReDim Preserve b(j) Input#11,b(j) S=S & Str(b(j)) Loop Text2=S Close 11 End Sub

Private Sub Command2_Click()

Dim i As Integer, J As Integer, S As String For i=1 To UBound(a) If a(i)

Call change(a(i), 1)

Elseif a(i)>b(UBound(b)) Then

____3____

b(UBound(b))=a(i)

E1se

For j=2 To UBound(b)

If a(i)>b(J-1) And a(i)<=b(j) Then Call change(a(i), j) Next J End If

Next i

For i=1 To UBound(b)

S=S & Str(b(i))

Next i Text3=S End Sub

Private Sub change(n As Integer, k As Integer) Dim i As Integer

ReDim Preserve b(UBound(b)+1) For i=UBound(b)To k+1 Step-1

____4_____ Next i

____5____ End Sub 【答案】(1)Open \,(2)Do While Not EOF(11),(3)Call change(a(i), UBound(b) + 1),(4)b(i) = b(i - 1),(5)b(k) = n

第9章 其它控件

一、本章知识点

1、菜单的基本概念

所谓菜单,就是可供选择的命令项目的列表,它位于程序界面标题栏下的菜单栏上。通过它能使用户以“点菜”的方式去执行不同的命令

分为下拉式菜单和弹出式菜单 2、滚动条控件

(1)属性:Min、Max、Value、SmallChange、LargeChange (2)事件:Scroll、Change 3、形状控件(Shape)

属性:Shape、BorderColor、BorderStyle、BorderWidth、BackStyle、FillColor、FillStyle 4、直线控件(Line)

属性:BorderStyle、BorderColor、BorderWidth、x1,x2,y1,y2 5、图形方法

Pset(画点)方法、Line(画线)方法、Circle(画圆)方法 6、鼠标事件

事件:MouseDown、MouseUp、MouseMove

二、试题与解析

选择题

1.以下有关Line划线方法的说明,错误的是___________。

A.Line方法既可用于单个划线,也可用于连续划线

B.Line方法中的Step选项用于指定由CurrentX、CurrentY属性决定的图形坐标位置 C.Line方法划线的宽度由DrawWidth属性决定 D.当使用F选项时,Line方法可用于绘制矩形 【答案】D

30.下面语句中,可以在窗体上绘制正方形的语句是__________。

①Shape1.Shape=l ②Line(500, 1500)-(1200, 2000) ③Shape1.Shape=0 ④Line(500, 1500)-(1000, 2000), , B 【答案】D

填空题

本文来源:https://www.bwwdw.com/article/6ho6.html

Top