2024年2月25日发(作者:)
习题一
2. 需要重新安装
3. VB启动时可以看到
6. 保存两个文件。窗体文件(FRM)-工程文件(VBP)。
7. 默认保存在所在的文件夹。
8. 帮助系统要另外安装(MSDN)
其他题目答案可在教材中找到。
习题二
第1-9题答案在教材中找。
10. 启动窗体时将命令按钮定位在窗体中央的代码
Private Sub Form_Load()
= idth / 2 - / 2
= eight / 2 - / 2
End Sub
11.图片文件在 C:Program FilesMicrosoft Visual StudioCommonGraphics 文件夹。
安装VB时可选择是否安装这些图片文件。
习题三
1. 合法常量:
(1) Double
(5) 错误
(9) Date
(13) 错误(八进制无数码8)
(17) 错误(十六进制无数码g)
(2) 错误
(6) Integer
(10) Double
(3) Double
(7) String
(4) Double
(8) String
(11) 错误(汉字字符)
(12)Integer(八进制)
(16) 错误
(14) Integer
(15) Boolean
(18) Single
说明:浮点型变量默认为Double类型而非Single。
2. 合法变量名:
(1) √
(5) 误:关键字
(9) √
(2) √
(6) √
(10) √
(3) 误:数字开头
(7) 误:关键字
(11) √
(4) 误:含空格
(8) 误:有括号
(12) √(汉字字符可作为变量名,但不常用,且此名称易误解)
变量命名规则见P.41-42。
字母(汉字)开头,字母(汉字)、数字、下划线组成,长度为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 + 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 And y < 0 或 x * y > 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是字母字符(不区分大小写)——准确地说是:字符变量C的第一个字符是字母
C >= "A" And C <= "Z" Or C >= "a" And C < "z"
或 UCase(C) >= "A" And UCase(C) <= "Z"
或 LCase(C) >= "a" And LCase(C) <= "z"
(8) 字符变量S第5个字符起取6个字符 Mid(S, 5, 6)
(9) 10≤x<20 10 <= x And x < 20
(10) x,y至少有一个小于z x < z Or y < z
(11)x,y都大于z x > z And y > 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("", 1) '启动画图
i = Shell("C:Program FilesMicrosoft ", 1) '启动Word
说明:“画图”是Windows本身提供的程序,可以省略路径。
8. 答:单精度浮点型
习题四
第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) Dim c As String c = InputBox("c=") If Mid(c, 3, 1) = "C" Then MsgBox "Yes" Else MsgBox "No" End If (2) # 使用If语句 Dim x As Single, y As Single x = Val(InputBox("x=")) If x > 20 Then y = x ^ 2 + 3 * x + 2 ElseIf x >= 10 Then y = Sqr(3 * x) - 2 ElseIf x > 0 Then y = 1 / x + Abs(x) End If Print "y="; y # 使用Select Case语句 Dim x As Single, y As Single x = Val(InputBox("x=")) Select Case x Case Is > 20 y = x ^ 2 + 3 * x + 2 Case Is >= 10 y = Sqr(3 * x) - 2 Case Is > 0 y = 1 / x + Abs(x) End Select Print "y="; y (3) # 使用If语句 Dim x As Single, y As Single, z As Single, Max As Single x = Val(InputBox("x=")) y = Val(InputBox("y=")) z = Val(InputBox("z=")) Max = x If y > Max Then Max = y If z > Max Then Max = 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 行是内循环的循环体,故执行4*3=12次。 11. 可以定一个较大的循环次数,在循环体中根据条件用Exit For退出。 但这种情况通常用Do While循环控制。 12. 编程(并非唯一正确答案) (1) Dim i As Integer, s As Integer For i = 1 To 10 s = s + (i + 1) * (2 * i + 1) Next i Print "s="; s (2) Dim i As Integer, n3 As Integer, n7 As Integer For i = 1 To 100 If i Mod 3 = 0 Then n3 = n3 + 1 If Int(i / 7) = i / 7 Then n7 = n7 + 1 Next i Print "1-100中3的倍数有"; n3; "个" Print "1-100中7的倍数有"; n7; "个" (3) Dim s1 As String, s2 As String, i As Integer s1 = InputBox("Input String") s2 = "" For i = 1 To Len(s1) s2 = Mid(s1, i, 1) + s2 Next i Print "原序:"; s1 Print "反序:"; s2 或 For i = Len(s1) To 1 Step -1 s2 = s2 + Mid(s1, i, 1) Next i 13. 输出字符串“10100”。该程序功能是将十进制数转化为二进制。 说明:要理解该程序需要了解数制转换的计算方法(有兴趣者参看百度百科/view/)。48是字符"0"的ASCII码。 14. 运行时输出 22 484 该程序功能是求x和y最大公约数和最小公倍数。 说明:此算法称为“辗转相减法”。可对照例4.17的辗转相除(辗转求余)法。 15.[50,100]间的20个随机数,求最大值、最小值、平均值。 Dim x As Integer, sum As Integer, aver As Single Dim n%, i%, max%, min% Randomize max = 50: min = 100: n = 20 For i = 1 To n x = Int(Rnd * 51 + 50) m x sum = sum + x If x > max Then max = x If x < min Then min = x Next i aver = sum / n Print "最大值:"; max, "最小值:"; min, "平均值:"; aver 习题五 1. 指定数组的默认下界 Option Base 1 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个元素 以矩阵的格式输出二维数组: For i = -1 To 2 For j = 0 To 3 Print a(i, j); Next j Print Next i 或写成更加通用的代码形式: For i = LBound(a, 1) To UBound(a, 1) For j = LBound(a, 2) To UBound(a, 2) Print Tab(j * 8); a(i, j); Next j Print Next i 6.一维字符数组 Dim a(1 To 20) As String Private Sub Command1_Click() '(1)随机产生字符串 Dim i As Integer, j As Integer, n As Integer, c As String * 1 Randomize For i = 1 To 20 a(i) = "" '将第i个元素清空 n = Int(Rnd * 10 + 1) '产生[1,10]的随机数 For j = 1 To n 'a(i)中有n个字符 c = Chr(Int(Rnd * 26 + 97)) '随机产生字母97是字母a的ASCII码 a(i) = a(i) + c Next j Next i End Sub Private Sub Command2_Click() '(2)输出字符串 Dim i As Integer For i = 1 To 20 Print Tab(((i - 1) Mod 5) * 11); a(i); If i Mod 5 = 0 Then Print Next i End Sub Private Sub Command3_Click() '(3)最长的字符串 Dim i As Integer, imax As Integer imax = 1 For i = 2 To 20 If Len(a(i)) > Len(a(imax)) Then imax = i End If Next i Print "最长的字符串:"; a(imax) End Sub 第7,8题答案在教材中找。 第9题“自定义变量”含义不明,暂时无法回答。 习题六 第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)自定义函数的定义及调用 Function FSqr1(a As Single) As Single Dim x0 As Single, x As Single x = a Do x0 = x x = (x0 + a / x0) / 2 Loop While Abs(x - x0) > 0.00001 FSqr1 = x End Function Private Sub Command1_Click() Dim x!, y! x = Val(InputBox("x=")) If x >= 0 Then y = FSqr1(x) Print y End If End Sub (2)自定义子过程的定义及调用 Sub FSqr2(a As Single, x As Single) Dim x0 As Single x = a Do x0 = x x = (x0 + a / x0) / 2 Loop While Abs(x - x0) > 0.00001 End Sub Private Sub Command2_Click() Dim x!, y! x = Val(InputBox("x=")) If x >= 0 Then Call FSqr2(x, y) Print y End If End 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 "" For Output As #1 '重写 或 Open "" For Append As #1 '添加 (2)Open "" For Input As #2 (3)Open "" For Append As FreeFile 4.编程,将文件 读入变量strTest。 Dim strTest As String Open "" For Input As #2 Do While Not EOF(2) strTest = strTest + Input(1, #2) Loop 8.本课程不涉及二进制文件。故此处以顺序文件读写方式编程。另外合并的结果可以是合并到其中某一个文件,也可以是合并到一个新的文件,此处代码是合并到其中一个文件。 '方法一,在2号文件一次读一个字符并写入1号文件 Dim strTemp As String * 1 Open "d:" For Append As #1 Open "d:" For Input As #2 Do While Not EOF(2) strTemp = Input(1, #2) Print #1, strTemp; '注意结尾有分号,否则每个字符一行 Loop Close '方法二,在2号文件一次读一个字符并累加,最后将累加结果写入1号文件 Dim strTemp As String '注意方法一变量定义的区别 Open "d:" For Append As #1 Open "d:" For Input As #2 strTemp = "" Do While Not EOF(2) strTemp = strTemp + Input(1, #2) Loop Print #1, strTemp Close


发布评论