VB复习指导习题集答案
第三部分 习题汇编
一、VB程序填空
1.(1)n Mod 2 <> 0 (2)n < 2 * m (3)n / 2 – m
2.(1)z * Int(Rnd * 301) (2)GoTo Inp (3)min = 0 (4)min = j
(5)"最小者下标:"; min, "数值:"; a(min)
3.(1)CommonDialog1.FileName (2)Text2 + ch (3)code As String, k As Integer
(4)Mid(code, i, 1) (5)iAsc < Asc("a")
4.(1)Int(Rnd * 5) + 1 (2)m = j (3)c = c + 1 (4)Print c & "*"; a(i);
(5)i + c
5.(1)t = d (2)t <> 0 (3)t Mod 16 (4)Chr(Asc("a") + r - 10)
(5)Call DTOH(Text1.Text, hs)
6.(1)Chr(Int(Rnd * 26 + 65)) (2)Chr(Int(Rnd * 26 + 65)) (3)Found = True
(4)s(n) = c
7.(1)Left(s1, i - 1) + Mid(s1, i + ls2)或Left(s1, i - 1) + Right(s1, ls1 - (i + ls2) + 1)
(2)InStr(s1, s2) (3)Call DeleStr(ss1, Text2) (4) ss1
8.(1)CommonDialog1.FileName (2)Text1 + s + Chr(13) + Chr(10)
(3)Close #1 (4)Print #1, Text1 (5)Static j% (6)j – 1 (7)4
9.(1)UCase(Chr(KeyAscii)) (2)c (3)"A", "E", "I", "O", "U" (4)Else
(5)KeyAscii = 13
10.(1)n Mod 3=1 And n Mod 5=1 And n Mod 7=1 (2)While CountN<5或Until CountN>=5
11.(1)1 To 6 (2)x=(x+1)*2
12.(1)cboComputer.ListCount-1 (2)cboComputer.Text=cboComputer.List(I)
(3)Not Flag (4)cboComputer.AddItem cboComputer.Text
13.(1)a(7) (2)a(j + 1) = a(j) (3)a(1) = t
14.(1)m * Int(Rnd * 11) (2)m + 1 (3)i To n - 1 (4)n = n - 1
(5)Preserve a(1 To n)
15.(1)m > 0 (2)m To n (3)n = n - 1 (4)m = m - 1 (5)b()或b
16.(1)dem = Convert(st) (2)Mid(s, i, 1) (3)Asc(subC) - Asc("A") + 10
(4)Convert = 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
6.
编程计算下列分段函数值:
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)变量x与n的值在窗体单击事件中用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.000001。a值由键盘输入。
方法一
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