李小薪
VB问题集锦
2016-1-10 10:47
阅读:3379
标签:VB问题

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而言,不管ab是否为整数,都应该将ab都先化为整数,先化为整数的原则是“四舍五入”,而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.  WidthHeightScaleWidthScaleHeightLeftTopScaleLeftScaleTop,这些概念的区别?

a)       对于窗体而言:

b)       对于控件而言,只有LeftTopWidthHeight的概念,而没有ScaleLeftScaleTopScaleWidthScaleHeight的概念:


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 WidthHeight都不改变。

如果只想上下移动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方法改变Label1Height(因为WidthHeight变了,整个Label1看起来也是“移动”了的),而不想改变Label1LeftTop,那么应该这样写:

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()

   Dim x As Integer, s As Integer
   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,就不能对窗体上的任何控件进行操作。这句话对吗? 答案:对。

13. Right(String(65, Asc("abc")), 3) 为什么等于 "aaa" ?
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

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?