题目

编写一个成绩查找程序,只要输入成绩,即可输出其排名、同分数的人数以及比此分高的人数。具体算法思路如下:⑴预处理。用数组a存放不同的分值,数组b存放相同分数的人数,数组s存放高于此分数的人数,数组下标表示名次。依次从数据库读取每个学生的成绩(数据库中每个学生的成绩已降序存储,即从高到低排列),当读入数与前一个数相同时,该名次的人数加1,当读入数与前一个数不同时,名次加1,即数组下标加1,存储当前分数,求高于本分数的人数并存储。举例:如果数据库中有一组成绩(降序):95,95,93,93,92,91,90,按上述算法处理,三个数组的最终结果如图所示。数组/下标12345a9593929190b22111s02456⑵对需要查找的成绩二分查找。读入需要查找的成绩x,在数组a中二分查找成绩,若找到,输出名次、相同分数的人数和高于本分数的人数;若找不到,输出“查无此分”。程序代码如下,在横线处填入合适的代码。Dim rank As IntegerDim a(1 to 1000) As Integer     ‘存放不同的分数值Dim b(1 to 1000) As Integer     ‘存放相同分数的人数Dim s(1 to 1000) As Integer     ‘存放高于此分数的人数rank=0Private Sub Form_Load() Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim tmp As Integer, n As Integer tmp=-1: n=0 conn.ConnectionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=“App.Path+”Score.accdb” conn.open Set rs.ActiveConnection=conn rs.open “Select * from score” n=0 Do While Not rs.EOF   n=n+1   mark=rs.fields(“成绩”)   If mark=tmp Then      ‘当前读入分数与上一个分数相同,则对应名次的人数增加1  b(rank)=b(rank)+1   Else     ‘当前读入分数与上一个分数不同时    rank=    ‘名次增加1    a(rank)=   ‘存储当前分数到数组a中    s(rank)=   ‘求高于本分数的人数并存储至数组s    b(rank)=1     ‘将自身统计入同分人数   End If        ‘更新上一个分数  rs.Movenext LoopEnd SubPrivate Sub Command1_Click()  Dim x As Integer, low As Integer, high As Integer, mid As Integer  x=Val(Text1.Text)  low=1: high=rank  mid=(low+high)\ 2  Do While low <=high and     mid=(low+high)\ 2    If a(mid) < x Then      high=mid-1    Else      low=mid+1    End If  Loop  If a(mid)=x Then    Label1.Caption=“名次:“+mid+”同分人数:“+b(mid)+”高于此分人数:”+s(mid)  Else    Label1.Caption=“查无此分”  End IfEnd Sub 答案:【1】rank+1【2】mark【3】n-1 或b(rank-1)+s(rank-1)【4】tmp=mark【5】a(mid)<>x
信息技术 试题推荐
最近更新