试题

试题 试卷

logo

题型:单选题 题类:常考题 难易度:普通

浙江省高中信息技术 算法及其程序实现单元检测

用以下对分查找算法:在一个包含有重复元素且从小到大排序(相等元素排在一起)的整数数组a中,查找某个重复出现的整数key,其中数组元素的总个数是n。

i=1: j=n

Do While i <=j

  m=(i+j) \ 2

  If a(m) < key Then i=m+1

  Else

   j=m-1

  End If

Loop

那么执行该程序后,下列说法正确的是(  )

A、程序可以找到重复元素key最开始出现的位置,该位置信息由变量i指示 B、程序可以找到重复元素key最后出现的位置,该位置信息由变量i指示 C、程序可以找到重复元素key最开始出现的位置,该位置信息由变量j指示 D、程序可以找到重复元素key最后出现的位置,该位置信息由变量j指示
举一反三
某仓库货物查询系统,数组id保存货物编号(货物编号已经按照从小到大的顺序保存),数组n保存货物名称,数组c保存货物数量。数组中的数据信息一一对应。该系统提供3种查询方式,查询优先级最高的是按编号查询,其次是按名称查询,最低的是按数量查询(在输入多个查询条件的情况下,只按照优先级高的条件进行查询,其中按数量查询可以查询到所有货物数量小于输入值的结果)并将查询结果在list1中显示。程序界面如图2-1所示。

部分程序代码如下:

Public number As String  '货物编号

Public na As String  '货物名称

Public co As String  '货物数量

Private Sub Command1Click()

Dim flag As Integer  '查询结果标志

number = Text1.Text

na = Text2.Text

co = Text3.Text

If (number = "" And na = "" And co = "") Then MsgBox ("你还没有输入查询条件") ’第一种情况

If number <> ""Then ’第二种情况

flag = searchnum(1, n)  'n 表示总的货物种类数量

List1.AddItem id(flag) + n(flag) + c(flag)

  If flag = -1 Then MsgBox ("查询无结果,检查是否输入有误")

End If

If na <> "" Then  ‘第三种情况

flag = searchna(1, n)  'n 表示总的货物种类数量

List1.AddItem id(flag) + n(flag) + c(flag)

  If flag = -1 Then MsgBox ("查询无结果,检查是否输入有误")

End If

If co <> "" Then ‘第四种情况

flag = searchco(1, n)

If flag = 0 Then MsgBox ("查询无结果,检查是否输入有误")

End If

End Sub

Function searchnum(i, j) As Integer  '按编号查询函数

Dim m As Integer

Do While i <= j

m = Fix((i + j) / 2)

If id(m) = number Then

searchnum = m: Exit Function  '查询到结果返回值并结束该函数

End If

If id(m) > number Then         Else i = m + 1

Loop

searchnum = -1

End Function

Function searchna(i, j) As Integer  '按名称查询函数

For i = 1 To j Step 1

If n(i) = na Then searchna = i: Exit Function

Next i

searchna = -1

End Function

Function searchco(i, j) As Integer  '按货物数量函数

Dim f As Integer

f = 0

For i = 1 To j Step 1

If        Then

List1.AddItem id(i) + n(i) + c(i)

f = 1

End If

Next i

searchco (f)

End Function

回答下列问题:

查找最接近的数。编写一个查找最接近的数的VB程序:程序运行时,在文本框Text1中输入产生随机数的个数(1到100之间),单击命令按钮“产生随机数并升序排列”后,在列表框List1中显示已经按升序排列后的随机整数。然后在文本框Text2中输入要查找的整数,单击命令按钮“查找”后,在标签Label3中显示随机整数序列中与待查找数最接近的整数(当最接近的数有2个时,输出较大的一个)。程序运行效果如图所示。实现上述功能的VB代码如下,请在横线处填入合适代码。

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

 {#blank#}1{#/blank#}

Next i

j=0

For i=1 To 100     ‘实现排序并输出

 If f(i)=True Then

  {#blank#}2{#/blank#}

  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

If{#blank#}3{#/blank#}Then      ‘在a(R)和a(L)中选出更接近key的数

 Label3. Caption=Str(a(R))

Else

 Label3. Caption=Str(a(L))

End If

End Sub

返回首页

试题篮