阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。 应用说明 某单位举办了一场知识竞赛,有300名选手参加竞赛,依次从1~300为选手编号。竞赛时间为9:00~11:00。8道竞赛题目依次从“A”~“H”

admin2007-03-15  51

问题 阅读以下应用说明及Visual Basic程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
应用说明
   某单位举办了一场知识竞赛,有300名选手参加竞赛,依次从1~300为选手编号。竞赛时间为9:00~11:00。8道竞赛题目依次从“A”~“H”编号,选手可按任意次序答题,每完成一道题目,可立即提交答案。若答案正确(Y),则选择其他题目进行解答,否则,可继续做该题目或选择其他题目进行解答,直至竞赛结束。
   选手提交答案的情况及判定结果由专人即时录入,录入数据包括提交答案的时间、选手编号、题目编号(A~H)、是否正确(Y/N)。
   对竞赛情况进行统计和排名的规则如下:
   1.若选手X在竞赛时提交的题目P解答正确,则解答该题目所用时间如下计算:
   解答题目P的用时=提交题目P正确的时间-竞赛的开始时间+罚时
   罚时;提交题目P错误解答的次数×20
   例如:设14号选手在10:27提交了题目A的正确解答,则该选手正确解答该题目所用时间为87分钟,由于他在09:37和09:52两次提交了题目A的错误解答,因此罚时为2×20=40分钟,所以14号选手解答题目A的用时=87+40=127(分钟)。
   2.已经提交正确答案的题目再次提交时不再计算。
   3.竞赛结束时,选手的总用时为所有解答正确的题目用时累加所得,解答不正确的题目不计时。
   4.排名时,完成题目数量多者排名靠前;若完成的题目数相同,则用时少者排名靠前:若完成的题目数和所用时间均相等,则名次相同;完成题目数为0的选手不参加排名。
   本应用程序的运行窗口如下图所示:
  
   窗口中的两个文本框为Txt_time和Txt_player,分别用于录入提交答案的时间和选手编号。组合列表框Combol提供题目编号(A~H),录入时从中选择。检查框Chk yn用于输入解答是否正确信息。当单击“确定”按钮(Cmd_comfirrn)时,录入的提交信息加入组合列表框Listl中,排名情况在列表框List2输出。单击“关闭”按钮时退出应用程序。
   在开发过程中,需要编写的部分程序代码如下:程序代码
   Private Tyve Info
   no As Integer    ’选手编号
   hum As Integer    ’完成的题目数量
   time As Integer    ’完成题目的总用时
   d(8) As Integer    ’d用于记录提交第i个题目错误答案的次数
   a(8) As Boolean    ’aC用于记录第i个题目是否已经提交正确答案
   End Type
   Dim R(301) As Info    ’R[j]用于统计编号为j的选手提交答案的情况
   Dim Maxlndex As Integer  ’MaxIndex记录提交答案的选手中编号最大者
   Private Sub Form_Load()
   For i=1 To 8
   Combol.Addltem Chr(  (1)  )
     Next
     Combol.Text = Combol.List(0):  Txt_time. Text= "":  Txt_player. Text= ""
     For i = 1 To 300
        R(i).num=0:    R(i).time = 0:     R(i).no = I
        Forj = 1 To 8
          R(i).d(j) = 0:     R(i).a(j) = False
        Next j, i
   End Sub
   Private Sub Crud_confirm_Click()
     Dimh, m, k, time As Integer, ch, pass, sl As String
     k = InStr(Txt_time.Text, ":"):  If k < 2 Then GoTo errorl
     h = Val(Left(Txt_time. Text, k - 1 )):  m = Val(Mid(Txt_time. Text, k + 1 ))
     Ifh > 11 Or h = 11 And m > 0 Or m >= 60 Then GoTo errorl
     time=(2)    ’计算答题时间,以分钟为单位
     If Txt player. Text < 1 Or Txt_player. Text> 300 Then GoTo errorl
     ch=(3)      ’取题目编号
     pass = llf(Chk_yn.   (4)= 0, "N", "Y")
     s1 = Txt__time. Text+ Space(4)+ Txt_player. Text
   s1 = s1 + Space(10 - Len(Txt_player. Text))+ ch + Space(8) + pass
     Listl .Addltem s1
     k = Val(Txt_player. Text)      ’k为选手编号
     R(k).no = k             ’编号为K的选手的提交信息记录在下标在K的数组元素中
      If k > Maxlndex Then Maxlndex = k
      m = Asc(ch) - Ase("A")
      Ifpass <> "Y" Then        ’编号为K的选手提交第m个题目的解答不正确
          R(k).d(m) = R(k).d(m) + 1
      Elself R0(k).a(m) <> True Then ’已经提交正确的题目的解答不再计算
          R(k).a(m) = True:     R(k).num = R(k).num + I
          R(k).time = R(k).time +(5)  
          Call Statistic          ’调用过程 Statistic 进行实时排名和输出
      End If
      Exit Sub
   errorl:  MsgBox "录入信息有误!", vbOKOnly
    End Sub

选项

答案(1)Asc("A")+i-1,或64+i,及其等价形式 (2)(h-9)*60+m,及其等价形式 (3)Combol.Text (4)Value (5)time+R(k).d(m)*20 其中m可表示为Asc(ch)-Asc("A")或Asc(ch)-65,k可表示为R(R(k).no)

解析 本题考查的是Visual Basic中常用控件、基本函数的使用和基本的程序设计能力。
   由于题目编号是确定的,输入时,题目编号将在组合列表框中进行选择。因此,下
面的代码将题目编号预先加入组合列表框。
   Fori=1 To 8
      Combol.Addltem ChrL(  (1)  )
   Next
   所以空(1)处应填入“Asc(”A”)+i-1”或“Asc("a")+i-1)”,根据程序中的注释和计算题目号m的语句“m=Asc(ch)-Asc("A")”可知,组合框中应填入大写字母。
   以h:m表示竞赛选手提交解答的时间时,根据注释,空(2)处用于计算以分钟为单位的答题时间。用提交时间减去竞赛开始时间,就是解答一个题目所用的时间,即空 (1)处填入:(h-9)*60+m。
   当在组合框中选择了某个数据项时,属性Text表示当前选中的数据项内容,因此根据ch在运算中所起的作用,空(3)用于取在组合框中选择的题目编号,应填入“Combol.Text”。
   复选框的属性Value,其值为0表示未选中(默认),1表示选中,2表示禁用。在这里,复选框(检查框)Chk_yn的Value属性值等于0表示解答错误,为1表示解答正确,因此空(4)填入“Value’。
   已正确解答的题目总用时,由解答用时和罚时两部分组成。显然,空(5)所在语句用于累计已正确解答的题目的总用时,因此填入“time+R(k).d(m)*20”或其等价形式。
转载请注明原文地址:https://kaotiyun.com/show/qzjZ777K
0

最新回复(0)