1. 某单位拟进行人事招聘,根据“笔试”和“面试”成绩计算最后名次。规则如下:

记录各个考生的笔试和面试得分,根据得分分别计算笔试和面试的名次(得分越高排名越前,得分相同,名次也相同);再根据笔试和面试的名次计算总分(总分=笔试名次+面试名次);最后计算总分的名次(总分越低排名越前,得分相同,名次相同)。程序设计过程中,为节省内存,尽可能少使用数组,编程实现上述功能:窗体加载时,自动从数据库读取考生的笔试和面试得分,显示在列表框 List1 中;在文本框 Text1 中输入录取人数 n,单击“统计”按钮 Command1,在标签 Label1、Label2 和 Label3 中分别输出笔试、面试、总分前 n 名的考生编号。程序运行界面如图所示。

(1) 根据评比规则和图中数据,1号考生的两项竞赛的总分是
(2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

Const n = 9

'数组 xh、df 和 mc 分别存储选手编号、得分和名次;df 数组的 1~n 元素存储笔试相关数据;n+1~2n 元素存储对应选手的面试相关数据;2n+1~3n 元素存放两项考试总分相关数据

Dim xh(1 To n * 3) As Integer, df(1 To n * 3) As Integer, mc(1 To n * 3) As Integer

Dim i As Integer, j As Integer, t As Integer

'本过程从数据库读取各选手的选手编号、得分数据,分别存储在数组 xh、df 中

Private Sub Form_Load( )

List1.Clear

 List1.AddItem "选手" + " " + "笔试" + " " + "面试"

 For i = 1 To n

   xh(i) = i: xh(n + i) = i

 Next i

 For i = 1 To n

   List1.AddItem Str(xh(i)) + " " + Str(df(i)) + " " + Str(df(n + i))

 Next i

End Sub

Private Sub Command1_Click()

 Dim c As Integer

 c = Val(Text1.Text)

 Label1.Caption = "笔试前" & Str(c) & "名:" & pm(1, n, c, False)

 Label2.Caption = "面试前" & Str(c) & "名:" & pm(n + 1, 2 * n, c, False)

 For i = 1 To n

   xh(2 * n + i) = i: df(2 * n + i) = 0: mc(2 * n + i) = 0

 Next i

 For i = 1 To 2 * n

   df(2 * n + xh(i)) = df(2 * n + xh(i)) + mc(i)

 Next i

 Label3.Caption = "总分前" & Str(c) & "名:" & pm

End Sub

Function pm(ks As Integer, js As Integer, num As Integer, fx As Boolean) As String

 For i = ks To js - 1

   For j = js To ks + 1 Step -1

   If (fx And df(j) < df(j - 1)) OrThen

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

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

   End If

   Next j

 Next i

 mc(ks) = 1: pm = Str(xh(ks))

 For i = ks + 1 To js

   If df(i) = df(i - 1) Then

     

   Else

     mc(i) = i - ks + 1

   End If

 If mc(i) <= num Then pm = pm & "," & Str(xh(i))

 Next i

End Function

【考点】
运算符、基本运算与表达式; 过程与自定义函数; 排序算法及程序实现; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 校服烘干。五校联考要求学生统一穿校服参加,但是不幸的是,考试前所有考生的校服全都打湿了。一件衣服在自然条件下用一秒的时间可以晒干a点湿度。现在学校里有且仅有一台烘衣机,且目前烘衣机全部断货(即无法购入新机器)使用用一秒烘衣机可以让一件衣服额外烘干b点湿度(一秒晒干a+b湿度),但在同一时间内只能烘一件衣服。现在有n件衣服,第i衣服的湿度为w(i)(保证互不相同),要你求出弄干所有衣服的最少时间(湿度为0为干)。编写VB程序,实现上述功能。运行程序,显示窗体From1,在文本框Text1输入衣服总数n,在文本框Text2中输入a,在文本框Text3中输入b,在文本框Text4中输入各件衣服的湿度(共n个数据,数据与数据使用空格隔开),点击命令按钮Command1后,在标签Label1中显示弄干所有衣服的最少时间。程序运行界面如图所示。请回答下列问题:

(1) 若要使程序运行时,命令按钮Command1上显示为“计算”,可以在事件处理过程中添加语句Command1.Caption="计算"。(单选,填字母:A .Form_Load/B .Form1_Load/C .Command1_Click/D .Form1_Start)
(2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

Const maxn = 500005

Dim n As Long, a As Long, b As Long

Dim f(1 To maxn) As Long

Dim i As Long, tby As Long

Private Sub Command1_Click()

    tby = 1

    n = Val(Text1.Text) : a = Val(Text2.Text) : b = Val(Text3.Text)

    For i = 1 To n

        f(i) = Getin()

    Next i

    Dim l As Long, r As Long, m As Long

    l = 0: r = n

    Do While l <= r

        m = (l + r) / 2

        If Then

            r = m - 1

        Else

            l = m + 1

        End If

    Loop

    Label1.Caption = Str(r + 1)

End Sub

Function check(x As Long)

    Dim y As Long

    y = x

    For i = 1 To n

    Dim tmp As Long

   

    If tmp > 0 Then

        If y < 0 Then

            check = True

            Exit Function

        End If

    Next i

    check = False

End Function

Function Getin() As Long

    Dim aaa As String

    aaa = Mid(Text4.Text, tby, 1)

    If aaa = " " Then tby = tby + 1

    aaa = Mid(Text4.Text, tby, 1)

    Dim bbb As Long

    bbb = 0

    Do While aaa <> " " And tby <= Len(Text4.Text)

        bbb = bbb * 10 + Val(aaa) : tby = tby + 1

        aaa = Mid(Text4.Text, tby, 1)

    Loop

    Getin = bbb

End Function

(3) 程序中加框处代码有错,请改正。
综合题 困难
3. 某日期加密授权码生成方法描述如下:

⑴授权码由10位字符组成,前8位为日期的密文,后2位为验证码;

⑵取日期的第1位字符,若该字符第一次出现,则直接取其对应加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;

⑶求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为“X”。取出验证码重复时,处理规则与(2)相同。加密(验证码)字符对应表如下:

(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密

(验证码)

字符

K

n

G

j

L

t

W

b

O

a

P

H

Z

q

Y

c

小明设计了一个生成8位日期(YYYYMMDD格式)授权码的VB程序。程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成授权码”按钮Command1,在标签Label2中显示出该日期的授权码。运行效果如图所示。实现上述功能的VB程序段如下:

(1) 请在划线处填入合适代码:

Dim f(0 To 15) As Integer

Const Code = “KnGjLtWbOaPHZqYc”

Private Sub Command1_Click()

Dim rq As String, sq As String

Dim c As Integer, i As Integer, d As Integer

For i = 0 To 15

 f(i) = 0

Next i

rq = Text1.Text

sq=“”:d = 0

If Len(rq) <> 8 Then

 Label2.Caption =“请输入8位日期!”

Else

 For i = 1 To 8

 c = Val(Mid(rq, i, 1))

 d = d + c

 sq =+sq

Next i

If d >= 16 Then

 yz = GetChar(d Mod 16 + 1) + GetChar(d\16 + 1)

Else

 yz = GetChar(d Mod 16 + 1) + “X”

End If

Label2.Caption = sq + yz

End If

End Sub

‘获取不重复的加密字符

Function GetChar(x As Integer) As String

Dim flag As Boolean

flag = False

Do While flag = False

 f(x) = f(x) + 1

 If f(x) = 1 Then

 

  f(x) = f(x) + 1

  flag = True

 Else

  x = (x + 1) Mod 10

 End If

Loop

End Function

(2) 若输入的日期是“20170818”,则该授权码的验证码字符是
综合题 普通