1、vb 程序设计教程 第三版 龚沛曾 课后答案文库.txt 心脏是一座有两间卧室的房子,一间住着痛苦,一间住着快乐。人不能笑得太响,否则会吵醒隔壁的痛苦。习题一 答案在教材上找。习题二1.对象指现实世界中的实体。每个对象有自己的特征(属性)、行为(方法)和发生在该对象上的活动(事件)。类是对同一种对象的集合与抽象。类包含所创建对象的属性数据,以及对这些数据进行操作的方法。封装和隐藏是类的重要特性,将数据结构和对数据的操作封装在一起,类的内部实现细节对用户来说是透明的。VB 工具箱中的可视图标是 VB 系统设计好的标准控件类。通过将控件类实例化,得到真正的控件对象。在窗体上画一个控件,就将类转换为
2、对象,创建了一个控件对象。VB 中常用的对象是控件。此外,VB 还提供了系统对象。窗体是个特例,它既是类也是对象。当向一个工程添加一个新窗体时,实质就由窗体类创建了一个窗体对象。对象的三要素:属性、事件和方法。属性:存放对象的数据(决定对象外观及功能)对象属性的设置方法:在设计阶段,利用属性窗口直接设置属性值;程序运行时,通过语句对象名.属性名=属性值。若属性只能在设计阶段设置,在程序运行阶段不可改变,称为只读属性。 事件:发生在对象上的事情。同一事件,对不同的对象,会引发不同的反应。事件过程:应用程序处理事件的步骤。应用程序设计的主要工作就是为对象编写事件过程的代码。方法:面向对象的程序设计
3、语言,为程序设计人员提供了一种特殊的过程和函数。方法是面向对象的,调用时一定要指明对象。2.窗体和控件具有的基本属性“(1) Name 属性:名称所创建的对象名称,在程序中引用。(2) Caption 属性:标题该属性决定了对象上显示的内容。(3) Height、Width、Top 和 Left 属性决定对象的大小和位置。(4) Enabled 属性:对象是否允许操作(5) Visible 属性:对象是否可见(6) Font 属性组:文本的外观FontName 字体、FontSize 大小FontBold 粗体、FontItalic 斜体FontStrikethru 删除线FontUnderl
4、ine 下划线 (7) ForeColor 属性:前景颜色(8) BackColor 属性:背景颜色(9) MousePointer 属性:鼠标指针类型, 设置值范围 015,由系统指定 。若为 99,由用户提供的图形文件定义鼠标指针形状。(10) MouseIcon 属性:在 MousePointer 属性值为 99 时,存放自定义的鼠标图标文件(.ico 或.cur) 。图标库在 Graphics 目录下。3.窗体的事件:Load 事件是在窗体被装入工作区时触发的事件。当应用程序启动,自动执行该事件,该事件通常用来在启动应用程序时对属性和变量进行初始化。窗体的方法:(1)Print 方法用
5、来显示文本内容,格式:对象.print 表达式(2)Cls 方法 清除运行时在窗体或图形框中产生的文本或图形, Cls 方法不能清除窗体在设计时的文本和图形。格式:对象.cls(3)Move 方法可移动窗体或控件,并可改变其大小。语法格式如下:对象.Move 左边距离,上边距离,宽度,高度4.标签作用:用于显示文本(输出)信息,不能作为输入信息的界面。其内容只能通过Caption 属性设置或修改,不能直接编辑。5.文本框是一个文本编辑区域,可以在该区域输入、编辑、修改和显示正文内容。在 VB 中字符长度以字为单位,也就是一个西文字符与一个汉字都是一个字,长度为 1。重要属性(1) Text 显
6、示或输入的正文内容。(2) Maxlength 设置文本框可输入的文字最大长度。默认值为 0,表示可以输入任意长字符串。(3) MultiLine 多行属性设置为 True 时,文本框可以输入或显示多行正文,同时具有文字处理器的自动换行功能,按 Enter 键可插入一空行。(4) ScrollBars 滚动条属性0-None 无滚动条1-Horizontal 水平滚动条2-Vertical 垂直滚动条3-Both 同时加水平和垂直滚动条注意:当 MultiLine 为 True 时,ScrollBars 才有效(5) PassWordChar 设置显示文本的替代符。例如,当设置为“*” ,则在
7、文本框输入的内容均以“*”显示,而存储的值是用户输入的原文。一般用于设置口令的输入。当 MultiLine 为 True 时,该属性不起作用,密码不允许多行。(6) Locked 指定文本控件是否可被编辑,默认值为 False(可编辑),当设置为 True 时,文本控件相当于标签控件的作用。注意:Locked 与 Enabled 的区别。 (7)文本内容进行选择操作的三个属性SelStart 选定的正文开始位置SelLength 选定的正文长度SelText 选定的正文内容这 3 个属性互相关联,例如设置 SelStart、SelLength 后,SelText 自动存放指定的文本。注意:属性
8、窗口中没有这三个属性,只能在程序代码中使用。6.文本框的事件:(1) Change 事件:当 Text 属性值发生改变时引发该事件(2) KeyPress 事件:按下并且释放键盘上的一个键时,引发焦点所在控件的 KeyPress 事件,所按键的值存放在参数 KeyAscii 中。对回车的判断 KeyAscii=137.文本框最有用的方法是 SetFocus,把光标移到指定的文本框中。8.命令按钮 Picture 属性:按钮可显示图片文件(.bmp 和.Ico),当 Style 为 1 时有效。10. 启动窗体时将命令按钮定位在窗体中央的代码Private Sub Form_Load()Comm
9、and1.Left = Form1.ScaleWidth / 2 - Command1.Width / 2Command1.Top = Form1.ScaleHeight / 2 - Command1.Height / 2End Sub11vb 图片文件在 C:Program FilesMicrosoft Visual StudioCommonGraphics 文件夹。 安装 VB 时可选择是否安装这些图片文件。习题三1. 合法常量:(1) Double(2) 错误(3) Double(4) Double(5) 错误(6) Integer(7) String(8) String(9) Date
10、(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。字母(汉字)开头,字母(汉字) 、数字、下划线组成
11、,长度为 1-255 个字符;关键字不可作为变量名,但可在变量名中嵌入关键字;不区分大小写。常量、数组、类型、函数、过程、对象命名规则与此相同。常量名通常全用大写。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.14159 / 180) + (Exp(10) + Log(10) / Sqr(x + y +
12、 1)4. 根据条件写表达式(1) 随机产生大写字母 Chr(Int(Rnd * (Asc(“L“) - Asc(“C“) + 1) + Asc(“C“)(2) 100,200内的随机数 Int(Rnd * 101) + 100(3) 点(x,y)位于第一或第三象限 x 0 And y 0 Or x 0(4) x 是 5 或 7 的整数倍 x Mod 5 = 0 Or Int(x / 7) = x / 7(5) 将两位整数 x 的个位与十位对换 x 10 + (x Mod 10) * 10(6) 四舍五入取两位小数 Round(x, 2)(7) 字符变量 C 是字母字符(不区分大小写)准确地说
13、是:字符变量 C 的第一个字符是字母C = “A“ And C = “a“ And C = “A“ And UCase(C) = “a“ And LCase(C) z And y z5. 写表达式的值(1) 188 注意运算的优先级顺序,以及整除运算“”的计算(2) 200100 计算 100 + “100“时,由于两个操作数类型不同,在可能的情况下自动采用精度较高的类型,即把字符型转换为数值型,100 +100 得到 200;然后进行字符串连接运算 200 y# 使用 Select Case 语句Dim x As Single, y As Singlex = Val(InputBox(“x=
14、“)Select Case xCase Is 20y = x 2 + 3 * x + 2Case Is = 10y = Sqr(3 * x) - 2Case Is 0y = 1 / x + Abs(x)End SelectPrint “y=“; y(3)# 使用 If 语句Dim x As Single, y As Single, z As Single, Max As Singlex = Val(InputBox(“x=“)y = Val(InputBox(“y=“)z = Val(InputBox(“z=“)Max = xIf y Max Then Max = yIf z Max Then
15、 Max = zPrint “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=“; Max9. 计算循环次数(1) 6 (2)19 (3)0 (4)死循环直至溢出10. 40 号语句执行 4 次;第 50 号语句执行 12 次;执行第 90 号语句输出的结果是: 13,0,2说明:该程序为嵌套循环,其中外循环由 j 值变化(1,4,7,10)控制执行 4 次,当
16、 j 值为 13 时结束循环;内循环由 k 值变化(6,4,2)控制执行 3 次,当 k 值为 0 时结束循环。第 40 行是外循环的循环体,故执行 4 次;第 50 行是内循环的循环体,故执行 4*3=12 次。11. 可以定一个较大的循环次数,在循环体中根据条件用 Exit For 退出。但这种情况通常用 Do While 循环控制。12. 编程(并非唯一正确答案)(1)Dim i As Integer, s As IntegerFor i = 1 To 10s = s + (i + 1) * (2 * i + 1)Next iPrint “s=“; s(2)Dim i As Intege
17、r, n3 As Integer, n7 As IntegerFor i = 1 To 100If i Mod 3 = 0 Then n3 = n3 + 1If Int(i / 7) = i / 7 Then n7 = n7 + 1Next iPrint “1-100 中 3 的倍数有“; n3; “个“Print “1-100 中 7 的倍数有“; n7; “个“(3)Dim s1 As String, s2 As String, i As Integers1 = InputBox(“Input String“)s2 = “For i = 1 To Len(s1)s2 = Mid(s1, i
18、, 1) + s2Next iPrint “原序:“; s1Print “反序:“; s2或For i = Len(s1) To 1 Step -1s2 = s2 + Mid(s1, i, 1)Next i13. 输出字符串“10100” 。该程序功能是将十进制数转化为二进制。说明:要理解该程序需要了解数制转换的计算方法(有兴趣者参看百度百科http:/ 。48 是字符“0“的 ASCII 码。14. 运行时输出 22 484该程序功能是求 x 和 y 最大公约数和最小公倍数。说明:此算法称为“辗转相减法” 。可对照例 4.17 的辗转相除(辗转求余)法。1550,100间的 20 个随机数,
19、求最大值、最小值、平均值。Dim x As Integer, sum As Integer, aver As SingleDim n%, i%, max%, min%Randomizemax = 50: min = 100: n = 20For i = 1 To nx = Int(Rnd * 51 + 50)List1.AddItem xsum = sum + xIf x max Then max = xIf x Len(a(imax) Thenimax = iEnd IfNext iPrint “最长的字符串:“; a(imax)End Sub 第 7,8 题答案在教材中找。第 9 题“自定
20、义变量”含义不明,暂时无法回答。第 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)
21、 ,形参 sum 所对应的实参是表达式 Sqr(c),故计算结果无法传递给主调程序。另外 srq(a)存在语法错误(拼写错) 。(5)与(2)相同,实参 c 与形参 sum 的类型不一致。5迭代法求平方根(1)自定义函数的定义及调用Function FSqr1(a As Single) As SingleDim x0 As Single, x As Singlex = aDox0 = xx = (x0 + a / x0) / 2Loop While Abs(x - x0) 0.00001FSqr1 = xEnd FunctionPrivate Sub Command1_Click()Dim x
22、!, y!x = Val(InputBox(“x=“)If x = 0 Theny = FSqr1(x)Print yEnd IfEnd Sub(2)自定义子过程的定义及调用Sub FSqr2(a As Single, x As Single)Dim x0 As Singlex = aDox0 = xx = (x0 + a / x0) / 2Loop While Abs(x - x0) 0.00001End SubPrivate Sub Command2_Click()Dim x!, y!x = Val(InputBox(“x=“)If x = 0 ThenCall FSqr2(x, y)Pr
23、int yEnd IfEnd Sub(3)递归函数及调用 略习题七 第 1-9 题,答案在教材上找;第 10,12-14 题,略。11检测 Ctrl 和 F3 同时按下的代码:Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)If Shift = 2 And KeyCode = 114 Then MsgBox “HAHA“End Sub习题八 第 1,2,6,7,9 题答案可阅读教材找到。3写 Open 语句(1) Open “Seqnew.dat“ For Output As #1 重写或 Open “Seqnew.
24、dat“ For Append As #1 添加(2)Open “Seqold.dat“ For Input As #2(3)Open “Seqappend.dat“ For Append As FreeFile4编程,将文件 Text.dat 读入变量 strTest。Dim strTest As StringOpen “Text.dat“ For Input As #2Do While Not EOF(2)strTest = strTest + Input(1, #2)Loop8本课程不涉及二进制文件。故此处以顺序文件读写方式编程。另外合并的结果可以是合并到其中某一个文件,也可以是合并到一
25、个新的文件,此处代码是合并到其中一个文件F1.txt。方法一,在 2 号文件一次读一个字符并写入 1 号文件Dim strTemp As String * 1Open “d:F1.txt“ For Append As #1Open “d:F2.txt“ For Input As #2Do While Not EOF(2)strTemp = Input(1, #2)Print #1, strTemp; 注意结尾有分号,否则每个字符一行LoopClose方法二,在 2 号文件一次读一个字符并累加,最后将累加结果写入 1 号文件Dim strTemp As String 注意方法一变量定义的区别Open “d:F1.txt“ For Append As #1Open “d:F2.txt“ For Input As #2strTemp = “Do While Not EOF(2)strTemp = strTemp + Input(1, #2)LoopPrint #1, strTempClose习题九答案在教材上找。习题十答案在教材上找