1. 高一年级开展“7选3”选科调查,现要求每位学生在预选卡上填写个人信息(班级、学号、姓名)并选涂三门选考科目(少于或多于三门的预选卡作废)。如小王预选组合是“物生技”其三门选考科目填涂情况如图a所示。预选卡回收后,通过读卡机将相关信息读入数据库中,其中选科信息存储规则:按照“政治、历史、地理、物理、化学、生物、技术”顺序存储为一个7位二进制字符串。因此小王的选科信息二进制编号存储为“0001011”。

为了了解选科预选情况,统计选科组合种类及每种组合人数。小王设计并制作了VB程序。运行该程序,单击“读取”按钮,从数据库中读取信息并显示在列表框List1中;单击“统计”按钮,在列表框List2中显示每种选科组合人数(无人选择的组合不显示)及选科组合种类。程序运行界面如图b所示。

(1) 若某个学生“7选3”的预选选科组合为“政史生”,则该选科组合对应的+进制编号为
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim cla(1 To 1000) As Integer    ‘班级号

Dim snum(1 To 1000) As String    ‘学号

Dim sname(1 To 1000) As String    ‘姓名

Dim xinxi(1 To 1000) As String    ‘选科信息二进制编号

Dim xknum(1 To 127) As Integer    ‘各选科组合人数

Dim n As Integer

Private Sub Command1_Click()

    ‘从数据库中读取n名学生的班级、学号、姓名和选科信息分别存储在数组cla、snum、sname和xinxi中,并输出在列表框List1中,代码略。

End Sub

Private Sub Command2_ Click ( )

    Dim t As Integer, i As Integer, count As Integer

    For i=1 To n

        t = BtoD(xinxi(i))

        

    Next i

    count = 0

    For i=127 To 1 Step-1    ‘选科组合十进制编号的范围

        If  Then

            count = count + 1

            List2.AddItem change(i) +””+ Str (xknum(i)

        End If

    Next i

    List2. AddItem“选科组合种类共有:”+ Str (count) + “种”

End Sub

Function BtoD(s As String) As Integer    ‘将选科信息二进制编号转换为十进制编号

    Dim x As Integer, i As Integer

    x=0

    For i=1 To 7

        If Mid(s,i,1) = “1” Then

            x=

        End If

    Next i

    BtoD = x

End Function

Function change(c As Integer) As String

    ‘该函数的功能是将选科十进制编号转换成对应的组合名称,代码略。

End Function

【考点】
过程与自定义函数;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 决策树是一种通过树形结构进行分类的人工智能预测模型,如根据图1所示“气象特点与游客是否来游乐场的关系”绘制的图2所示的决策树树形结构:

图 1

图 2

通过了解当天的是否有风、天气、温度和湿度这4个节点参数即可预测当天是否有人来游乐场。不同的节点划分顺序可以绘制不同的决策树,为了选出最优的节点划分顺序,需要采用“信息熵”与“信息增益”指标。

信息熵,又称香农熵,被用来度量信息量的大小,信息熵越大表示信息量越大;

信息增益,表示样本经某节点划分后的信息熵变化大小。我们绘制决策树时应当逐次选择信息增益最大的节点作为当前节点。

对于有n个信息的样本D,记第k个信息发生的概率为𝑝𝑘,信息熵计算公式为E(D)=− ∑𝑛 𝑝𝑘𝑙𝑜𝑔2(𝑝𝑘)

例如游乐场14个样本中“去”(9个)、“不去”(5个),则信息熵

若样本按“是否有风”节点划分,“是”(6个,其中3个去,3个不去)信息熵=

“否”(8个,其中6个去,2个不去)信息熵= =0.811;经过此节点划分后的信息增益=原始信息熵−按此节点划分后样本信息熵比例和

(1) 根据上述描述与题图1,则“天气”节点中的“多云”信息熵是
(2) 实现求首次划分节点的程序如下,请在划线处填入合适的代码:

def cal(lst):    #计算样本 lst 的信息熵

x,y,z=0,len(lst),0    #x表示该样本信息熵,y表示该样本数量,z表示某信息发生的概率

    num={}

    for i in lst:

        if i not in num:

            

        num[i]+=1

    for k in num:

        z=num[k]/y     #计算该信息发生的概率

        x-=z*log(z,2)     #根据公式计算信息熵,log(b,a)等价于 logab

    return   x def check(x,y): 

#根据节点x,对样本 y 进行划分,返回示例:{'否': [1, 1, 0, 0, 1, 1, 1, 1], '是': [1, 1, 0, 1, 0, 0]},代码略

dic={'是否有风': ['否', '否', '否', '否', '否', '否', '否', '否', '是', '是', '是', '

是', '是', '是'], 

'天气': ['多云', '多云', '晴', '晴', '晴', '雨', '雨', '雨', '多云', '多云', '晴', '晴', '雨', '雨'], 

'温度': [28, 27, 29, 22, 21, 21, 20, 24, 18, 22, 26, 24, 18, 21], '湿度': [78, 75, 85, 90, 68, 96, 80, 80, 65, 90, 88, 63, 70, 80], 

'是否前往': [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]} xm=list(dic.keys())

entropy=cal(dic[xm[-1]])  #调用函数计算样本原始信息熵 entropy #计算各节点信息增益

m=0;p=""

col=xm[:-1]     #“是否前往”是结果项,不参与计算

for i in col:

    size=len(dic[i]);entropy_1=0

    zyb=     #调用函数对样本 dic 按照当前节点进行划分

    for j in zyb:      #根据划分情况逐个求子样本信息熵并按比例累加

        entropy_1+=len(zyb[j])/size*cal(zyb[j])

    zy=entropy-entropy_1

    print(i,"的信息增益:",zy)

    if zy>m:     #计算最大信息增益与信息增益最大的节点

        m=zy

         

print("信息增益最大的节点:",p)

综合题 困难
2. 找出一个随机数列(长度为n)中的最长非降序段,计算其长度。非降序段中如果存在连续相等的数,则忽略,如非降序段2,3,4,4,5,长度计为4。

编写如下VB程序,实现上述功能。运行程序,在文本框Text1中输入随机数列“19,21,3,5,18,18,18,23,25,10,11,12,17,17,7”,单击“统计”按钮,在文本框Text2中输出5。

程序运行界面如图所示。

(1) 观察程序界面,窗体中至少包含个对象。
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim a(1 To 100) As Integer     '数组a依次存放数列中的数Dim n As Integer

Private Sub Command1_Click( )

    Dim i As Integer, k As Integer, max As Integer, t As Integer Dim s As String, ch As String

    s = Text1.Text n = Len(s)

    i = 1: k = 1

    Do While i <= n

        ch = Mid(s, i, 1)

        If ch <> "," Then  Else k = k + 1 i = i + 1

    Loop

    i = 1: max = 0

    Do While i <= k

        t =

        If t > max Then max = t i = i + t

    Loop

    Text2.Text = Str(max)

End Sub

Function length(p As Integer) As Integer        '函数功能是计算a(p)开始的非降序段长度

    Dim j As Integer, c As Integer

    j = p: c = 1

    Do While j <= n – 1

        If  Then

            If a(j) < a(j + 1) Then c = c + 1 Else

            Exit Do

        End If

        j = j + 1

    Loop

    length = c

End Function

(3) 程序加框处代码有错,请改正。
综合题 普通