1. 为分析数据中各元素的变化情况,进行如下定义:若在数组d中满足d[a]<...<d[i-1]<d[i]>d[i+1]>...>d[b],则从下标a到下标b区间的数据称为一个波峰,下标a到b的距离即为一个波峰的长度(长度≥3)。例如:数组d元素为“78,46,50,37,5,42,6,6,23”,存在2个波峰,分别是从d[1]到d[4]和d[4]到d[6],波峰长度分别为4和3。

编写程序分析数据,找出所有波峰,按波峰长度降序排序(若波峰长度相同,则按开始下标升序),并输出波峰长度和开始到结束元素下标;若不存在,则输出“不存在波峰”,运行结果如图所示。

请回答下列问题:

(1) 根据题意,若数组d元素“23,14,35,31,13,20,3,40,10,10,9”,则最长的波峰长度为
(2) 执行该程序,若数组d元素为“2,1,1,2”,则A处while语句中循环体的执行次数是
(3) 实现上述功能的程序代码如下,请在划线处填入合适的代码。

#读取待处理数据,保存在数组 d 中,并显示输出,代码略

mt,i,n=[],1,len(d)

while i<n:

    while i<n and d[i]<=d[i-1]:    #A

        i+=1

    st=i-1

    while i<n and d[i]>d[i-1]:

        i+=1

    if:

        continue    #跳出本轮循环,然后继续进行下一轮循环

    while i<n and d[i]<d[i-1]:

        i+=1

    ln=i-st

    if len(mt)==0:

        mt.append([ln,st,-1])    #为 mt 追加一个列表元素

        head=0;q=head

    else:

       

        while p!=-1 and :

            q=p

            p=mt[p][2]

        if p==head:

            mt.append([ln,st,head])

            head=len(mt)-1

        else:

            mt.append([ln,st,p])

           

if len(mt)==0:

    print("不存在波峰")

else:

    print("输出结果(长度:开始下标~结束下标):")

    p=head

    while p!=-1:

        print(mt[p][0],":",mt[p][1]," ~",mt[p][0]+mt[p][1]-1)

        p=mt[p][2]

(4) 使用以下代码替换加框处代码,可以减少链表mt遍历次数的是       (单选,填字母)。 A. if mt[q][0]>ln:

    p=mt[q][2]

else:

    p=head

B. if mt[q][0]<ln:

    p =mt[q][2]

else:

    p=head

【考点】
常见数据类型、数组; 排序算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 某会务组根据参会者到达指定上车点时间和每位参会者可以等待的时间信息,安排车辆接送参会者去宾馆(不考虑车子座位数量)。参会者到达上车点的时间和可以等待的时间用长度为7的字符串表示,例如“08:12 2”表示参会者当天8点12分到达上车点,最多等待2分钟(每个人的等待时间都小于10),那么该参会者最晚8点14分出发去宾馆。

编写VB程序,统计接送n个参会者所需的最少车辆数。运行程序,列表框List1中显示所有参会者提交的信息,按到达时间先后排列。单击“统计”按钮Command1,在文本框Text1 中显示所需的最少车辆数。程序运行界面如图所示。

(1) 如图所示,接送所有参会者最少需要辆车
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Dim n As Integer

Dim a(1 To 100) As String

Dim b(1 To 100) As Integer

Dim c(1 To 100) As Integer

Dim fg(1 To 100) As Boolean

Private Sub Form_Load()

    '读取n个参会者提交的信息,依次存入a(1)~a(n)

    '将a(1)~a (n)按参会者到达时间排序,并在List1中显示,代码略

End Sub

Private Sub Command1_Click()

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

    Dim sum As Integer, q As Integer

    For i=1 To n

        b(i) = T(Mid(a(i), 1, 5))

        c(i) = b(i) + Int Mid(a(i), 7, 1))

        For j=1 To 2 Step-1

            k=

            If c(k) > c(j) Then

                q=b(k):b(k)=b(j):b(j)=q

                q=c(k):c(k)=c(j):c(j)=q

            Else

                Exit For

            End If

        Next j

    Next i

    sum=0

    For i=1 To n

        If fg(i) = False Then

            For j=1 To n

                If  Then

                    fg(j) = True

                End If

            Next j

            

        End If

    Next i

    Text1.Text = str (sum)

End Sub

Function T(str1 As String) As Integer

    T = Int(Mid(str1,1, 2)) * 60 + Int(Mid(str1, 4, 2))

End Function

综合题 困难
2. 某学校开展了艺术节活动,数组a中存储了n个节目的编号和得分数据,数组存储结构如下图所示:

小明使用选择排序思想对上述n个节目按得分进行降序排序(得分相同的按编号升序排列),并依据得分插入各个节目的排名信息,处理后数组a的存储结构如下图所示:

程序运行时,单击命令按钮Command1后读取数据到数组a中并显示在列表框List1中,单击命令按钮Command2后将节目按照上述规则进行排序,并将排名结果显示在列表框List2中。实现上述功能的VB程序如下,请回答下列问题:

(1) 已知窗体名称为Form1,要使程序加载时,窗体标题自动显示为“第15题程序”,则可在(单选,填字母:A .Form_ Click() / B .Form Load() / C .Form1_ Click() / D .Forml_ Load()) 事件过程中添加代码: Form1. Caption= "第15题程序"。
(2) 请在划线处填入合适的代码。

Const n = 20

Dim a(1 To 3 * n) As Integer

Private Sub Command1_Click ()

    ‘读取数据,存储在数组a中,并显示在列表框List1中。代码略

End Sub

Private Sub Command2_Click ()

    

        k=i

        For j=1 To i-1

            If a(2*j) < a(2*k) 0r  Then

                k=j

            End If

        Next j

        a(3*i)=a(2*k)

        a(3*i-1)=a(2*k-1)

        

        a(2*k-1)=a(2*i-1)

    Next i

    List2. AddItem "第1名:编号”+ CStr(a(2)) + ",分数”+ Str(a(3))

    a(1) =1

    mc=1

    For i=2 To n

        If  Then mc=i

        List2. AddItem "第"+ Str(mc) + "名:编号" + CStr(a(3* i-1)) +",分数"+Str(a(3 * i))

        a(3*i-2)=mc

    Next i

End Sub

(3) 加框处代码有误,请改正。
综合题 困难
3. 小明编写了一个矩阵转换程序,功能如下:单击“生成”按钮Command1后,在列表框list1中生成1-16顺序矩阵,单击“转换”按钮Command2后,在列表框.list2中生成转换后的矩阵。

转换的算法如下:

1)改变列的位置:原矩阵第3列变为新矩阵的第1列,原矩阵第1列变为新矩阵第2列,原矩阵第4列变为新矩阵第3列,原矩阵第2列变为新矩阵第4列。

2)改变行的位置:经过(1)处理后的矩阵的第1行和第4行交换,第2行和第3行交换。实现上面的功能,程序运行界面如图所示。

(1) 程序执行后,点击转换按钮,在列表框List2中显示转换后的矩阵。再次点击转换按钮后,列表框List2中仅显示重新转换后的矩阵,则应在Com-mand2_ Click( )事件过程中添加语句(单选,填字母:A .Text2. Text=“”/B .List2. AddItem“”/C .List2. Clear)
(2) 实现上述功能的程序如下,请在程序划线处填入合适的语句或代码。

Dim sc(1 To 16) As Integer

Dim zh(1 To 16) As Integer

Private Sub Command1_ Click( )

    '在列表框list1中生成4*4矩阵sc,代码略

End Sub

Private Sub Command2_Click( )

    Dim pb As Integer, tmp As Integer, i As Integer, line As String

    For i=1 To 16     '变化列

        If i Mod 4=1 Then

            

        ElseIf i Mod 4=3 Then

            pb=i-2

        Else

            pb=pb+2

        End If

        zh(pb)= sc(i)

    Next i

    For i=1 To 8     '交换行

        If  Then

            tmp=zh(i) : zh(i)=zh(i+12) : zh(i +12)= tmp

        Else

            tmp=zh(i) : zh(i)=zh(i+4) : zh(i+4)= tmp

        End If

    Next i

    line= ""

    List2. Clear

    For i=1 To 16

        If i Mod 4=1 Then

            List2. AddItem line

            line= adj(Str(zh(i)), 3)

        Else

            

        End If

    Next i

    List2. AddItem line

End Sub

Function adj(a As String,n As Integer) As String

    'adj 函数的功能:在字符串a前加入适当的空格,使得a的程度为n位,代码略。

End Function

综合题 困难