I 考试题型
1. 选择题(10题,20分)
2. 程序阅读题(3题,24分)
3. 程序填空题(3题,24分)
4. 程序设计题(3题,32分)
II 考试重点
不考的内容: | 组合框、菜单、数据库 |
考试重点: | 1. 常用内部函数 2. 自定义子过程及函数过程编写与调用,形参与实参传递方式 3. VB典型程序: a) 阶乘、素数、最小公倍数、最大公约数 b) 冒泡排序、选择法排序 4. 列表框、定时器、滚动条 5. 文件的输入输出操作 |
1. 语句“i% = 17/25/2”的结果为什么是4而不是3?
a) 首先,注意到乘法和除法的优先级高于整除,所以此题的运算顺序是:i% = (17/2) (5/2);
b) 其次,遇到整除“”这个二元运算符,它的前后项都应该变换为整数,也就是,对于ab而言,不管a和b是否为整数,都应该将a和b都先化为整数,先化为整数的原则是“四舍五入”,而VB中,“四舍五入”的函数为Round(),所以“ab”就等于“Round (a) Round (b)”;
c) 最后,VB中“四舍五入”的原则是什么?准确的说,VB中是“四舍六入”,即:如果小数点后面首位数字小于等于4,则直接舍去小数点后所有小数;如果小数点后面首位数字大于等于6,则向整数部分进一,然后舍去小数点后所有小数。但如果小数点后面的首位数字5,则要按如下原则:五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。因此有:Round(8.6)为“9”,Round(7.6)为“8”,Round(8.51)为“9”,Round(8.5)为“8”,Round(7.5)也为“8”。
d) 综上,17/25/2=(17/2)(5/2)=(8.5)( 2.5)=82=4;反之,如果是8.512.51=93=3.
2. Width、Height、ScaleWidth、ScaleHeight;Left、Top、ScaleLeft、ScaleTop,这些概念的区别?
a) 对于窗体而言:
b) 对于控件而言,只有Left、Top、Width、Height的概念,而没有ScaleLeft、ScaleTop、ScaleWidth、ScaleHeight的概念:
3.“用Public声明的数组是全局量”这个说法为什么是错的?
在窗体模块(.frm文件)中,如下声明是非法的:
Public arr(1 To 10) As Integer
Public s2 As String * 10
但在标准模块(p.97,也就是.bas文件)中,是可以这样声明的。
所以,上面的说法是不全面的,应该这样说:
在标准模块中用Public声明的数组是全局量。
4. p.140,“将Label1标签向下移动100个刻度单位……”这一段话如何理解?
这里讲的是在VB中如何使用函数或方法的“缺省参数”(也称为“可选参数”,见p.32),缺省参数是可以不输入的,例如Move方法,它的语法格式如下:
[Object.]Move Left [, Top[, Width[, Height] ]]
这里的方括号“[]”是什么意思?[]表示缺省参数。也就是说,只有Left不是缺省参数,在使用Move方法的时候,该参数必须给出。例如:
Label1.Move 300
它表示把Label1水平移动到距离窗体左边300的位置,它的Top 、Width和Height都不改变。
如果只想上下移动Label1,而不想水平移动Label1,那么,必须这样写:
Label1.Move Label1.Left, Label1.Top + 100
它表示把Label1垂直向下移动100个单位。而不能这样写:
Label1.Move , Label1.Top + 100
因为第一个参数不是缺省参数。
另外,请注意“[Object.]MoveLeft [, Top[, Width[, Height] ] ]”这一语法结构中[]的嵌套格式,Width的缺省是嵌套在Top的缺省之中的,也就是说,如果要通过Move方法重置Label1的宽度,必须这样写:
Label1.Move Label1.Left, Label1.Top, Label1.Width + 1000
而不能这样写:
Label1.Move , , Label1.Width + 1000
也不能这样写:
Label1.Move Label1.Left, , Label1.Width + 1000
同样,可知,如果只想通过Move方法改变Label1的Height(因为Width和Height变了,整个Label1看起来也是“移动”了的),而不想改变Label1的Left和Top,那么应该这样写:
Label1.Move Label1.Left, Label1.Top, Label1.Width, Label1.Height + 1500
四个参数,一个都不能少!
5. DrawStyle和BorderStyle的区别?BorderStyle和DrawStyle的区别.rar
6. 冒泡排序算法sort.rar
Sub BubbleSort(arr() As Integer, ByVal L As Integer)
For i = 1 To L - 1
For j = 1 To L - i
If arr(j) > arr(j + 1) Then
t = arr(j): arr(j) = arr(j + 1): arr(j + 1) = t
End If
Next j, i
End Sub
7. 选择排序算法 sort.rar
Sub SelectSort(arr() As Integer, ByVal L As Integer)
Dim i As Integer, j As Integer, t As Integer, p As Integer
For i = 1 To L - 1
p = i
For j = i + 1 To L
If arr(p) > arr(j) Then p = j
Next j
t = arr(i): arr(i) = arr(p): arr(p) = t
Next i
End Sub
8. 在数组中插入一个新的数,并保持数组原有的顺序,这里假定数组是按从小到大排序的 sort.rar
Private Sub Command1_Click()
' 定义一个整型数组arr2(),但不给出下标界
Dim arr2() As Integer
n = Val(InputBox("请输入一个任意的两位整数:"))
arr2 = InsertNewNum2Array(arr, L, n)
printArray Me, arr2, L + 1
End Sub
Sub printArray(o, a() As Integer, ByVal m As Integer)
For i% = 1 To m
o.Print a(i);
Next i
o.Print
End Sub
Function InsertNewNum2Array(arr() As Integer, ByVal L As Integer, ByVal n As Integer) As Integer()
' 向数组 arr()中插入一个新的数,并保持数组原有的顺序
' 这里假定 arr() 是按从小到大排序的
' L : 数组 arr() 的长度
' n : 待插入 数组 arr() 的数值
ReDim arr2(L + 1) As Integer
' 首先拷贝arr()中的元素到arr2()中
For i = 1 To L
arr2(i) = arr(i)
Next i
' 从arr2(L)到arr2(1),逐个查询n应该在arr2中插入的位置k,
' 并同时对arr2中的元素进行移位
For k = L To 1 Step -1
If arr2(k) < n Then
Exit For
End If
arr2(k + 1) = arr2(k)
Next k
arr2(k + 1) = n
InsertNewNum2Array = arr2
End Function
9. p.87, 程序设计题(六.4) Form1.rar
Private Sub Form_Click()
'p.87, 程序设计题(六.4)
x = Val(InputBox("x="))
n = Val(InputBox("n="))
s = 1 + x: a = 1
For i = 1 To n
a = a * x / (i + 1)
s = s + a
Next i
Print s
End Sub
10. 下面的程序输出结果是什么?
Private Static Sub Form_Click()
x = InputBox("")
If x < 5 Then
s = s * x
Else
s = s + x
End If
Print s;
End Sub
答案是:5 10 40 48。
分 析:请注意Sub之前的Static修饰,VB规定:Static所声明的函数名和函数中声明的局部变量都是静态变量。
11. 写出连续3次单击滚动条HScrool1右箭头和滚动块之间的区域后,窗体上显示的结果:(但是,需要注意的是:这道题目出的并不严谨,它没有明确给出HScrool1的Value的初值为多少,只是假定考生知道Value为默认值0)Code.rar
Private Sub Form_Load()
HScroll1.Min = 1
' HScroll1.value默认值为0,改变min的值为1,
' 将会改变Value的值为1,这将触发Change事件
' 使得 HScroll1_Change() 中的 y = 1
HScroll1.Max = 20
HScroll1.SmallChange = 5
HScroll1.LargeChange = 3
HScroll1.Value = 5
' 改变Value的值为5,将再次触发Change事件
' 使得 HScroll1_Change() 中的 y = 1 + 5 = 6
End Sub
Private Sub HScroll1_Change()
Static y As Integer
If HScroll1.Value < HScroll1.Max Then
y = y + HScroll1.Value
If HScroll1.Value Mod 2 = 0 Then Print "y="; y
End If
End Sub
' 连续3次单击滚动条HScrool1右箭头和滚动块之间的区域后
' 将把Value的值依次变为: 5+3=8、8+3=11、11+3=14
' 每次Value的值变化,都会触发 HScroll1_Change() 事件,
' 这将导致y的值依次变为: 6+8=14、14+11 = 25、25+14 = 39
' 注意到HScroll1_Change()中,HScroll1.Value 为偶数时,将打印 y 的值
' 因此,屏幕上将会输出:
' y = 14
' y = 39
12. 如果窗体的Enabled属性为False,就不能对窗体上的任何控件进行操作。这句话对吗? 答案:对。
1. Asc("abc") 只能取得 "a"的ASCII码,相等于 Asc("a")
2. String(65, Asc("abc")) 就等于 String(65, Asc("a"))
3. Asc("a")为97,String(65, Asc("abc")) 就等于String(65, 97)
4. String(n, c)的意思是把c复制n次,形成个字符串,如果c是数值,就会把c自动转换为其ASCII码所对应的字符
5. 因此,String(65, 97)就相当于把"a"复制了65次的一个字符串"aaaaaaa..."
6. Right("aaaaaaa...", 3)的结果当然就是: "aaa"转载本文请联系原作者获取授权,同时请注明本文来自李小薪科学网博客。
链接地址:https://wap.sciencenet.cn/blog-1338462-949363.html?mobile=1
收藏