VB复习指导习题集答案

第三部分 习题汇编

一、VB程序填空

1.(1n Mod 2 <> 0   2n < 2 * m    3n / 2 – m

2.(1z * Int(Rnd * 301)   2GoTo Inp      3min = 0        4min = j

5"最小者下标:"; min, "数值:"; a(min)

3.(1CommonDialog1.FileName      2Text2 + ch    3code As String, k As Integer

4Mid(code, i, 1)         5iAsc < Asc("a")

4.(1Int(Rnd * 5) + 1      2m = j     3c = c + 1     4Print c & "*"; a(i);

5i + c

5.(1t = d  2t <> 0   3t Mod 16      4Chr(Asc("a") + r - 10)

5Call DTOH(Text1.Text, hs)

6.(1Chr(Int(Rnd * 26 + 65))  2Chr(Int(Rnd * 26 + 65))     3Found = True

4s(n) = c

7.(1Left(s1, i - 1) + Mid(s1, i + ls2)Left(s1, i - 1) + Right(s1, ls1 - (i + ls2) + 1)

2InStr(s1, s2)     3Call DeleStr(ss1, Text2)      4 ss1

8.(1CommonDialog1.FileName             2Text1 + s + Chr(13) + Chr(10)

 3Close #1        4Print #1, Text1    5Static j%       6j – 1      74

9.(1UCase(Chr(KeyAscii))     2c    3"A", "E", "I", "O", "U" 4Else

5KeyAscii = 13

10.(1n Mod 3=1 And n Mod 5=1 And n Mod 7=1        2While CountN<5Until CountN>=5

11.(11 To 6     2x=(x+1)*2

12.(1)cboComputer.ListCount-1 (2)cboComputer.Text=cboComputer.List(I)

    (3)Not Flag   (4)cboComputer.AddItem cboComputer.Text

13.(1a(7) 2a(j + 1) = a(j)       3a(1) = t 

14.(1m * Int(Rnd * 11)  2m + 1    3i To n - 1      4n = n - 1

5Preserve a(1 To n)

15.(1m > 0      2m To n  3n = n - 1       4m = m - 1    5b()b

16.(1dem = Convert(st)  2Mid(s, i, 1)   3Asc(subC) - Asc("A") + 10 

4Convert = p

 

 

二、VB程序阅读题答案

 

 

1

N=12        m=9

2

2 20

3 21

    4 22

        5 23

3

**$$$****$$$$$

4

2*2=4

4*6=24

5

S=CDE

Sum=3

6

F(2)=23

F(1)=11

F(0)=7

7

1   4   4

8

6

9

afbecd

10

fedcba

11

1     6

2     11

3     16

14

5

10

2

15

24

16

33

17

456789

18

     X

    YYY

   XXXXX

  WWWWW

 VVVVVVVVV

UUUUUUUUUUU

 

 

 

三、编程题

1输入100个数,统计其中负数、零及正数的个数。

   Private Sub Form_Click()

     Dim i%, k%, fs%, ns%, zs%

     For i = 1 To 100

        k = Val(InputBox("输入一个数据"))

        If k > 0 Then

          zs = zs + 1

        ElseIf k < 0 Then

            fs = fs + 1

          Else

            ns = ns + 1

      End If

    Next i

    Print "负数、零及正数的个数分别是:"; fs, ns, zs

End Sub

 

2. Private Sub Form_Click()

    Dim x As Single, I As Integer

    Dim n As Integer

    e = 1

    n = 0

    Do

        n = n + 1

        Item = 1 / fact(n)

        e = e + Item

    Loop While Item >= 0.00000001

    Form1.Print "e="; e

End Sub

Private Function fact(m As Integer) As Single 'm!的函数

  Dim x As Single, I As Integer

  x = 1

  For I = 1 To m

     x = x * I

  Next I

  fact = x

End Function

 

 

3.计算s=1+2+2^2+2^3+……,直至s超过1E+16

Dim s As Single

    Dim i As Integer

    s = 1

    i = 1

    Do While s <= 1E+16

        s = s + 2 ^ i

        i = i + 1

    Loop

    Form1.Print "s="; s

End Sub

 

4.打印由数字组成的如下所示金字塔图案

 '           9

    '          888

    '         77777

    '        6666666

    '       555555555

    '      44444444444

    '     3333333333333

    '    222222222222222

'   11111111111111111

Dim i As Integer, j As Integer

    For i = 1 To 9

        Form1.Print Tab(10 - i);

        For j = 1 To 2 * i - 1

            Form1.Print Chr(58 - i);

        Next j

        Form1.Print

    Next i

End Sub

 

5、编一子程序验证哥德巴赫猜想:一个大于等于6的偶数可以表示为两个素数之和。

   如:  6=3+3           8=3+5        10= 3+7

方法1

       Private Sub Form_load()

       Dim  n%,n1%,n2%,i%,k% ,t1 As Boolean, t2 As Boolean

       n=Val(InputBox("输入大于6的正整数"))

       For n1=3 to n\2 step 2

           t1=True

           For k=2 to n1\2  ‘判断n1是否是素数

                IF n1 mod k =0 then t1=False : Exit For

           Next k

       IF T1 then            ‘如果n1为素数,将n分解为n1+n2

            n2=n-n1 : t2=True

           For  k=2 to n2\2‘判断n2是否是素数

               IF n2 mod k =0 then t2=False : Exit For

           Next k

       End  IF

       n1,n2同时为素数时打印输出

       If  t1 And t2 then  Print n & "=" & n1 & "+" & n2  : Exit For

      Next  n1

    End Sub

方法2:将判断一个整数是不是素数写函数过程。

       Private Sub Form_load()

       Dim  n%,n1%,n2%

       n=Val(InputBox("输入大于6的正整数"))

       For n1=3 to n\2 step 2

          n2=n-n1

          If  prime(n1) And prime(n2) then 

          Print n & "=" & n1 & "+" & n2

          Exit For    '结束循环

         End if

       Next  n1

       End Sub

           Private Function Prime(n%)  As Boolean

           Dim k%,Yes As Boolean

           Yes=True

           For k=2 to n\2

                IF n mod k =0 then Yes=False : Exit For

           Next k

           Prime=Yes

           End Function

 

6y=     0    (x=0)

      -1    (x>0)

编程计算下列分段函数值:

Private Sub Command1_Click()

    Dim x As Single, y As Single

    x = Val(InputBox("x=?"))

    If x < 0 And x <> -3 Then

        y = x * x + x - 6

    ElseIf x >= 0 And x < 10 And x <> 2 And x <> 3 Then

        y = x * x - 5 * x + 6

    Else

        y = x * x - x - 1

    End If

    Print "y="; y

End Sub

 

7.编程序求表达式s=x/2!+x^3/4!++x^(2n-1)/(2n)!的值,并在窗体上输出。要求如下:

1)变量xn的值在窗体单击事件中用InputBox()函数输入,通过调用函数过程s实现题目要求。

2)求表达式的值用函数过程Function s (n%, x!) As Single完成。

Option Explicit

 Private Function s(n%, x!) As Single

    Dim i%, k%, t#, f#

    f = 0#: k = x: t = 1#

    For i = 2 To 2 * n Step 2

       t = t * i * (i - 1)

       f = f + k / t

       k = k * x * x

    Next i

    s = f

End Function

 

Private Sub Form_Click()

Dim n%, x!

x = InputBox("x=")

n = InputBox("n=")

Print "s="; s(n, x)

End Sub

 

8.迭代法求。求立方根的迭代公式为:

提示:初值可取为a,精度为0.000001a值由键盘输入。

方法一

Private Sub Form_click()

Dim a!, x1!, x0!

  a = InputBox("输入一个数A=", "输入框")

x0 = a / 3       '先给x0赋一初值

x1 = 2 / 3 * x0 + a / (3 * x0 * x0)   ' 通过迭代公式求得到一个新的值x1

Do While Abs(x1 - x0) > 0.000001

x0 = x1                         'x1赋值给x0

x1 = 2 / 3 * x0 + a / (3 * x0 * x0)    ' 再通过迭代公式求得到一个新的值x1

Loop

Print a; "的立方根是:"; x1

End Sub

 

方法二

Private Sub Form_click()

Dim a!, x1!, x0!

  a = InputBox("输入一个数A=", "输入框")

x1 = a / 3  '先给x1赋一初值,

Do

x0 = x1    'x1赋值给x0

x1 = 2 / 3 * x0 + a / (3 * x0 * x0)   ' 通过迭代公式求得到一个新的值x1

Loop Until Abs(x1 - x0) < 0.000001

Print a; "的立方根是:"; x1

End Sub

 

9.有1分、2分、5分硬币若干枚,从中取出20枚硬币使其总值为60分,求出取法的数量以及每一种取法的1分、2分、5分硬币个数。

解:本题属于“穷举”问题,它的基本思想是:一一列举各种可能的情况,并判断哪一种可能是符合要求的解,这种算法称为穷举法(又称“枚举法”)。

Private Sub Form_Click()

Dim i%, j%, k%, m%, n%    'i,j,k分别代表1分、2分、5分枚数

n = 0                     'n代表取法总数

For i = 1 To 20

   For j = 1 To 20

     k = 20 - i - j

     m = i + 2 * j + 5 * k    'm代表取出20枚硬币的总值

     If m = 60 Then          '20枚硬币的总值等60分,则输出

       Print "1:"; i, "2:"; j, "5:", k

       n = n + 1

     End If