实现上述功能的VB程序如下:
Private Sub Command1_Click()
Dim a(1 To 1000) As String '数组a存储文中出现该指定单词(或字符串)的各个位置
Dim s As String, c As String ,ch As String
Dim n As Integer, max As Integer, i As Integer
s = Text1.Text
c = Text2.Text
n = 0: Max = 0
For i = 1 To Len(s) - Len(c) + 1
ch = ①
If ch = c Then
n = n + 1
a(n) = i
If n >= 2 Then
If a(n) - a(n - 1) - Len(c) > Max Then Max = a(n) - a(n - 1) - Len(c)
End If
End If
Next i
Text3.Text = ②
End Sub
以上程序段运行时,为了实现上述功能,划线处①和②应填入的代码分别为:
① ②
⑴各像素点的颜色信息值(介于0至255之间的一个正整数),存储至数组a中。
⑵给定模糊处理的模糊中心位置p和模糊半径r(r>1),中心位置p即为半径为1的区域,
①确定模糊中心点在如下数阵中的位置。若模糊中心为36时,该模糊中心在数阵中对应位置为第4行第6列;
图a
②根据中心点和模糊半径确定模糊处理的像素点的范围。
⑶依序将模糊处理范围内的像素点进行模糊处理。模糊处理的方式为:最外侧的像素点颜色信息不变,中间各像素点的新颜色信息值为该像素点上下左右相邻四个像素点颜色信息值的平均值。
程序运行时,在文本框Text1中输入模糊的中心点p,在文本框Text2中输入模糊的半径r,窗体加载,通过列表框List1输出图像模糊处理前的信息,单击命令按钮Command1后通过列表框List2输出模糊后的图像信息。程序运行效果如图b所示。相应的模糊中心位置由椭圆圈注,中间各像素点由矩形框圈注
图b
实现上述功能的VB程序如下。请回答下列问题:
Const n = 10
Dim a(1 To n * n) As Integer '介于0至255之间的值,存储10*10图像像素点的颜色信息
Private Sub Form_Load()
'读取100个正整数,存储在数组a中以表示10*10图片的像素点颜色信息,代码略。
'并按右对齐方式将该图片的各像素点颜色信息输出至列表框List1中,代码略。
End Sub
Private Sub Command1_Click()
Dim r As Integer, p As Integer
Dim i As Integer, j As Integer, k As Integer
p = Val(Text1.Text) :r = Val(Text2.Text)
i = 1
Do While j > n
j = j - n
i = i + 1
Loop
'确定模糊处理的范围,处理范围的起始行,结束行,起始列,结束列保存到i1,i2,j1,j2中,代码略
For i = i1+1 To i2-1 '中间像素点的模糊处理
For j = j1+1 To j2-1
a(k) = ave(k)
Next j
Next i
'并按右对齐方式将该图片的各像素点颜色信息输出至列表框List2中,代码略。
End Sub
Function ave(k As Integer) As Integer
ave =
End Function
数组元素a(1)至a(5)依次为5,22,28,42,55,在a(3)处分成两段,交换位置后为:
a(1) |
a(2) |
a(3) |
a(4) |
a(5) |
28 |
42 |
55 |
5 |
22 |
旋转数组a的最小元素是5。
数组d(1)至d(5)依次为0,1,1,1,1,在d(5)处分成两段,交换位置后为:
d(1) |
d(2) |
d(3) |
d(4) |
d(5) |
1 |
0 |
1 |
1 |
1 |
旋转数组d的最小元素是0。
小明依据查找算法思想,设计一个查找旋转数组d最小元素的程序,功能如下:运行程序时,利用“添加”按钮Command1和文本框Text1依次输入旋转数组d的值,在列表List1中显示旋转数组,单击“求解”按钮Command2,在标签Label2中显示旋转数组d最小元素值。运行效果如图1所示,实现该功能的VB程序如下:
图1
Dim n As Integer
Dim d(1 To 100) As Integer '数组 d 存储待排序数据
Private Sub Command1_Click()
'按旋转数组规则将数据存入数组d中,代码略
End Sub
Private Sub Command2_Click()
Dim mid As Integer, L As Integer, R As Integer
L = 1: R = n
mid = L
Do While d(L) >= d(R)
If Then '改错
mid = R
Exit Do
End If
mid = (L + R) \ 2
If d(L)=d(R) And d(mid)=d(R) Then
mid =______________ '填空
Exit Do
End If
If d(L) < d(mid) Then
L = mid
ElseIf d(mid) < d(R) Then
R = mid
End If
Loop
Label2.Caption = "最小值为" + Str(d(mid))
End Sub
End If
Next i
End Function
Dim d(1 to 10) as Integer
n=10 : count = 0
For i = 1 To n
count = count + 1
If Then
Label1.Caption = “顺序查找在数组的第” & i & “位找到了” & v
Exit For
End If
Next i
If Then
Label1.Caption = “顺序查找没有找到” & v
End If
Dim n As Integer ‘存储随机数的个数
Dim f(1 To 100) As Boolean ‘f (i)为true时表示随机整数i已经产生过
Dim a(1 To 100) As Integer ‘依次存放升序排序后的n个随机数
Private Sub Command1_Click() ‘命令按钮“产生随机数并升序排列”的单击事件
Dim i As Integer
Randomize
For i=1 To 100
f(i)=False
Next i
n=Val(Text1. Text)
For i=1 To n
t=Int(Rnd * 100+1)
Do While f(i)=True
t=Int (Rnd * 100+1)
Loop
Next i
j=0
For i=1 To 100 ‘实现排序并输出
If f(i)=True Then
a(j)=i
List1.AddItem Str(i)
End If
Next i
End Sub
Private Sub Command2_Click() ‘命令按钮“查找”的单击事件
Dim key As Integer
key=Val(Text2. Text)
If key <=a(1) Then Label3. Caption=Str(a(1)) : Exit Sub
If key >=a(n) Then Label3. Caption=Str(a(n)) : Exit Sub
L=1: R=n
Do While L <=R ‘找到与key较为接近的两个数a(R)和a(L)
m=(L+R) \2
If key <=a(m) Then
R=m-1
Else
L=m+1
End If
Loop
IfThen ‘在a(R)和a(L)中选出更接近key的数
Label3. Caption=Str(a(R))
Else
Label3. Caption=Str(a(L))
End If
End Sub
Dim a (1 To 4020 ) As String
Dim b (1 To 2000 ) As String
Private Sub Form_Load( )
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constr As string
constr=“Provider=Microsoft.ace.OLEDB.12.0;”
constr=constr &“Data Source=” & App.Path+“\data\KaoSheng.accdb”
conn.ConnectionString=constr
conn.open()
Dim sql As String
‘将参加2010年下半年考试的考生的身份证号码按升序存放在a数组中
sql=“select * from kaoshengInfo where year=‘2010’order by sfzh asc”
rs.Open sql,conn
i=0
Do While Not rs.EOF
i=i+1
a(i)=rs(“sfzh”)
List1.additem(a(i))
rs.MoveNext
Loop
‘将参加2011年下半年考试的考生的身份证号码按升序存放在b数组中
sql=“select * from kaoshengInfo where year=‘2011’order by sfzh asc”
rs.Open sql,conn
i=0
Do While Not rs.EOF
i=i+1
b(i)=rs(“sfzh”)
List2.additem(b(i))
rs.MoveNext
Loop
rs.Close
End Sub
Private Sub Command1_Click ()
Dim bot As Integer, top As Integer, m As Integer
Dim i As Integer, ans As Integer
ans=0
For i=1 To 2000
bot=1
Do While bot <=top
m=Fix ( ( bot+top ) / 2 )
If a ( m )=b ( i ) Then
List3.AddItem a ( m )
Exit Do
ElseIf Then
top=m-1
Else
bot=m+1
End If
Loop
Next i
List3.AddItem“总计”+str(ans)+“人次”
End Sub
现有三次方程y=5x^3-55x^2+170x-130,其函数图象如图所示:
观察该函数图象发现函数有一实根在区域(1.2)之间,因此我们取两者的中点m=(1+2)/2代入方程进行检测发现f(1.5)=18.125。因为f(1.5)>0,因此区间应该往左移动,得下一个区间(1,1.5)然后继续进行检测。如果区间差值≤误差率,则认为该中点是方程的根。根据上述方法描述设计一个VB求解程序的根,要求单击求解按钮Command1,在文本框Text1中显示方程的根,部分程序如下。
PrivateSubCommand1_Click()
DimiAsDouble,jAsDouble,mAsDoubleDimrAsDouble,yAsDouble
i=1:j=2:y=1:r=j-iDoWhiley<>0Andr>0.00001
m=(i+j)/2
y=
Ify>0Then
j=m
ElseIfy<0Then
i=m
EndIf
Loop
Text1.Text=m
EndSub
i=1:j=n
Do While i+1<j
m=(i+j)\2
If a(m+1) -a(m) >a(m) -a(m-1) Then
Else
End if
Loop
Label 1.Caption=“相邻两个元素的最大差值是”+Str(a(j) -a(i) )
上述程序段两个方框处的语句分别为( )
i=1:j=6:s=" "
Key=Text1.Text
Do While i<=j
m=Int((i+j)/2+0.5)
s=s+" "+a(m)
If Key> a(m)Then
i=m+1
Else
j=m-1
End If
Loop
Text1.Text=s
数组元素a(1)到a(6)的值分别为“Beijing”“Cuangdong”“Jiangsu”“Jiangxi”“Shanghai”“Zhejiang”,己按字典序排序。当key的值为“Zhejiang”时,单击命令按钮Command1,文本框Text1中显示的内容为 ( )
Dim a(1 To 100) As Integer
Dim m As Integer, n As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer, x As Integer
Dim s As String
m = Val(Text1.Text)
n = Val(Text2.Text)
Randomize
For i = 1 To m
For j = 1 To n
x = Int(Rnd * 10 + 1)
Next j
Next i
s = ""
For i = 1 To m * n
s = s + Str(a(i))
If i Mod n = 0 Then
List1.AddItem s
End If
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, x As Integer, y As Integer
Dim key As Integer, flag As Boolean
key = Val(Text3.Text): flag = False
For i = 1 To m * n
If key = a(i) Then
x = (i - 1) \ n + 1
y =
list2.AddItem Str(key) + "的坐标为:第" + Str(x) + "行,第" + Str(y) + "列"
flag = True
End If
Next i
If Not flag Then
list2.AddItem "未查找到相应数据!"
End If
End Sub
For i = 1 To Len(s1)
c1 = Mid(s1, i,1): c2 = Mid(s2, i, 1)
If Then
If Then Exit For '退出For循环
If Then Exit For
If Then Exit For
End If
Next i
If i > Len(s1) Then Label1.Caption =“相等” Else Label1.Caption =“不相等”
上述程序段中方框处可选语句为:
①Abs (Asc(c1) - Asc(c2)) <> 32 ②c1 <> c2
③c1 >= "a" And c2 >= "a" ④c1 <= "Z" And c2 <= "Z"
则(1)(2)(3)(4)处语句依次可为( )
i = 1: j = 10: c = 0
k = Val(Text1.Text)
Do While i <= j
m = (i + j) \ 2
c = c + 1
If a(m) >= k Then
j = m - 1
Else
i = m + 1
End If
Loop
数组元素a(1)到a(10)的值依次为“1,4,10,21,21,26,27,29,30,36”,在文本框Text1中输入“21”,执行该程序段后,下列说法正确的是( )
def add(x):
if x>0:
return x+add(x-l)
else:
return 0
result=add(10)
print(result)
'随机产生包含10个整型元素的升序序列,依次存入数组a,代码略
i = 1: j = 10: s = "": c = 0
key = Val(Text1.Text)
Do While i <= j
m = (i + j)\ 2
c = c + 1
s = s + Str(a(m))
If a(m) > key Then j = m - 1 Else i = m + 1
Loop
在文本框 Text1中输入待查找数,执行该程序后,下列说法不正确的是( )
例如:
分析:如果词典中的单词数量比较少,我们可以采取将第i个单词与第j个单词拼接成“新单词”并在字典中查找,但如果词典中单词数量多(如12000个)此种方法速度慢,我们发现词典中的单词是有序排列,可以加快查找复合单词的速度,本题的算法策略是:对第i个单词,从第j(j=i+1)个开始判断,如果第j个单词前半部分(长度为第i个单词的长度)跟第i个单词一致,则在词典中查找第j个单词的后半部分。如果找到,则为一个复合单词。
编写vb程序,寻找词典中所有复合单词并输出显示。运行程序,在列表框list1中显示从词典数据库中导入的单词,单击“统计”按钮command1,在列表框list2中按降序显示该词典中所有复合单词。程序运行界面如图所示。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n As Integer
Dim a(1 To 200) As String
Function search(key As String) As Boolean
i = 1: j = n
Do While i <= j
m = Int(i + (j - i) / 2)
If key = a(m) Then
search = True: Exit Do
ElseIf key > a(m) Then
i = m + 1
Else
j = m - 1
End If
Loop
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer, temp2 As String
Dim out(0 To 100)
For i = 1 To n
For j = i + 1 To n
If a(i) = Mid(a(j), 1, Len(a(i))) Then
If search(temp2) = True Then
cnt = cnt + 1
k = cnt
Do While a(j) > out(k) And k > 0 '找到a(j)应该插入的位置k
k = k - 1
Loop
For p = cnt To k + 1 Step -1 'k到末尾元素均后移一位
out(p) = out(p - 1)
Next p
End If
End If
Next j
Next i
For i = 1 To cnt
List2.AddItem out(i)
Next i
End Sub
Private Sub Form_Load()
Dim i As Integer
连接字典数据库
打开数据库中字典数据表,代码略
n = 0
Do While Not rs.EOF
n = n + 1
a(n) = rs/Fields("words")
rs/MoveNext
Loop
关闭数据连接,代码略
List1.Clear
For i = 1 To n
List1.AddItem a(i) '在列表框List1中显示单词
Next i
End Sub
点击“查找”按钮,查找所有符合要求的正方形。算法思路:枚举正方形对角线上的线段端点A、C(即保证线段AC与x轴呈斜45度的夹角),通过A、C点,计算出正方形另-条对角线上的线段端点B、D,再查找B、D是否存在,若存在,则说明该正方形可以生成。
Dim n As Integer, x(1000) As Integer, y(1000) As Integer
Private Sub Command2_Click( )
'生成n个点的坐标,并按要求排序,代码略
'第i个点的坐标保存在x(i)和y(i)并显示在List1 中
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer
For i=1 To n
For j=i+1 To n
If Then
If search(x(i), y(j)) = True And search() = True Then
'将4个坐标点显示在List2中,代码略
cnt=cnt+1
End If
End If
Next j
Next i
List2AddItem "总共有" + Str(cnt) + "个符合要求的正方形"
End Sub
Function search(x As Integer, sy As Integer) As Boolean
Dim L As Integer, R As Integer, m As Integer
search = False: L= 1: R= n
Do While L<= R
m=(L+R)\2
If sx < x(m) Or Then
R=m-1
ElseIf x> x(m) Or x= x(m) And ey > y(m) Then
L=m+1
Else
search = True: Exit Do
End If
Loop
End Function