算法的程序实现 知识点题库

有8个西瓜的重量(单位:斤)分别是5.2,4.5,4.1,3.5,8.3,7.4,3.8,7.5。若采用选择排序算法对其进行从小到大排序,共需交换数据的次数是(   )
A . 4 B . 5 C . 6 D . 7
《孙子算经》中提出“物不知其数”的问题,此数以3除余2,以5除余3,以7除余2。以下程序段是求指定范围内满足该问题条件的自然数及其个数。

k = 0                                 '用来计数

Max = Val(Text1.Text)                   '指定范围

n = 9                            '①

Do While n <= Max                    

  If n Mod 3 = 2 And n Mod 5 = 3 Then  '②

     List1.AddItem Str(n)            

  End If                            

  n = n + 7        ' ③

  k = k + 1         ④

Loop

Label1.Caption = Str(Max) & "范围内满足问题的数有" & Str(k) & "个"

运行程序,在文本框中输入自然数600,结果统计的个数与列表框中输出的个数不相符,如图所示:

请问出现此问题的原因是  (    )

A . 语句①错,应改为n=0 B . 语句②应改为n Mod 3 = 2 And n Mod 5 = 3 and n Mod 7 = 2 C . 语句③错,应改为n=n+1 D . 语句④的位置不正确,应该移到语句②的下一行
【加试题】某对分查找算法的VB程序段如下:

  n=0

  i=1

  j=6

  key=Val(Text1.Text)

  f=False

  Do While i<=j And Not f

    m=(i+j+1)\2

    n=n+1

    If key=d(m)Then

       f=True

    ElseIf key>d(m)Then

       i=m-1

    Else

      i=m+1

    EndIf

  Loop

数组元素d(1)到d(6)的值依次为“87,72,53,41,29,18”,若该程序段运行结束后,n的值为2,则key的值是(  )

A . 87或29 B . 72或18 C . 72或29 D . 53或18
小明基于冒泡排序算法编写了一个VB程序,功能如下:单击“生成”按钮command1,生成n个【10,99】的随机整数赋值给a数组,并在列表框list1中显示。单击“排序”按钮command2,对这组数据进行错位排序(即从前往后依次是最小的,最大的,第二小的,第二大的……依次类推)。在列表框list2中依次输出数据排序的结果,程序运行界面如图所示:

实现上述功能的VB程序如下:

Const n=10

Dim a(1 To 10)As Integer

Private Sub Command1  Click()

For i=1 To n

               ‘①

    List1.Addltem Str(a(i))

    Next i

End Sub

 Private Sub Command2  Click()

    tmp=1

    For i=1 To n-1

    For j=n To i+1 Step-1

    If  >0 Then    ①

    t=a(j):a(j)=a(j-1):a(j-1)=t

    End If

    Next j

    ②

    Next i

    For i=1 To 10

    List2.Addltem Str(a(i))

    Next i

 End Sub

  1. (1) 程序测试运行后生成如下文件:(A .paixu.frmB .paixu.vbp C .paixu·vbw D .pai×u.exe),其中属于windows系统可执行文件是:(单选,填字母:)
  2. (2) 划线①处应填: 
  3. (3) 加框①、②处代码有错,请改正。

     ② 

有如下VB程序段:

i = 1

 Do While i <= 6

    t = Int(Rnd * 10) + 1

    If t Mod 2 = i Mod 2 Then a(i) = t : i = i + 1

Loop

For i = 1 To 2

   k = 1

   For j = 1 To 6 - i * 2

     If a(j) * k > a(j + 2) * k Then

       t = a(j) :  a(j) = a(j + 2) :  a(j + 2) = t

     End If

     k = -k

   Next j

Next i

执行该程序段后,数组元素a(1)到a(6)的值可能是(  )

A . 5,11,2,10,7,8 B . 9,0,7,2,3,4 C . 9,2,5,4,3,8 D . 1,8,7,6,11,4
一组“非降序”的数据分别存储在数组元素a(1)~a(n)中,用对分查找算法在数组a中查找key值所在的位置,如果有重复的元素,则显示最小的位置。部分VB程序如下:

key = Val (Text1. Text)

i = 1: j = n

Do While i < = j

  m = (i+j) \2

  If a(m) > key Then

    j = m - 1

  ElseIf a(m) < key Then

    i = m + 1

  Else

    if  Then

      j = m-1

    Else

      Label2. Caption = str(key) +“的起始位置是”+ str(m)

      Exit Do

    End If

  End if

Loop

If i > j Then

  Label2. Caption = “找不到” + str(key)

End If

要使程序实现上述算法思想,则方框中的正确语句是(  )

A . a(m-1) = key B . a(m) = key C . m-1 > 0 And a(m-1) = key D . m-1 > 0 And a(m) = key
某对分查找算法的VB程序段如下:

i=1:j=8

k=Int(Rnd * 100)

Do While i<=j

  m=(i+j+1)\2

  If k=a(m)Then Exit Do

  If k<=a(m)Then j=m-1 Else i=m+1

Loop

数组元素a(1)到a(8)的值依次是“13,27,36,42,48,51,66,83”,则以上程序段执行后,下列说法不可能正确的是(  )

A . m=j-4 B . i=j C . j=i+1 D . j=m+1
下列问题中可以用枚举算法解决的是(     )。
A . 根据三个系数a、b、c的值,求一元二次方程ax2+bx+c=0的解 B . 找出一串钥匙(30把)中所有能打开某一实验室门的钥匙 C . 将10个评委的打分按由大到小的顺序进行排序 D . 已知5个电阻阻值,求它们并联后的阻值
下列问题适合用解析算法求解的是(    )
A . 将全般40名学生根据身高从低到高排队 B . 在一筐鸡蛋中寻找鸭蛋 C . 计算5个电阻并联的总的电阻值 D . 统计3000以内各位数字之和是20的偶数的个数
数组a存放了一组数据如表所示。采用选择排序对这组数据进行递增次序排序。在第三遍加工的过程中,需要交换的数组元素是什么,一共需要做多少遍加工。(     ) 

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

168

162

177

155

179

166

191

188

A . d[3]与d[6],7 B . d[3]与d[5],7 C . d[3]与d[6],8 D . d[3]与d[5],8
有如下VB程序段:

For i=1 to 3

    For j=1 to 5-i

        If a(j)>a(j+1) Then

            t=a(j) : a(j)=a(j+1) : a(j+1)=t

        End If

    Next j

    Text1.Text = Str(a(i))+Text1.Text

Next i

数组元素a(1)到a(5)的值依次为“2,9,7,8,5”。若该程序段执行后,文本框Text1显示的内容是(    )

A . 2 5 7 B . 9 8 7 C . 2 7 7 D . 7 7 2
有10个数据:56,45,43,34,26,76,90,13,15,21依次存放在数组a(1)到a(10)中,部分VB程序段如下所示:

n=Val(Text1.Text)

ans=0

For i=1 To n-1

  For k=n To i+1 Step-1

      If a(k)>a(k-1)Then

          tmp=a(k):a(k)=a(k-1):a(k-1)=tmp

          ans=ans+1

      End If

  Next k

Next i

Text2.Text=Str(ans)

在文本框Text1中输入“8”,则在文本框Text2中输出的值是(  )

A . 2 B . 11 C . 4 D . -77
有如下VB程序段:

For i = 1 To 2

    k = i

    For j = i + 1 To 7

        If a(j) < a(k) Then k = j

    Next j

    If i <> k Then

        t = a(i) : a(i) = a(k) : a(k) = t 

    End If

Next i

数组元素a(1)到a(7)的值依次为“19,85,86,90,24,22,62”,经过该程序段“加工”后,数组元素a(1)到a(7)的值依次为(     )

A . 19,22,24,62,85,86,90 B . 19,22,86,90,24,85,62 C . 90,86,85,19,24,22,62 D . 90,86,85,62,24,22,19
某对分查找算法的VB程序段如下:

i=1: j=6: n=0: f=False

key=Val(Text1.Text)

Do While i<=j and Not f

    n=n+1

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

    If key=a(m)then f=True

    If key<a(m)then j=m-1 Else i=m+1

Loop

数组元素a(1)到a(6)的值依次为“12,19,27,31,46,55”,文本框Text 1中输入“31”后运行该程序,则以上程序段运行结束后,下列说法不正确的是(   )

A . 变量i的值为4 B . 变量j的值为4 C . 变量m的值为4 D . 变量n的值为3
找出满足各位数字之和等于5的所有三位数可采用的算法是(   )。
A . 解析算法 B . 冒泡排序 C . 枚举算法 D . 选择排序
某vb程序段如下:

L=1: R=10: n=10: key=78

Do While L<=R

    m=Fix((L+R)/2)

    If  Then

        R=m-1

    Else

        L=m+1

    End If

Loop

For i=1 To R

    List1.Additem Str(a(i))

Next i

数组元素a(1)到a(10)的值依次为86,78,78,77,73,69,60,54,54,51,若执行该程序段后,列表框List1中输出的数据个数为3,则方框处的代码为(     )

A . Key>a(m) B . Key>=a(m) C . Key<a(m) D . Key<=a(m)
已知一无序数组a中的元素为“90,15,40,72,65,32,81,6”,通过引入数组b存储数组a元素按升序排列时的下标,b数组元素为“8,2,4,6,5,3,7,1”,使得a(b(1)≤a(b(2))≤a(b(3))≤......≤a(b(n)),从而对a数组中的数据进行对分查找。部分程序如下:

i=1: j=8: c=0

key= Val(Textl. Text)

Do While i<=j

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

    t=b(m)

    c=c+1

    If a(t)=key Then p=t:Exit Do

    If a(t)<key Then

        i=m+1

    Else

        j=m-1

    End If

Loop

当文本框 Text1中输入的值为32时,程序运行结束后变量c的值为(    )

A . 1 B . 2 C . 3 D . 4
用随机数产生50个[10,100]不重复的正整数放入数组,从小到大排序,每行输出10个数。

Private Sub Command1Click()

    Dim a(1 To 50) As Integer, i%, j%, t%, p%, n%, x%

    n=0

    Randomize

    Do While n<50

        x=

        For i= 1 To n

            If Then  Exit For

        Next i

        If i> n Then

           

            a(n)=x

        End If

    Loop

    For i= 1 To 49

       

        For j=i+ 1 To 50

            If a(p)> a(j) Then

        Next j

        t= a(p): a(p) = a(i): a(i)=t

    Next i

    For i= I To 50

        Print a(i);

        if Then Print

    Next i

End Sub

(多选)用计算机解决以下问题,与穷举法相比更适合用解析法来解决的有(    )。
A . 输入整数m、n,输出从m到n之间的质数(素数)。 B . 输入三角形三边长,输出这个三角形面积 C . 输入一元二次方程的各个系数,输出方程的解。 D . 输入三个正整数a、b、c,输出这三个数的最小公约数。
某排序算法的VB程序段如下:

n =10

Text1. Text =" "

For i=1 To 5

    For j=n To i+1 Step-1

        If a(j) < a(i) Then

            temp = a(j) : a(j) = a(i) : a(i) = temp

        End If

    Next j

Next i

For i=1 To 10

    Text1. Text = Text1. Text+Str(a(i))

Next i

数组元素a(1)到a(10) 的值依次为“965,155,195,444,106,734,172,983,898,360”,执行该程序段,文本框Text1中显示的是(     )

A . 106 155 172 195 360 444 734 898 965 983 B . 106 155 172 195 360 734 444 983 898 965 C . 983 965 898 734 444 360 172 195 155 106 D . 106 155 172 195 360 965 444 734 898 983