资源描述
8. 验证下列命题:设n是一个s1是n的各位数字之和,s2是2n的各位数字之和。若s1=s2,则n是9的倍数。根据图2和程序填写对象的相关属性,"X"代表该对象无属性。
对象
名称(Name)
标题(Caption)
正文(Text)
窗体
Frm1
(验证命题)
X
标签
LblInput
(输入一个两位数)
X
文本框
TxtInput
X
空
判断按钮
(CmdVerify)
验证
X
退出按钮
CmdExit
退出
X
Private Sub CmdVerify_Click()
Dim n As Integer,s1 As Integer,sa As Integer
n=Val__(TxtInput_)
s1=Sm(n)
s2=Sm(2*n)
If ___(s1=s2 and n Mod 9=0)___Then
MsgBox "该命题成立"
Else
MsgBox "该命题不成立"
End If
TxtInput.Text=""
TxtInput.SetFocus
End Sub
Private Sub CmdExit_Click()
Unload Me
End Sub
Private Function Sm(___(ByVal n As Integer)___) As Integer
Dim sm1 as integer
sm1=0
Do While n<>0
sm1=sm1+n Mod 10
___(n=n\10)___
Loop
Sm=sm1
End Function
8. 下面程序的功能是验证回文数猜想。任取一自然数,将其倒过来,并将这两个数相加,然后把这个和数倒过来,与原来的和数相加……重复这个过程有限次,必将得到一个回文数。
所谓回文数指左右数字完全对称的自然数,例如,121,12321,898,111均是回文数。根据猜想,假如取一自然数6868+86=154154+451=605605+506=1111,经过三步运算就得到回文数1111。
Option Explicit
Private Sub Form_Click()
Dim S As Long,D As Long,Sum As Long
Dim Flg As Boolean
S=InputBox("输入一个正整数")
Do
D=Fun(S)
Sum =S+D
Print Sum;"=";S;"+";D
Call Comp(Sum,Flg)
S=___(Sum)___
Loop Until Flg
Print Sum;"是回文数"
End Sub
Private Function Fun(N As Long)As Long
Dim Char As String,J As Long
Dim I As Integer,Slen As Integer
Char=Ltrim(Str(N))
___(Slen=Len(Char))___
J=1
For I=1 To Slen
Fun=Fun+Val(Mid(Char,I,1))*J
___(J=J*10或J=10^i)___
Next I
End Function
Private Sub Comp(N As Long,F As Boolean)
Dim Ch As String,S As Integer,I As Integer
S=Len(Ltrim(Str(N)))
F=False
Ch=Ltrim(Str(N))
For I=1 To___(S)___
If Mid(Ch,I,1)<>Mid(CH,S+1-I,1)Then Exit Sub
Next I
___(F=True)___
End Sub
9.下面程序的功能是从键盘上输入一个不超过4位的十进制正整数,先把该十进数的每一位数字转换位一个4位二进制数,再把得到的二进制数依次合并成为一个16位的二进制数。例如输入十进制数359,会得到二进制数0000001101011001。
Private Sub Form_Click()
Dim num As Integer, s As String, M As Integer
Dim i As Integer, j As Integer, n As Integer
num = InputBox("输入一个长度不超过4位的十进制正整数:", , 1)
___M=num__
Do While num>0
j=j + 1
n=num Mod 10
s=cover(n) & s
___num=num\10__
Loop
For i=1 To 4-j
s="0000" & s
Next i
Text1.Text="十进制数"&CStr(M)&"的转换结果是:" & s
End Sub
Private Function cover(ByVal n As Integer)As String
Dim i As Integer, s As String, k As Integer
Do Until n<1
___k=n Mod 2__
s=CStr(k) & s
n=n\2
Loop
If Len(s)< 4 Then
s="0000" & S
cover=__right(s,4)__
Else
cover=s
End If
End Function
7.下面程序的功能是将以“12;3;15”形式输入的字符串分解为数字12、3、15,分别赋给3个数组元素,并对其进行简单运算(图2为本程序执行画面)。
Private Sub Command1_Click()
Dim a(3) As Integer, i As Integer, n As Integer
Dim s As String
s = Text1.Text
For i = 1 To 2
n = InStr(s, ";")
a(i) = Left(s, n - 1)
s = Mid(s, n + 1, Len(s) - n)
Next i
A(3)= Val( s )
Text2.Text = a(1) * a(2) + a(3)
End Sub
图2
8.本程序是找零巧数。所谓零巧数是具有下述特性的四位正整数:其百位数为0,如果去掉0,得到一个三位正整数,而该正整数乘以9,等于原数。例如2025=225×9,所以2025是零巧数(如图3所示)。
图3
Private Function Change(s As String) As String
Dim p As String, i As Integer
For i = 1 To Len(s)
If i <> 2 Then '是否为左边第二位数
p = p + Mid(s, i, 1) '将每位字符串连接
End If
Next i
Change = p
End Function
Private Sub Command1_Click()
Dim i As Integer, s As String
For i = 1000 To 9999 '在四位数之间查找
s = CStr(i) '将数值转变成字符串
If Mid(s, 2, 1) = "0" Then '取百位数,并判断是否为"0"
If Val(Change(s)) * 9 = i Then '去掉百位数后的数乘9后是否等于原来的数
List1.AddItem CStr(i)+ "=" +Change(s)+ "*9"
'连接成字符串后,添加到列表框内
End If
End If
Next i
End Sub
9.本程序是把给定的二进制整数转换为八进制整数。
Private Sub Command1_Click()
Dim a As String, b As String, c As String
a = InputBox("请输入一个二进制数", "输入框")
L = 3 -( Len(a))Mod 3
a = String(L, "0") & a
n = Len(a)/ 3
For m = 1 To n
b = Mid(a, 3 * m - 2, 3)
c = c + zh(b)
Next m
Text1.Text = c
End Sub
Private Function zh(s As String) As String
Dim i As Integer, n As Integer, p As Integer
p = 1
For i = 2 To 0 Step -1
n = n * 2 + Val(Mid(s, p, 1))
p = p + 1
Next i
zh = Str(n)
End Function
10.找出由两个不同数字组成的平方数,并将结果按图4中的格式显示在列表框List1中。
Option Explicit
Private Sub Command1_Click()
Dim I As Long, N As Long
For I = 11 To 300
N = I * I
If Verify(N) Then
List1.AddItem Str(I*I)+ "="+ Str(I)+ "*" + Str(I)
End If
Next I
End Sub
Private Function Verify(N As Long) As Boolean
Dim A(0 To 9) As Integer, I As Integer, J As Integcr
Do While N <> 0
A(N Mod 10)= 1
N = N \ 10
Loop
For I = 0 To 9
Js = Js + A(I)
Next I
If Js = 2 Then Verify = True
End Function
图4
2.运行下面的程序,当单击窗体时,文本框Text1中的内容是 (2) ,文本框Text2中的内容是 (3) 。
Private Sub Form_Click()
Dim St As String
Dim St1 As String, St2 As String
St = "ASFRSDCFRSKX"
Call Change_String(St, St1, St2)
Text1.Text = St1
Text2.Text = St2
End Sub
Private Sub Change_String(S As String, St1 As String, St2 As String)
Dim tem As String, i As Integer
For i = 1 To Len(S)
tem = Mid(S, i, 1)
If tem = "S" Then
St2 = St2 & "at"
ElseIf tem = "R" Then
St1 = St1 & "T"
Exit For
Else
St1 = St1 & tem
St2 = St2 & tem
End If
Next i
End Sub
(2)AFT
(3)AatF
分析:Mid(x,n1,n2)从x字符串左边第n1个位置开始向右起取n2个字符。过程Change_String的功能是,将字符串St中的“S” 置换为“at”,“R”置换为“T”,并退出For循环。
6.运行下面程序,单击命令按钮Command1,则在窗体上显示的第一行内容是 (13) ,第二行内容是 (14) ,文本框Text1中显示的内容是 (15) 。
Private Sub Command1_Click()
Dim S As String
S = "LAUSIV"
Text1.Text = Display(S, Len(S))
End Sub
Private Function Display(S As String, L As Integer) As String
If L > 1 Then Display = Display(S, L - 1)
S = Left(S, L - 1) & Right(S, 1) & Mid(S, L, Len(S) - L)
Display = S
Print Display
End Function
S
L
打印
层数
LAUSIV
6
一
LAUSIV
5
二
LAUSIV
4
三
LAUSIV
3
四
LAUSIV
2
五
LAUSIV
1
Left(S, 0) & Right(S, 1) & Mid(S, 1, 5)
VLAUSI
六
VLAUSI
2
Left(S, 1) & Right(S, 1) & Mid(S, 1, 4)
VILAUS
五
VILAUS
3
Left(S, 2) & Right(S, 1) & Mid(S, 1, 3)
VISLAU
四
VISLAU
4
Left(S, 3) & Right(S, 1) & Mid(S, 1, 2)
VISULA
三
VISULA
5
Left(S, 4) & Right(S, 1) & Mid(S, 1, 1)
VISUAL
二
VISUAL
6
Left(S, 5) & Right(S, 1) & Mid(S, 1, 0)
VISUAL
一
(13)VLAUSI
(14)VILAUS
(15)VISUAL
分析:过程Display是个递归过程。Left(x,n)从x字符串左边起取n个字符,Right(x,n)从x字符串右边起取n个字符,Mid(x,n1,n1)从x字符串左边第n1个位置开始向右起取以个字符,Len(x)求x字符串的长度(字符个数)。
展开阅读全文