题目

亲戚寻找。小李总是因为认不清亲戚而苦恼,于是他设计了如下程序来模拟亲戚寻找的过程。已知:如果1和2是亲戚,1和3是亲戚,则2和3也是亲戚。代码思维如下: 1)将每个人看成是一个钩码,能挂在另一个挂钩底下,自己底下也能挂其他挂钩。 2)如果两个钩码在同一条钩码串上,则为亲戚(如2、3都能找到1)。 3)如果两个是亲戚但不在一串钩码上,则可将其中一串的最上面的钩码挂在另一串的下方。 例如从图a加框处的前三行数据可得到图b所示的钩码串1和钩码串2,从第四行数据可知9、5也为亲戚,则可将两串钩码合并,合并后3为2的顶端,5为3的顶端,其余数据以此类推。 根据算法思想,编写VB程序功能如下:程序初始化时给出6条亲戚关系显示在List1中,单击“理关系”按钮,在List2中显示每个人所在钩码的顶端编号。在Text1和Text2中分别输入两人的编号,单击“询问”按钮,输出两个人是否为亲戚关系。程序运行界面如图a所示。 (1) 根据图a数据,若输入两人的编号为4和5,则两人的关系是否为亲戚(填:是/否)。 (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。 Const n = 9              '总人数 Const m = 6              '已知的亲戚关系数 Dim a(1 To n) As String , b(1 To n) As String Dim f(1 To n) As String    '记录不同的亲戚钩码串成员,每条亲戚钩码串内互为亲戚 Dim k As Integer           '亲戚钩码串的数目 Private Sub Form_Load()  '初始化List1和List2,生成m条亲戚关系,每条亲戚关系的编号对应存储在数组a(i)和b(i) '中,在List1中输出a(i)和b(i),代码略 End Sub Private Sub Command1_Click()     Dim i As Integer, x As Integer, y As Integer     f(1) = a(1) + b(1)     '利用a(1)、b(1)生成第一条钩码串存储在f(1)中     k = 1                  'k为钩码串编号     For i = 2 To m         x = root(a(i), 0): y = root(b(i), 0)  'x为调用函数获取a(i)所在的钩码串编号         If x = 0 And y = 0 Then k = k + 1:  '根据x与y分类讨论         If x <> 0 And y = 0 Then f(x) = f(x) + b(i)         If x = 0 And y <> 0 Then f(y) = f(y) + a(i)         If x <> y And x <> 0 And y <> 0 Then   'x、y在不同钩码串则将两条钩码串合并             f(x) = f(x) + f(y): f(y) = f(k): k = k - 1         End If     Next i     For i = 1 To n         '输出每个人所在钩码的顶端编号         x = root(CStr(i), 0): y = root(CStr(i), 1)  'Cstr()函数用于去除字符前导空格         If x <> 0 Then             If y = Len(f(x)) Then List2.AddItem Str(i) + "  " + CStr(i)             If y <> Len(f(x)) Then List2.AddItem Str(i) + "  " +         End If     Next i End Sub '按钮Command2的功能为判断输入的两个人是否为亲戚关系,代码略 Function root(a As String, b As Integer) As Integer  '参数a表示待查找目标,参数b '表示返回值类型,0表示返回目标所在钩码串编号,1表示返回目标在该钩码串中的位置 Dim m As Integer, n As Integer, i As Integer, j As Integer m = 0: n = 0: i = k: j = 0     Do While i > 0         If a = Mid(f(i), Len(f(i)) - j, 1) Then m = i: n = Len(f(i)) - j: Exit Do         j = j + 1         If j = Len(f(i)) Then i = i - 1: j = 0 Loop    If  Then root = m Else root = n End Function 答案: 【1】是 【1】f(k) = a(i) + b(i)【2】Mid(f(x), y + 1, 1)【3】b = 0
信息技术 试题推荐
最近更新