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

下面VB程序段运行后,文本框Text1和Label1显示的内容分别是(  )

Private Sub Command1_Click()

  Dim y As Long

  Text1.Text = ""

  y = f(3)

  Label1.Caption = Str(y)

End Sub

Function f(n As Integer) As Long

    Text1.Text = Text1.Text + Str(n)

    If n <= 1 Then

       f = 1

    Else

       f = f(n - 1) + 2

    End If

End Function

A . 3 2 1和5 B . 1 2 3和5 C . 5和3 2 1 D . 6和3 2 1
有两个以字母结尾的字符串s1和s2,在不区分大小写的前提下判断它们是否相同。该功能的VB程序段如下:

Private Sub Command1_Click(  )

Dim c1 As String, c2 As String, s1 As String, s2 As String

s1 = Text1.Text: s2 = Text2.Text

i = 1: j = 1

Do While i <= Len(s1) And j <= Len(s2)

    c1 = Mid(s1, i, 1): c2 = Mid(s2, j, 1)

    If                        Then

        i = i + 1: j = j + 1

    Else

        Exit Do          'Exit Do表示退出循环

    End If

Loop

If i > Len(s1) And j > Len(s2) Then T3.Text = "相同" Else T3.Text = "不相同"

End Sub

Function toLowerCase(x As String) As String   '该函数把大写字母转成小写

    If x >= "A" And x <= "Z" Then

        toLowerCase = Chr(Asc(x) + 32)

    Else

                             

    End If

End Function

划线处的代码从以下代码中选择,每条划线一句代码:

①toLowerCase = Chr(Asc(x) - 32)     ②toLowerCase = x

③toLowerCase(c1) = toLowerCase(c2)   ④c1 = c2

选择代码组合正确的是

A . ④ ① B . ① ④ C . ③ ① D . ③ ②
如果一个数从左往右读和从右往左读都一样,那么这个数就叫做“回文数”。如果一个数的十进制和二进制表示都是回文数,则把这个数叫做“双重回文数”。例如,十制数33是回文数,将其转化为二进制表示(10001)也是回文数,所以33是双重回文数。编写程序用于查找1000以内的双重回文数。
  1. (1) 根据题目描述,十进制数99是否是“双重回文数”(填:是/不是)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

    Dim n As Integer, d As String, b As String

    For i = 1 To 999

    n=i

    d=CStr(n)            'CStr函数的功能是数值转换为字符串

         ①    

    If ishws(d)Aind ishws(b)Then

    List1.AddItem Str(i)+" "+b

    End If

    Next i

    End Sub

    Function dtob(k As Integer)As String '进制转换

    Do While k >0

    dtob =CStr(k Mod 2)+ dtob

    k=k\2

    Loop

    End Function

    Function ishws(x As String)As Boolean

    ishws = True

    For j=1 To Len(x) \2

    If     ②    Then

    ishws = False

    Exit For

    End If

    Next j

    End Function

函数如下

 def chanageInt(number2):

     number2 = number2+1

     print("changeInt: number2= ",number2)

#调用

number1 = 2

chanageInt(number1)

print("number:",number1)

打印结果哪项是正确的(  )

A . changeInt: number2= 3       number: 3 B . changeInt: number2= 3       number: 2 C . number: 2             changeInt: number2= 2  D . number: 2             changeInt: number2= 3
某小卖部商品相关数据分别存放在相应的数据表中,如图a和图b所示。

编写“商品销售统计”程序功能如下:窗体加载时从数据库中读取商品的相关数据,对各商品类别总销量及名次进行统计,结果在列表框List1中显示;单击“查询”按钮Command1,按商品类别编号从小到大排列,同一类别商品按销量从大到小排序,在列表框List2中显示。程序运行界面如图c所示。

  1. (1) 阅读程序可知,gtype(b(3))的初始值为
  2. (2) 请在划线处填入合适的代码。

    Dim a(1 To 2000) As Integer, b(1 To 2000) As Integer, s(1 To 2000) As Integer

    Dim gid(1 To 100) As Integer, t(1 To 2000) As Integer

    Dim c(1 To 2000) As String, gtype(1 To 100) As String

    Dim ts(1 To 100) As Integer           '数组 ts 存储每个类别商品总销量

    Dim k(1 To 2000) As Integer          '数组 k 存储每个类别商品总数

    Dim m As Integer, n As Integer

    Private Sub Form_Load()

    '从数据库读取 m 条记录中类别编号、商品类别数据分别存储在数组 gid、gtype 中

    '从数据库读取n 条记录中类别编号、商品名称、商品销量数据分别存储在数组 b、c、s中,代码略

    For i = 1 To n            '统计各类别商品总销量及商品总数

    k(b(i)) = k(b(i)) + 1

    Next i

    For i = 1 To m               '计算各类别商品总销量的名次

    p = 0

    For j = 1 To m

    If ts(i) < ts(j) Then p = p + 1

    mc(i) = p + 1

    Next j

    Next i

    List1.AddItem "类别  销量  名次"

    For i = 1 To m

    List1.AddItem gtype(i) + "  " + Str(ts(i)) + "   " + Str(mc(i))

    Next i

    End Sub

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, pos As Integer, tmp As Integer, p As Integer

    p = 1

    For i = 1 To m

    a(i) = p

    p = p + k(i)

    Next i

    For i = 1 To n

     p = b(i)

    t(a(p)) = i

    a(p) = a(p) + 1

    Next i

    pos = 1

    For i = 1 To m         '对各类别商品按商品销量进行排序

    For j = pos To pos + k(i) - 2

                          

    tmp =t(j): t(j) = t(p): t(p) = tmp

    Next j

    pos = pos + k(i)

    Next i

    List2.AddItem "类别  商品  商品销量"

    For i = 1 To n

    List2.AddItem     + " " + geshi(c(t(i))) + "  " +Str(s(t(i)))

    Next i

    End Sub

    Function f(head As Integer, tail As Integer) As Integer

    Dim i As Integer, p As Integer

    p = head - 1

    For i = head To tail

    If s(t(i)) > s(t(p)) Then p = i

    Next i

    f = p

    End Function

    Function geshi(s As String) As String           '格式输出,代码略

    End Function

编写VB程序实现如下功能程序运行时产生n个数据并按升序排序显示在列表框List1中,在文本框Text1中输入一个正整数key,单击“查找”按钮 Command1,则在标签Label2中显示查找结果。程序界面如图所示。

实现上述功能的VB程序如下,但加框处代码有错误,请改正。

Const n=10

Dim d(1 To n)As Integer

Private Sub Form Load()

′随机产生n整数并存储在数组d中,并把数组d按升序排序

′在列表框中显示排序后的数据,代码略

End Sub

Private Sub Command1_Click()

    Dim key As Integer, p As Integer

   key =Val(Text1.Text)

       ‘①

If p<>0 Then

   Label2. Caption="该数据在第"+Str(p)+"个位置"

Else

   Label2. Caption="没有找到! "

  End If

End Sub

Function search(key As Integer) As Integer

  i=1: j=n

  Do While i<= j

  m=(i+j)\2

  If d(m)=key Then

    search =m

    Exit Function

  ElseIf key<d(m)Then

    j=m-1

  Else

    i=m+1

  End If

Loop

    ‘②

End Function

Pygame.display的功能是访;Pygame.event的功能是;Pygame.font的功能是使用;Pygame.image的功能是
给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将该数组依次分割成m+1个段,具体分割方法如下:

·第1段是从数组首个元素开始,元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1区间,则第1段元素个数为0。

·第1段分割后的剩余元素,用同样的方法来依次分割第2段,第3段…,第m段。

·第m段分割后的剩余元素分割到第m+1段(剩余段)。

若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第P段“重叠块”,该段其余部分称为第p段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分制到第m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如图所示。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续三个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含38,58,46,第3段“重叠块”包含5,62,69。

  1. (1) 给定2个区间依次为[10,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为个。
  2. (2) 小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在画线处填入合适的代码。

    Const n=18,m=6

    Dim a(1 To n)As Integer

    Dim b(1 To 2*m)As Integer

    b(1)、b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限……

    Dim c(1 To 2*m+1)As Integer

    ‘c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数;

    ‘c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数……

    ‘c(2*m-1)存储第m段“非重叠块”的元素个数,c(2m)存储第m段“重叠块”的元素个数(值为0);      ‘c(2*m+1)存储剩余段的元素个数

    Private Sub Command1_Click( )

      Dim i As Integer,p As Integer,i As Integer,LL As Integer

    ‘读取n个数据并保存在数组a中,代码略

    ‘读取m个区间的下限和上限并保存在数组b中,代码略

      For i=1 To 2*m+1

        c(i)=0

      Next i

      i=1:p=1

      L=0:LL=0

    Do While   ①   

      If IsIn(i, p)Then

          If IsIn(i, p+1)Then

              LL=LL+1

          Else

                 ②   

              LL=0

          End If

          i=i+1

        Else

          c(2*p-1)=L

          c(2*p)=LL

            L=0:LL=0

            p=p+1

        End If

      Loop

      If i<=n Then

        c(2*p-1)=n-i+1

      Else

        c(2*p-1)=L

        c(2*p)=LL

      End If

    ‘输出统计结果,代码略

    End Sub

    ‘函数IsIn用来判断a(i)值是否属于第p区间

    Function IsIn(i As Integer, p As Integer)As Boolean

    If p>m Then

        IsIn=False

    Else

        If   ③   Then IsIn=True Else IsIn =False

    End If

    End Function

    以上程序段运行时,为了实现上述功能,画线处应填入的代码为:①;②;③

给定n个学生成绩,筛选男生或女生中成绩居前百分之k的学生。筛选规则如下:m=男生或女生记录数×k%,若m<1,则m取1;否则m向下取整,如m=3.1,则筛选最大的3项。若有数据和第m项的值相同,则一起筛选出。如有男生成绩分别是“78,99,98,99,90”,以“最大10百分比”筛选,则5×10%=0.5,筛选最大的1项,筛选出“99,99”。

编写一个VB程序,实现上述功能。程序运行时,在列表框List1中显示n名学生的姓名、性别和成绩,在文本框Text1中输入性别,Text2中输入k,单击“筛选”按钮Command1,在列表框List2中显示筛选出的学生姓名、性别和成绩。程序运行界面如图所示。

  1. (1) 下列VB语句可以实现清空文本框Text1内容的是(单选,填字母:A .Text1.Clear / B .Text1.Caption = "" / C .Text1.Text = "")
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Dim n As Integer

    Dim xm(1 To n) As String

    Dim xb(0 To n) As String

    Dim cj(0 To n) As Integer

    Private Sub Form_Load()

    '读取学生姓名、性别和成绩分别存 xm、xb 和 cj 数组,并在列表框 List1 中显示。

    '学生人数存变量 n,代码略。

    End Sub

    Private Sub Command1_Click()

        Dim s As String, k As Single, m As Single, mm As Integer

        Dim c As Integer, p As Integer, i As Integer, j As Integer

        Dim t1 As String, t2 As Integer

        s = Text1.Text

        k = Val(Text2.Text)

        c = 0

        For i = 1 To n

            If xb(i) = s Then

        Next i

        m = c * k / 100

        If m < 1 Then

            mm = 1

        Else

            mm =

        End If

        i = 1

        Do While i <= n

            p = i

            For j = i + 1 To n

                If xb(j) = s Then

                    If  Then p = j

                End If

            Next j

            If i <> p Then

                t1 = xb(i): xb(i) = xb(p): xb(p) = t1

                t2 = cj(i): cj(i) = cj(p): cj(p) = t2

            End If

            If i > mm And (xb(i) <> xb(i - 1) Or cj(i) <> cj(i - 1)) Then Exit Do

            i = i + 1

        Loop

       

        For i = 1 To mm

            List2.AddItem xm(i) + " " + xb(i) + " " + Str(cj(i))

        Next i

    End Sub

  3. (3) 程序加框处的代码有误,请改正。
下列VB表达式的值最小的是(    )
A . Val(Mid("7.82653",3,1)) B . Len("-2+8") C . Asc("g")-Asc("b") D . 55 Mod5* 15\9
LZW编码是一种自适应词典编码,通过建立一个字典,实现字符的编码。假设输入的字符串中仅有小写字母和空格,编码方法如下:

⑴初始时,建立一个空字典,把26 个小写字母加入字典中。26 个小写英文字母编码为 1-26,字母“a”的编码为 1,字母“b”的编码为2,其它字母的编码依次增加。

⑵从字符串第一个位置开始扫描,若遇到空格(空格用“*”表示),则得到一个单词,截取该单词并存入变量中。

⑶若该单词在字典中,则取出该单词在字典中的编码值;否则,依次取出该单词中各字母在字典中的编码值,(编码值之间用一个空格分隔),同时产生该单词的编码(编码为字典中的最大编码值加1),加入字典中。

⑷继续扫描字符串,截取单词,并按照步骤⑶的方法进行处理,直至整个字符串编码完毕。字符串“ab ab”LZW编码过程如图所示。

  1. (1) 如果字符串为“ab bb bb”,则其LZW编码为
  2. (2) 请在划线处填入合适的代码。

    Dim pos As Integer, a(1 To 100)As String

    Private Sub Form_Load()

        '将字母“a”至“z”依次存入数组元素a(1)到a(26)

    End Sub

    Function judge(ss As String) As Integer            '判断字典中是否有ss这个单词

        Dim i As Integer judge = 0

        For i = 27 To pos

            If a(i) =Then judge = i

            Exit For

            End If

        Next i

    End Function

    Private Sub Command1_Click()

        Dim s As String, i As Integer, j As Integer, k As Integer, ch As String, word As String, result As String, Dim id As Integer, idletter As Integer

        s = Text1.Text pos = 26: i = 1

        Do While i <= Len(s)

            j = i

            Do While Mid(s, j, 1) <> " "

                j = j + 1

                If j > Len(s) Then Exit Do

            Loop

            word = Mid(s, i, j - i)

            If Len(word) = 1 Then            '单个字母的单词

                result = result + Str(Asc(word) -Asc("a") + 1)

            Else

                id = judge(word)

                If id = 0 Then               '新的单词

                    For k = 1 To Len(word)                   '依次处理该单词中的各个字母编码

                        ch = Mid(word, k, 1)

                       

                    Next k

                    pos = pos + 1              '对该单词编码

                    a(pos) = word

                Else             '词典中存在该单词

                    result = result + Str(id) End If

            End If

            If j < Len(s) Then result = result + " *"

           

        Loop

        Text2.Text = result

    End Sub

在python中,想输出一行文字,要用到的函数是(    )。
A . input() B . int() C . print() D . float()
已知t=5.1,s=9,m=-8,则表达式的值为True的有(    )
A . t > Abs(m) B . Sqr(s) = Int(s-t) C . S Mod 10< Fix (t) \10 D . Not (s=9)
某地区举办了一场比赛,共有n个选手参加,每个选手会有m个评委进行评分。现要求按下列规则计算每个选手的成绩,并按照成绩从高到低进行排序。

选手成绩的计算规则是:计算评分最高前k个的平均分avg1,剩余评分的平均分avg2,找到avg1与avg2差值最小,则avg1与avg2的平均数为该选手得分。例如,某选手的评委评分为6,5,3,1,则各位次评分为:

k

1

2

3

avg1

6

5.5

4.67

avg2

3

2

1

avg1-avg2

3

3.5

3.67

由表格可知,差值最小为3,因此该选手的评分为(6+3)/2=4.5。按上述要求,编写VB程序,功能如下:在列表框List1中显示各选手的评委评分,单击“计算”按钮Command1,在列表框List2中依次按照得分从高到低显示每位选手成绩。程序运行界面如图所示。请回答下列问题:

  1. (1) 若某选手的评委评分为6,3,7,10,则该选手最后成绩为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n=8

    Const m=12

    Dim a(n*m)As Double,b(m)As Integer

    Dim f(n)As Double,num(n)As Integer,sum As Double

    Private Sub Form_Load()

        '读取n个人每个评委的评分,按照选手编号从小到大依次存入数组a,并显示在List1中

        'a(1)到a(m)存储第1个选手得到的m个评委的评分

        'a(m+1)到a(2*m)存储第2个选手得到的m个评委的评分

        '以此类推,代码略

    End Sub

    Private Sub Command1_Click()

        Dim i As Integer,j As Integer,x As Integer,k As Integer

        Dim s As Double,avg1AsDouble,avg2AsDouble

        Dim ans_v As Double,ans_c As Double

        For i=1 To n

            sum=0

            For j=1 To m

                sum=sum+a((i-1)*m+j)

                b(j)=0

            Next j

            s=0

            ans_v=-1:ans_c=0

            For j=1 To m-1

                x=find(i)     '找到第i组中m个数中第j大数位置x

               

                avg1=s/j

                avg2=(sum-s)/(m-j)

                If ans_v=-1 Or avg1-avg2<ans_c Then

                    ans_v=(avg1+avg2)/2

                    ans_c=avg1-avg2

                End If

            Next j

           

            Do While k>=1 And ans_v>f(k)

                f(k+1)=f(k)

                num(k+1)=num(k)

                k=k-1

            Loop

            f(k+1)=ans_v

            num(k+1)=i

        Next i

        '将结果显示在List2中,代码略

    End Sub

    Function find(t As Integer)As Integer

        Dim i As Integer

        find=0

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

            IfThen

                If find=0 Or a(find)<a(i)Then find=i

            End If

        Next i

        b(find-(t-1)*m)=1

    End Function

下列Python代码运行的结果是(    )

n=8

m=float(n)

print(m)

A . 8.0 B . 8 C . m D . n
用来将数值转换为字符串类型的函数是(   )
A . Chr ( ) B . Asc( ) C . Str ( ) D . Val( )
check函数的功能是检查字符串s 是否符合相应要求。如果符合返回True,否则返回 False。

要求s包括大写字母、小写字母、数字以及其它字符。请找出下面代码的两处错误(    )

def check(s):

c=0

flag=[0]*4

for i in s:

  if "0"<=i<="9": #①

    flag[0]=1

  elif 65<= ord(i)<=90:

    flag[1]=1

  elif 97<= ord(i)<=122:

    flag[2]=1

  else:

    flag[3]=1

    for j in range(4):

      c=c+flag # ②

      if c=4: #③

        return True

  return False #④

A . ①② B . ②③ C . ③④ D . ①④
小明使用Python编写了某答题卡中单项选择题的判分程序,该单选题每题2分。扫描答题卡获取选项填涂信息,输入标准答案,程序自动判断并输出分数。具体方法为:

一个选项是否被填涂,可以从判断一个像素的颜色开始,像素的填涂情况是通过RGB的值来判断,灰度值低于132的表示该点被填涂;一个信息点64%的像素被填涂,则认为该区域已填涂,返回值为“1”。区域未填涂时返回值为“0”;各选项的编码为:A→“1000”,B→“0100”,C→“0010”,D→“0001”;输入标准答案,程序进行对比并返回结果。答题卡相关信息如下:

  1. (1) 某题的标准答案为“C”,该题填涂情况为“0100”,则分数为
  2. (2) 实现上述功能的程序如下,请在划线处填入合适的代码。

    from PIL import Image

    #输入起始点坐标(xs,ys),信息点宽度高度(fw, fh),间隔宽度高度(sw ,sh),代码略

    num = 5               # 判分个数

    def bw_judge(R, G, B):   # bw_judge用于判断一个像素的填涂情况 代码略

    def fill_judge(x, y):      # fill_judge用于判断信息点的填涂情况

        count = 0

        for i in range(x, x + fw + 1):

            for j in range(y, y + fh + 1):

                R, G, B = pixels[i, j]

                if bw_judge(R, G, B) = = True:

                    count = count + 1

        if count >= :

            return True

    total_width = fw+ sw

    total_height = fh + sh

    image = Image.open("t2.bmp")

    pixels = image.load()

    number = ""

    bz=[""]*num

    df=0

    bzd=input('请输入标准答案:')

    da={"A":"1000","B":"0100","C":"0010","D":"0001"}

    for i in range(len(bzd)):

        bz[i]=

    for row in range(num):                       #分数判定

        for col in range(4):

            y = ys + total_height * row

            if fill_judge(x, y) == True :

                number = number + '1'

            else:                           

                number = number + '0'

        if number = = bz[row]:

     df+=2

        number=""

    print("得分为:",df)

在Python中,函数体用“return(表达式]”将表达式的值返回给调用者,如果return后面没有表达式,这时函数返回的是(    )
A . None B . 1 C . -1 D . False
如下 Python 程序段:

from flask import Flask app = Flask( name )

@app.route('/')

def index( ):

return "<p>Hello World!</p>"

if __name__== ' main ':

app.run(host='127.0.0.1',port=80)

以下有关该程序段的说法不正确的是(  )

A . 该程序中导入的flask模块一种小型 Web 网络应用框架 B . app=Flask( name )用于创建应用实例 C . @app.route('/')用于创建表单 D . 程序正确运行时,可以在浏览器地址栏输入“127.0.0.1”来查看显示的内容