'n和m是常量,分别表示节目数和评委数,代码略
Dim df(1 To m * n) As Integer
Private Sub Form Load()
'从数据库中读取n个节目的m个评委的评分、依次存入数组df中,并显示在List1中,代码略。
End Sub
Private Sub Command1_ Click ()
Dim i As Integer, j As Integer, cnt As Integer
Dim sum As Integer, max As Integer, min As Integer
Dim index(1 To n) As Integer, score(1 To n) As Single
For i=1 To n
x=(i-1)*m+1
y=i*m
sum=0:cnt=0
For j=x To y
If df(j)=0 Then cnt=cnt+1
sum =
Next j
max = df(x): min = df(x) '统计每个节目的最高分与最低分
For j=x+1 To y
If df(j) > max Then max = df(j)
If df(j)<>0And()Then min=df(j)
Next j
If cnt<m-2 Then score(i)=
index(i) = i
Next i
For i=1 To n
For j=nToi+1Step -1
If Then
t = index(j): index(j) = index(j- 1): index(j- 1) = t
End If
Next j
Next i
For i=1 To n
List2.AddItem"节目" & index(i) & "得分:" & Int (score (index(i))*100)/100
Next i
End Sub
编写VB程序,实现上述功能。运行程序,在列表框List1中显示n个英文单词(单词仅由小写字母组成且字母个数至少为1),单击“统计”按钮Command1,在列表框List2升序显示全部单词的按键组合,在文本框Text1中显示最频繁使用的按键组合,若有多个,则全部输出。程序运行界面如图b所示。
'n为常量,代码略
Dim a(1 To n) As String '数组a存储所有单词
Dim b(1To2*n) As String '数组b存储转换后的按键组合
Private Sub Form_ Load()
'读取所有单词存入数组a,并显示在列表框List1中
'初始化数组b各元素为空字符串,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer, p As Integer, max As Integer
Dim m As Integer, key As String, t As String, s1 As String, s2 As String
key= 222334455566677889999 'key 表示a-z各个字母所对应的键盘数字
max=0
'以下代码实现将数组a中的每个单词转化成按键组合,并依次存入数组b中
For i= 1 To n
t= ""
For j= 1 To Len(a(i))
m = Asc(Mid(a(i), j, 1))- Asc("a")
t=
Next j
b(i)= t
Next i
'以下代码实现对数组元素b( 1)~b(n)升序排序
Do While i>=1
For j= 1 To i
If b(j+ 1)< b(j) Then
t=b(j+ 1): b(j+ 1)= b(j): b(j)=t
End If
Next j
i=i- 1
Loop
'将排序后数组元素b(1)~b(n)显示在列表框List2中,代码略
s1= b(1)
p=n+ 1
i= 1:j= 2
Do While j<= n '从数组元素b(n+1)开始存储最高频次的按键组合
s2 = b(j)
If s1 < s2 Then
If Then
max=j-i
p=n+ 1
b(p)=s1
Else If max=j- i Then
p=p+ 1
b(p)= sl
End If
s1= s2
End If
j=j+ 1
Loop
t=""
If max<j- i Then
t= s1
Else
For k=n+ 1 To p
t=t+ b(k)+" "
Next k
If max=j- I Then t=t+" "+s1
End If
Text1.Text= "最频繁按键组合为: " &t
End Sub
比如有7个选手,他们的等级分别是30,17,26,41,19,38,18,要进行3场比赛。最好的安排是选手2对选手7,选手7对选手5,选手6对选手4。此时等级差的总和等于(18-17)+(19-18)+(41-38)=5达到最小。
窗体form1的运行界面如下图所示,用户在文本框Text1中输入各位选手的等级(以逗号分隔),在文本框Text2中输人要对弈的场数k,单击计算按钮Commmand1,在文本框Text3中显示最小等级差总和。程序运行界面如图所示。
Dim a(0 To 1000) As Integer
Dim b(0 To 1000) As Integer
Private Sub Command1_ Click()
Sum=0
k = Val(Text2. Text)
s =Text1. Text
cnt =1
For i=1 To Len(s)
c=mid(s, i, 1)
If c="," Then cnt=cnt+1 Else
Next i
For i=1 To cnt-1
For j=1 To cnt-i
If Then
t = a(j): a(j) = a(j+ 1): a(j+1)= t
End If
Next j
Next i
'计算出各等级选手之间差值
For i=1To cnt- 1
b(i)=a(i+1)-a(i)
Next i
For i=1 To k
Min=i
If b(j) < b(Min) Then Min = j
Next j
Sum = Sum + b(Min)
Next i
Text3. Text = Str(Sum)
End Sub
根据.上述要求设计VB程序,功能如下:在窗体加载时,读取木块长度和厚度数据,并显示在列表框List1中,单击“排序”按钮实现木块排序,结果显示在列表框List2中,程序运行界面如图b所示。
Const n = 10
Dim cd(1 To n) As Single, hd(1 To n) As Single
Private Sub Form_ Load()
'通过数据库读取n根木块的长度数据存储到cd数组,厚度数据存储到hd数组,并将数据显示在列表框List1中,代码略
End Sub
Private Sub Com1_Click()
Dim L As Integer, R As Integer
Dim min As Integer
Dim i As Integer, j As Integer
Dim t1 As Single, t2 As Single
For i=1 To n-1
min=i
For j=i+1 To n
If Then min= j
Next j
R=min
'实现区间内木块的整体翻转
Do While L<R
t1 = cd(L): cd(L) = cd(R): cd(R) = t1
t2 = hd(L): hd(L) = hd(R): hd(R) = t2
L=L+1
Loop
Next i
List2. AddItem"长度(cm)"+""+"厚度(cm)"
For i =1 To n
List2. AddItem Str(cd(i)) +"" + Str(hd(i))
Next i
End Sub
图a
小明同学使用VB编写了一个最终得分处理程序,对上述n个成员按最终得分进行降序排序,并计算出最终得分的中位数(中位数:把所有观察值排序后,正中间的一个即为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数)。程序运行界面如图b所示:
图b
Const n = 11
Dim a(1 To 2 * n) As Single
Private Sub Form_Load()
'读取初始数据,存储在数组a,并显示在列表框 List1 中。代码略
End Sub
Private Sub Cmd_sort_Click()
Dim i As Integer, j As Integer, shift As Integer Dim t As Single, zws As Single
i = 2
Do While
shift = n
For j =
If a(2 * j) * a(2 * j - 1) > a(2 * j - 2) * a(2 * j - 3) Then
t = a(2 * j): a(2 * j) = a(2 * j - 2): a(2 * j - 2) = t
t = a(2 * j - 1): a(2 * j -1) = a(2 * j - 3): a(2 * j - 3) = t
End If
Next j
i = shift
Loop
If n Mod 2 = 1 Then zws = a(n) * a(n + 1)
Else
zws = () / 2
End If
'在列表框 List1 中输出处理后数据的排序结果,代码略Label1.Caption = "最终得分的中位数是:" + Str(zws)
End Sub
编写VB程序统计所有的峰值(peak)、峰值数量(count)和最高点(high)。
实现上述功能的VB程序如下,请回答下列问题:
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_ Load( )
'随机生成n个数,存储于数组a中,并输出在List1中。代码略。
End Sub
Private Sub Command1_ Click( )
Dim count As Integer
Dim high As Integer
Dim peak As Integer
Dim i As Integer, j As Integer
count= 0
if a(1)> a(2) then
count = 1
high=-1
i=1
Do While i< n-1
j=i+1
If a(j)>a (j-1) Then
Do While a(j)>a(j-1)
j=j+1
Loop
count =count+1
'①
List2. AddItem“第”+Str(count) +“个峰值:”+ Str( peak)
If peak > high Then high = peak
'②
Else
i =i+1
End If
Loop
List2. AddItem“共有:”+Str(count) +“个峰值”
List2. AddItem“最高点是:”+Str( high)
End if
End Sub
实现上述功能的VB代码如下,运行效果如图所示。请回答下列问题:
Const n= 5
Dim a(1 To n) As String
Private Sub Form_ Load( )
'将n个字符串分别赋值给数组元素a(1)、a(2)、……、a(n),并在列表list1中显示
'代码略:
End Sub
Private Sub Command1_ Click( )
Dim s As String, i As Integer, j As Integer
Dim m As Integer, k As Integer
Dim flag As Boolean
s = Text1. Text
m = Len(s)
List2. Clear
flag = False
For i=1 To n
k = Len(a(i))
For j=1 To k- m + 1
If = s Then '①改错
List2. AddItem a(i)
flag = True
Exit For '退出for 循环
End If
Next j
Next i
If Then '②填空
List2. AddItem“查找无结果”
End If
End Sub
程序运行界面如图所示,实现上述功能的VB程序如下。请回答下列问题:
Const m= 10
Dim n As Integer
Dim a(1 To m) As Integer
Private Sub Form_ Load( )
'获取原始数据依次存数组a中,并在列表框List1中显示,数据个数存变量m,代码略
End Sub
Private Sub Command1_ Click( )
Dim i As Integer, j As Integer, k As Integer
n= Val(Text1. Text)
i= 1
Do While i<=n
k=i
For j=i+1 To m
If a(j) > a(k) Then k=j
Next j
If i<>k Then
a(i)=a(i)+a(k): a(k)=a(i) - a(k) : ①
End If
i=i+ 1
Loop
For i=1 To n
List2. AddItem Str(a(i))
Next i
c==n
For i=n+1 To m
If Then c=c+1: List2. AddItem
Str(a(i)) '改错
Next i
List2. AddItem "筛选出" + ② + "个成绩"
End Sub
① ②
网格中每个格子都有一面沿对角线方向放置的挡板,且朝向随机。现将一个小球从左上角1号格子自上而下射入网格,则小球将在网格中不断反弹(不考虑实际的能量损失与重力影响等因素),最终从某个格子离开网格,根据挡板的朝向与小球的运动方向,将有几种不同的反弹情况。如图b所示,小球进入网格后,先后经过1、2、5、6、3号格子,之后离开网格。
编写VB程序,功能如下:在文本框Text1中输入n的值,单击“生成”按钮Command1,生成网格和随机的挡板,并输出。然后单击“开始”按钮Command2,在文本框Text2中显示小球进入网格后的运动路径。程序中利用数组a存储网格的状态,其中“/”与“\”两种字符表示两种朝向的挡板。程序运行界面如图c所示。
请回答下列问题:
Dim n As Integer
Dim a(0 To 100) As String
Private Sub Command1_Click( ) '生成网格和挡板,
n= Val(Text1. Text)
'生成n* n的网格和随机的挡板,并通过图形控件输出,代码略
End Sub
Private Sub Command2_ Click( )
Dim ans As String, pre As String
Dim cur As Integer
cur= 1 : : ans =" "
Do While cur >= 1 And cur<= n* n
ans=ans + Str(cur) +“→”
If pre="左" And a(cur)="\" Or pre= "右" And a(cur)="/" Then
cur=cur+n: pre="上“
ElseIf Then
cur= cur n: pre="下"
ElselIf pre="上" And a(cur)="\" Or pre=“下" And a(cur)="/" Then
If cur Mod n=0 Then
Exit Do
Else
cur=cur + 1: pre="左"
End If
ElseIf pre="上" And a(cur)="/" Or pre=“下" And a(cur)="\" Then
If Then
Exit Do
Else
cur=cur-1: pre= "右"
End If
End If
Loop
Text2. Text=ans+"离开"
End Sub