2.4 可以复用的代码 知识点题库

给定一个数组(有n个元素),小李通过边分段、边合并的方式将n个数据处理成一个非降序数据段(a(1)≤a(2)≤a(3)≤……≤a(n)),每一轮数据处理方法如下:

⑴查找相邻两个非降序数据段在未处理的数据区域中,从前往后找出第一个最长非降序数据段。若该数据段后而没有元素,则本轮处理完毕;否则在第1个数据段的后面,从前往后找出数组中第二个最长非降序数据段。

⑵合并两个数据段

借助数组tmp,将查找到的两个相邻数据段合并成一个非降序数据段,然后将合并后的数据依次存回到原数组中。

⑶若数组中还有未处理的数据,则重复⑴⑵步骤。

每一轮数据处理完毕后,重新从数组第1个数据开始进行下一轮处理。若检测到某一轮没有合并处理,则说明n个数据己构成非降序数据段,数据处理结束。

  1. (1) 根据上述描述,若数组各元素为“3,9,7,6,8,2,1,5,7,4”,则第一轮合并处理完成后,数组中的数据依次是: (用“,”间隔)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Const n As Integer = 10

    Dim a(1 To n+5) As Integer

    Dim tmp(1 To n + 5) As Integer

    Private Sub Form_Load())

    ‘读取n个整数保存到数组a中,并在文本框Textl中显示,代码略。

    End Sub

    Function Position(low As Integer) As Integer

        Dim i As Integer

        For i=low To n-1

            If   ①     Then Exit For

        Next i

        Position=i

    End Function

    Then Exit For

    Function Merge() As Boolean

        Dim i As Integer, flag As Boolean, p1 As Integer, p2 As Integer

        Dim low1 As Integer, high1 As Integer, high2 As Integer

        flag=False:low1=1

        Do While lowl1<n

            High1=Position(low1)

            If high1=n Then Exit Do Else flag=True

            high2=Position(high1+1)

            p1=low1:p2=high1+1

            i=low1

            Do While   ② 

                If p2>high2 Or p1<=high1 And a(p1)<a(p2) Then

                    tmp(i)=a(p1):p1=p1+1

                Else

                    tmp(i)=a(p2):p2=p2+1

                End If

                i=i+1

            Loop

            For i=low1 To high2

                a(i)=tmp(i)

            Nexti

               ③  

        Loop

        Merge=flag

    End Function

    Private Sub Command1_Click()

        Do While True

            If Not Merge() Then Exit Do

            ‘’在列表框List1中输出这一轮合并后的数据,代码略。

        Loop

    End Sub

     ② ③ 

下面是随机点名器的代码设计,大致可分为四个模块。一是导入相应模块,二是窗体界面元素的产生及布局和有关属性设置,三是打开“点名册.txt”,读取并保存姓名数据,四是设计两个按钮的单击事件代码。以下是部分代码,认真阅读,补充完成下列程序。

from           #导入tkinter模块

import tkinter.messagebox           #导入弹窗库模块

import random                       #导入随机数模块

import datetime                     #导入日期时间模块

root = Tk()                         #创建主窗口

root.title("随机点名器")            #设置窗口标题

root.geometry('808x280+300+200')    #设置窗口大小及位置

root.resizable(0,0)                 #禁止调整窗口大小

var=StringVar()                     #定义StringVar()类型

var1=StringVar()

c=("点名册.txt",'r')          #以只读模式打开文件

a=c.readlines()                     #读取文件全部内容

c.                      #关闭文件

b=[]                                #b作为列表a的备份

某字符(限ASCII字符)加密算法,对明文中的每个字符进行下列加密处理:

1)将该字符的ASCII码转换成对应的2位十六进制数;

2)将产生的十六进制数互换位置;

3)步骤2)产生的二位十六进制数即为该明文字符加密后的密文字符。

小明按照上述方法,设计了一个字符串加密的VB程序,功能如下:单击“生成密文”按钮Command1,程序依次将文本框Text1中每个字符按上述规则进行加密处理,连接这些加密字符,最后在文本框Text2中输出加密结果。程序运行界面如图所示。

实现上述功能的VB程序如下:

  1. (1) 按照上述加密算法,明文“B”生成的密文是
  2. (2) 实现上述功能的VB程序如下,请在横线处填入合适代码。

    Private Sub Command2_Click()

    Dim s As String, a As String, ans As String

    Dim c As Integer, i As Integer

    Dim s1 As String

    s=Text1.Text

    ans=” ”

    For i=1 To Len(s)

    a=Mid(s, i, 1)

    s1=

    ans=

    Next i

    Text2.Text=ans

    End Sub

    Function DToh(x As Integer) As String

    Dim str As String

    str=”0123456789ABCDEF”

    Do While x <> 0

    t=x Mod 16

          x=x \16

    Loop

    End Function

有如下VB程序段,执行该程序段后,Text1中显示的值为(  )

Function f(n As Integer)As Integer

  If n<=1 Then

      f=1

  Else

      f=n*f(n-1)

  End If

End Function

Private Sub Command1_Click( )

  Text1.Text=Str(f(5))

End Sub

A . 10 B . 60 C . 120 D . 140
有如下VB程序段:

Private Sub Command1_Click( )

  Dimi As Integer, s As Integer

  s=0

  For i=1 To 3 Step 2

    s=s+f(i)

  Next i

  Text1. Text=Str(s)

End Sub

Function f(n As Integer) As Integer

  If n=1 Then

      f=2

  Else

      f=f(n-1)+n

  End If

End Function

执行该程序段后,s的值为(  )

A . 2 B . 7 C . 9 D . 13
(程序设计题)加密解密问题。小明设计了将明文字符(大、小写字母)转为密文字符的加密算法,加密过程如下:

步骤一:输入明文字符,将该字符转换成ASCII;

步骤二:将ASCII码转换成十六进制字符串;

步骤三:将产生的十六进制字符串进行头尾互换并输出。

若用Python程序实现上述加密过程,请回答下列问题:

  1. (1) 明文字符“A”经加密后得到的十六进制字符串为
  2. (2) hex(x)函数实现将十进制数转换成十六进制字符串,如hex(65)="0×41",为实现步骤一和步骤二,请利用函数完善下列代码。

    s=input("请输,入明文字符(大写字母或小写字母):")

    a=     #将字符转换为ASCII

    b=     #将ASCII码转换成十六进制字符串

  3. (3) (多选题)为实现步骤三,下列选项中不正确的是(    )
    A . B . C . D .
  4. (4) 上机调试实现上述加密过程,思考并完成解密过程。

    提示:int(x,16)函数实现将十六进制字符串x转换成十进制整数ASCII值。

random模块是一个。random.randint(1,10)语句作用
下列选项中,属于Python求函数长度的是(    )。
A . mix() B . print() C . float() D . len()
将字符型数据(整数或小数)转换成浮点数类型的函数名称是(     )。
A . print B . float C . int D . input
编写程序,实现从键盘输入数据,数据前三位的ASCII值加2,从第四位开始ASCII值加3.
有n个小组(编号1至n),每个小组有m个成员,每个成员都有一个大于等于0的得分。现要求按下列规则计算每个小组的成绩,并找出成绩最高的小组。

小组成绩的计算规则是:若小组成员中得分最高的前k人得分都不低于k,且其他成员得分都不超过k,则该小组成绩为k。例如,第1小组共有8个成员,得分依次为“5,2,7,11,8,6,5,1”,由此可知最高的前5人得分为“11,8,7,6,5”,其他3人得分为“5,2,1”,因此该小组成绩为5。

按上述要求,编写VB程序,功能如下:在列表框List1中显示各小组每个成员的得分,单击“计算”按钮Command1,在列表框List2中显示成绩最高的小组编号及成绩(如果有多个小组并列最高,则全部显示)。

  1. (1) 若第2小组各成员得分依次为“0,4,12,1,5,9,3,9”,则该小组的成绩是
  2. (2) 请在划线处填入合适的代码。

    Const n = 6

    Const m = 8

    Dim a(n * m)As Integer

    Dim c(m)As Integer,ans(n)As Integer

    Private Sub Form_Load( )

        ‘读取n个小组每个成员的得分,按组别从小到大依次存入数组a,并显示在List1中

         ‘n(1)到a(m)存储第1小组m个成员的得分

         ‘a(m+1)到a(2*m)存储第2小组m个成员的得分

         ‘以此类推,代码略

    End Sub

    Private Sub Cummand1_Click( )

        Dim i As Integer,p As Integer,g As Integer,maxg As Integer

        maxg = -1

        For i = 1 To n

            g = GroupScore(i)

            If g > maxg Then

                maxg = g: p=1

               

            ElseIf g = maxg Then

                p=p+1

                ans(p)=i

            End If

        Next i

        For i = 1 To p

            List2. AddItcm“第”+Str(ans(i))+“组,成绩:”+Str(maxg)

        Next i

    End Sulb

    ‘函数返回第w小组的成绩

    Function GroupScone(w As Integer)As Integer

        Dim i As Integer,k As Inteser

        For i = 0 To m

            c(i)=0

        Next i

        For i=(w-1)*m+1 To w *m

            k=a(i)

            If k > m Then

            c(k)=c(k)+1

        Next i

        k=m

        Do White c(k)< k And k>0

            k=k-1

           

        Loop

        GroupScore=k

    End Function

小明用Python语言写了一个货币兑换程序如下:

  1. (1) 参数currency指:
  2. (2) 该程序用了哪一种算法结构:
  3. (3) 输出结果为“50$= 325.25人民币”。则代码应该如何编写:
某字符转置算法描述如下:

·将字符串(均为大写字符)s依次转换为相对应的数值(字符A~Z对应数值1~26);

·转换后的数值以K个数据为一段,将n个待处理的数据依次分割成若干段(最后一段不足部分用0来补充);

·每一段中K个数据与K*K转置矩阵进行乘法运算;

·将乘法运算得到的每一个结果值除以26求余数,依次转换成相应字符(数值1~26对应字符A~Z),最后按原始字符串长度输出。

乘法运算规则如下:

第i个元素c(i) =第j个元素a(j) * 转置矩阵第i行第j个元素b(t)的乘积之和(其中j = 1 , 2 …K)

例如:字符串s = PYTHON,区块大小K = 4的转置过程如下:

  1. (1) 根据算法描述,上述示例中,字符“N”的相乘结果(即图中(★)处)为
  2. (2) 请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim a(1 To 100) As Integer    ‘存储字符串,长度不超过100个字符

        Dim b(1 To 100) As Integer    ‘存储转置矩阵,长度不超过10*10

        Dim c(1 To 100) As Long

        Dim s As String, tmp As String

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

        Dim n As Integer, m As Integer, lens As Integer

        s = Text1.Text    ‘在Text1中输入原始字符串

        k = Val(Text2.Text)     ‘在Text2中输入区块大小K

        Randomize

        For i = 1 To k ^ 2

            b(i) = Int(Rnd * 9) + 1

            tmp = tmp + Str(b(i))

            If i Mod k = 0 Then

                List2.AddItem tmp

                tmp = ""

            End If

        Next i

        lens = Len(s): n = lens

        For i = 1 To n

            tmp = Mid(s, i, 1)

           

            List1.AddItem Str(a(i))

        Next i

        Do While n Mod k <> 0

            n = n + 1

            a(n) = 0

            List1.AddItem Str(a(n))

        Loop

        For i = 1 To n

            m = (i -1) Mod k + 1

            t = 1

            For j =

                c(i) = a(j) * b((m -1)* k + t) + c(i)

                t = t + 1

            Next j

        Next i

        For i = 1 To n

            List3.AddItem Str(c(i))

        Next i

        s = ""

        For i = 1 To lens

           

            s = s + Chr(t + 64)

        Next i

        Text3.Text = s    ‘在Text3中输出转置后的字符串

    End Sub

下列VB语句可以产生10到99之间(包含10和99)随机整数的是(    )
A . Int(Rnd()* 100) B . Int(Rnd ()* 89 )+10 C . Int(Rnd ()* 90)+10 D . Int(Rnd()*91)+10
下面过程max()用于求3个数中的最大值,利用这个过程求5个数中的最大值,请填空。

Private Sub Command1_Click( )

    Print “5个数34、124、68、73、352的最大值是:”

    Max1 = max(34,124,68)

    Max1 =

    Print Max1

End Sub

Public Function max(ByVal a%,ByVal b%,ByVal c%)

    If   Then

        M = a

    Else

        M = b

    End If

    If  Then

        Max = m

    Else

       

    End If

End Function

以下程序执行后将输出100到200之间所有的素数,并统计素数的个数

 Private Sub Form_Click( )

    Dim i%, j%, k%, t%         't为统计素数的个数

    Dim b As Boolean

    For i = 100 To 200

        b = True

        k=

        j = Int(Sqr(i))

        Do While k <= j And b

            If i Mod k = 0 Then

                

            End If

            

        Loop

        if b=true then

            t = t + 1

            Form1.Print i

        End If

    Next i

    Print "t="; t

End Sub

实现大写字母转换为小写字母的函数是实现小写字母转换为大写字母的函数是
导入random模块后,随机产生一个[20,50)区间范围内的正整数的python语句是(    )
A . random.randint(20,50) B . random.random()*20+30 C . int(random.random()*30+20) D . random.rnitfom(20,50)
某学校某一年级共有m(偶数)个班级,在开展运动会期间,所有班级的学生随机站成一排并按位置顺序进行编号,已知共有n位同学。现要选取k位选手参加跳绳比赛,选取方法是:在排好的队列中选取连续的k位(k是偶数且k>=m)学生,要求每个班级至少有一位学生参加比赛,并且参赛的男生人数和女生人数相同。现要设计一VB程序,确定选取学生的起止位置,VB的部分界面如下图所示,加载窗体时,在List1中生成n个学生所处的位置和学生编号,其中位置就是学生所在队列中的位置,学生编号由两位数字构成,即班级+性别(0表示男生,1表示女生),在文本框Text1中输入抽取的学生的人数k,单击“抽取”按钮Command1,在列表框List2中显示满足条件的所有队列情况。

  1. (1) 若共有4个班级,学生排列的编号是11,21,30,11,40,41,30,21,20,10,11,20,31,40,若k=4,共存在种抽取方案。
  2. (2) 请在划线处填入适当代码。

    Dim s As String

    Dim i As Integer,sum As Integer

    Dim a(1 To 1000) As Integer

    Dim b(1 To 1000) As Integer

    Dim ton(1 To 6) As Integer      '存储选中队列中各个班级的人数

    Const m = 6

    Const n = 300

    Private Sub Form_Load()

        For i = 1 To n

            '随机生成n个学生编号显示在列表框List1中,并将学生的班级号和性别分别存储在数组a和b中

        Next i

    End Sub

    Private Sub Command1_Click()

        Dim j As Integer, k As Integer, tmp As Integer

        k=Val(Text1.text)

        For i = 1 To n – k + 1

            For j =

            If ton(a(j)) = 0 Then

                sum = sum + 1

           

            End If

            If xb(b(j)) = False Then tmp = tmp + 1

        Next j

        If  Then

            List2.AddItem Str(i) + Str(i + k - 1)

        End If

        sum = 0: tmp = 0

        For k = 1 To m

            ton(k) = 0

        Next k

        Next i

    End Sub

    Function xb(data As Integer) As Boolean

        xb = False

        If data = 0 Then xb = True

    End Function

单车道胡同路边停车,先进去的车只能从另一出口出来,阅读程序代码(break表示退出循环):

listque=[]        #定义列表listque存储停车状况

max=8         #停车位最大容量

while(True): 

    print('1.停车')

    print('2.开车离开')

    print('3.查看停车库')

    print('其他. 退出')

    x=input("输入你的选择:")        #输入选择项

    if x=='1':

        if len(listque)< :

            print("还有",max-len(listque),"个停车位。")      

            listque.append(input("请输入停车车牌:"))       

        else:

            print("对不起,停车位已满。")

        elif x=='2':

            if len(listque)==0:                           

                print("停车库为空。")

            else:

                print (,"开出。")    

        elif x=='3':

             print(listque)

        else:

            break

在横线中填入代码中