试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

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

插数。输入一个整数x,要将x插入到n(n<50)个有序(按降序排列)数据中,并使数据序列仍保持有序,试求出x应插入的位置。界面设计如图所示。

程序说明:

⑴其中n由文本框Text1中数据得到,x由文本框Text2中数据得到,插入位置显示在文本框Text3中。

⑵其中n个有序数据将通过随机函数Rnd产生,并对n个数进行降序排序后存入数组a中,同时显示在列表框List1中。

为了实现这一目标,完善下面的VB程序,在横线处填入合适的语句或表达式,完成程序设计。

Private Sub Command1_Click()

 Dim a(1 To 50)As Integer

 Dim n As Integer, i As Integer

 Dim x As Integer, temp As Integer

 Randomize

 List1.Clear

 n=Val(Text1.Text)

 x=Val(Text2.Text)

‘随机产生n个数,并存放至a数组中

 For i=1 To n

  a(i)=Rnd*200+1

Next i

‘将数组a中的数按降序排序

For i=2 To n

  For j=n To i Step-1

  If ① Then

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

Next j

Next i

‘将排序后的数组元素显示在列表框List1中

For i=1 To n

 List1.AddItem Str(a(i))

Next i

‘插入操作

If ② Then

  i=n+1

Else

  ③

  Do While x<a(i)

   i=i+1

  Loop

End if

‘在文本框Text3中显示插入位置

Text3 Text=Str(i)

End Sub

举一反三
学校需要统计学生的作业完成数,需要将学生的完成数按从高到低显示,下列程序模拟该信息处理过程,程序在数据库stud中找到的学生信息(编号和完成次数),并将所有学生按照完成数从高到低显示。先将所有学生的编号和完成次数从数据库stud的info表中ID和finshed两字段中取出分别保存在数组a和数组b中,第i个学生的编号保存在a(i)中,对应的作业完成次数保存在b(i)中。

数据库文件“stud. accdb”信息如图所示。

程序界面如图所示,左边列表框List1中显示所有学生信息(包括编号和完成次数),单击“排序”按钮(Command),所有编号按照作业完成次数从高到低显示在列表框List2中。

代码如下:

Dim conn As New ADODB. Connection

Dim rs As New ADODB. Recordset

Dim n As Integer

Dim a(500)As String

Dim b(500)As Integer

Private Sub Fom Load()

    Dim i As Integer

    conn. Connection String="Provider=Mi-crosoft. AC

    A.OLEDB. 12.0;DATA Source="& App. Path &"\stud. accdb"

    conn Open

    Set rs. Active Connection=conn

    rs. Open "Select*From info"

    n=0

    Do While not rs.EOF            '到记录集最后一条记录后退出循环

        n=n+1

        a(n)=rs. fields("id")

        b(n)=rs. fields("finshed")

        rs. MoveNext                 '移动到下一条记录

    Loop

    For i=1 To n

        List1. AddItem a(i)+" "+Str(b(i))

    Next i

    rs. Close

    conn. Close

    Set rs= Nothing

    Set conn= Nothing

End sub

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t1 As Integer, t2 As String, k As Integer

    For i=1 To n-1             'n表示学生总数

        k=i           'k保存第i大的数,一开始假定是a(i)

        For j=i+1 To n

            If b(k)<b(j) Then k=j            '比较完成数

                ①      

            If    ②      Then

                t1=b(i): b(i)=b(k): b(k)=t1           '交换完成次数

                t2=a(i): a(i)=a(k): a(k)=t2           '交换编号

            End If

        Next j

    Next i

    For i=1 To n          '在列表框List2中输出排序结果

        Listt2. Addltem a(i)+" "+Str(b(i))

    Next i

End sub

返回首页

试题篮