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

曲哲同学设计了一个英文字符串的加密算法,其加密的方法如下:

从被加密字符串中获取单个字符,然后得到其ascii码的8位二进制编码。

将字符的二进制编码反向,得到其逆序二进制码。

将逆序二进制码的每4位转换为相应的十六进制编码,即得到单个字符加密后的字符串。

以此类推,直到所有字符加密完成,得到加密字符串。

具体程序界面如下图,在text1中输入字符串,点击“加密”按钮command1后,在text2中显示加密后的字符串。

  1. (1) 已知字符a的ascii码为97,则字符串idear加密后的字符串为
  2. (2) 阅读整段程序,程序中①画线处应填入

    程序中②画线处应填入

    Private Sub Command1_Click()

    Dim s As String, ch As String

    Dim result As String, chA As String, chB As String

    Dim i As Integer, j As Integer

    Dim n As Integer, m As Integer

    s = Text1.Text

    n = Len(s)

    result = "": c = "0123456789ABCDEF"

    For i = 1 To n

        ch =           ①             

        ch = niXu(ch)

        m = 0

        For j = 1 To 4  ' 获取二进制码前4位的值

                       ②              

        Next

        chA = Mid(c, m + 1, 1)

        m = 0

        For j = 5 To Len(ch)

            m = m * 2 + Val(Mid(ch, j, 1))

        Next

        chB = Mid(c, m + 1, 1)

        result = result + chA + chB

    Next

    Text2.Text = result

    End Sub

    ' 得到单个字符ch的8位二进制编码

    Function D2B(ByVal ch As String) As String

        Dim s As String

        Dim data As Integer, i As Integer

        data = Asc(ch):s = ""

        Do While data > 0

            s =Str(data Mod 2) + s

            data = data \ 2

        Loop

        If Len(s) < 8 Then

            For i = 1 To 8 - Len(s)

                s = "0" + s

            Next

            D2B = s

        Else

            D2B = s

        End If

    End Function

    ' 返回字符串s的逆序

    Function niXu(ByVal s As String) As String

        Dim i As Integer:Dim r As String

        r = ""

        For i = Len(s) To 1 Step -1

            r = r + Mid(s, i, 1)

        Next

        niXu = r

    End Function

下列程序的功能是在text1中输入的自然数,分解为3个互不相同的质数(三个质数的和等于输入的自然数),并把分解产生的质数按升序顺序显示在左边的列表框中。例如,输入20,那么在列表框中会显示如右图所示结果。其中,上述界面中“开始处理”按钮的名称是“Command1”,程序中函数f(x)的功能是判断x是否为质数,如果是质数则返回值为true,否则返回false。

请在下列程序代码的基础上按照要求设计该程序, 完善程序中的划线部分。

Dim n As Integer, a1 As Integer, a2 As Integer, a3 As Integer

Function f(x) As Boolean

f = True

      For i = 2 To Sqr(x)

         If x Mod i = 0 Then   

Next i

End Function

Private Sub Command1 Click()

n =   

For a1 = 2 To n

 For a2 = a1 To n

  For a3 = a2 To n

   If     And f(a1) And f(a2) And f(a3) Then

    List1.AddItem (Str(a1) + " " + Str(a2) + " " + Str(a3))

   End If

  Next a3

 Next a2

Next a1

End Sub

自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。使用枚举法寻找5位数以内的自幂数算法如下:

⑴使用循环列出1到99999中的每一个数zmsknz

⑵通过自定义函数ddknzms拆解得到每个数中的每位数上的数码及它们对应的n次幂之和

⑶将zmsknz与ddknzms进行比较,若相等则说明是自幂数,可将其加入列表。

编写VB程序,使用枚举法得到5位数以内的自幂数,程序设计界面如图所示:

  请根据算法及相应注释将下面的程序补充完整:

Function ddknzms(zmsknz As Long) As Long  '得到可能的自幂数

  Dim zmsknz_str As String    '字符串类型自幂数可能值

  Dim zmsknz_length As Integer, zmswsxh As Integer  '字符串类型自幂数可能值字符个数

  zmsknz_str = Trim(Str(zmsknz))

  zmsknz_length = Len(zmsknz_str)

  For zmswsxh = 1 To zmsknz_length

    ddknzms = ddknzms + Val(Mid(zmsknz_str, zmswsxh, 1))^  

  Next zmswsxh

End Function


Private Sub Command1_Click()

  Const ZMSWS = 5

  Dim zmsknz As Long, zmsknz_zz As Long

  zmsknz_zz = 10  ZMSWS - 1

  For zmsknz = 1 To zmsknz_zz

If  Then List1.AddItem (Str(zmsknz)

  Next zmsknz

End Sub

下列VB程序的功能是:程序运行时,单击命令按钮Commandl后,产生10个[1,999]范围内互不相同的随机整数,依次显示在列表框List1中,然后将它们按从小到大的顺序排序,排序结果显示在列表框List2中。

数组a用于存储产生的10个随机整数,函数f(x)用于判断随机整数x与已生成的整数是否有重复,若有重复则返回True,否则返回False。

  1. (1) 虚线框内程序段所采用的排序算法名称是。(填:冒泡排序/选择排序)
  2. (2) 在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。

    Dim a(1 To 10) As Integer

    Function f(x As Integer) As Boolean   

           ′代码略

    End Function

    Private Sub Commandl_Click()

    Dim n As Integer                         ′n用于统计已经产生的随机整数个数

    Dim i As Integer.j As Integer

    Dim x As Integer.k As Integer

    Randomize                                   ′初始化Rnd函数

    n=0

    List1.Clear                                 ′清除列表框中内容

    List2.Clear

    Do While n<10

        x=①                     ′产生[1,999]范围内的随机整数

        If Not f(x) Then

           n=n+1

               a(n)=x

    List1.AddItem Str(a(n))

        End If

    Loop

    For i=1 To 9                                

    For j=10 To i+1 step -1

            If ② Then

                k=a(j):a(j)=a(j-1):a(j-1)=k

            End If

        Next j   

    Next i 

    For i=1 To 10

        List2.AddItem Str(a(i))

    Next i

    End Sub

小明编写统计字符串中出现最多的字母和数字的程序。程序运行如下:在文本框Text1中输入一个仅包含字母和数字的字符串。单击按钮Command1后,在标签Label1上显示出现最多的数字字符,在标签Label2上显示出现最多的字母字符(字母不区分大小写,例如字母G和g统计在一起)。程序运行界面如图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Private Sub Command1_Click()

Dim a(1 To 10) As Integer    ‘存储0~9每个数字出现的次数

Dim b(1 To 26) As Integer    ‘存储a~z每个字母出现的次数

Dim zf As String, x As String, p As Integer

Dim maxa As Integer, maxb As Integer

For i = 1 To Len(zf)

 x = Mid(zf, i, 1)

 If pd(x) = 1 Then

  p = Asc(x) - Asc(“0”) + 1

  a(p) = a(p) + 1

 

  p = Asc(x) - Asc(“A”) + 1

  b(p) = b(p) + 1

 Else

  p = Asc(x) - Asc(“a”) + 1

  b(p) = b(p) + 1

 End If

Next i

k = a(1):maxa = 1

For i = 2 To 10

 If a(i) > k Then k = a(i):maxa = i

Next i

k = b(1) :maxb = 1

For i = 2 To 26

 IfThen k = b(i) :maxb = i

Next i

Label1.Caption =“出现最多的数字是” + Chr(maxa+ Asc(“0”)-1)

Label2.Caption = “出现最多的字母是” + Chr(maxb + Asc(“A”)-1)

End Sub

Function pd(ch As String) As Integer ’函数用于判断每个字符类型

 If ch >= “0” And ch <= “9” Then pd = 2

 If ch >= “A” And ch <= “Z” Then pd = 2

 If ch >= “a” And ch <= “z” Then pd = 3

End Function

编写VB程序, 实现如下功能:在文本框Text 1中输入二进制数, 单击“转换”命令按钮Command 1,在文本框Text 2中输出对应的十六进制数。程序界面如图所示, 请回答下列问题:

  1. (1) 如果输入的二进制数为“1101010”,则得到的结果为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Function bw(x As Integer, y As String) As String 

       '函数bw功能:若二进制位数不足,通过在前面添”0”使得位数为4的倍数

         Dim rAs Integer, i As Integer

         r=x Mod 4

         If r< 0 Then

           For i= 1 To 4-r

             y=”0”+y

           Next i

          x=Len(y)

        EndIf

        bw=

       End Function

       Private SubCommand 1 Click()

          Dim m As String, n As Integer, i As Integer, a As Integer

          Dim s As Integer, s1 As String, j As Integer

         m=Text 1.Text

         n=Len(m)

         Text 2.Text=””

         m=   ‘调整m的位数为4的倍数

         For i=1Ton-3Step 4

        s=0

        For j=i To i+ 3

           a=Val(Mid(m, j, 1) )

          s=

        Next j

        If s>= 10 Then

           s 1=Chr(Asc(”A”) +s-10)

        Else

           s 1=CStr(s)'函数CStr类似于Str,但无前导空格

        End If

        Text 2.Text=Text 2.Text+s1

      Next i

    End Sub

     ② ③ 

小龙同学设计了一个求四则混合运算结果的程序,用于计算不带括号的“+”、“-”、“*”、“\”的运算,“\”为整除运算,且此处要求“*”和“\”的优先级相同。在表达式中输入待求解的表达式,以“=”结尾。按下Command 1“计算”按钮后, 在标签控件Label l中输出运算结果。程序界面如下图所示:

  1. (1) 在表达式中输入“15-22\5*2+7=”,则输出的结果是
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Function calculate(x As Integer, y As Integer, op As String) As Integer

         If op=“+”Then calculate=x+y

         If op=“-”Then calculate=x-y

         If op=“*”Then calculate=x*y

         If op=“\”Then calculate=x\y

    End Function

    Function state(op As String) As Integer

         If op=“#”Then state=-1

         If op=“=”Then state = 1

         If op=“+”Then state = 1

         If op=“-”Then state = 1

               '①

         If op=“*”Then state = 3

    End Function

    Private SubCommand1_Click()

         Dim s As String, length As Integer, t As String

         Dim k As Integer, q As Integer

         Dim opt( 0 To 3) As String

         Dim i As Integer

         Dim s1 As String

         Dim a( 1 To 3) As Integer

         s=Text 1.Text

         length=Len(s)

         t=“”:k=0:q=0:opt(q) =“#”

         For i= 1 To length

             s1=Mid(s, i, 1)

             If s1>=“0”And s 1<=“9”Then

                t=t+s1

             Else

                k=k+1

                a(k) =Val(t)

                 t=“”

                Do While      '②

                   a(k-1) =calculate(a(k-1) , a(k) , opt(q) )

                   k=k-1

                   q=q-1

               Loop

               q=q+1

                 '③

                If s1=“=”Then Label1.Caption=Str(a(1))

             End If

         Next i

    End Sub

有如下程序段:

Function f(a As Integer, b As Integer) As Integer

Dim k As Integer

k = a Mod b

If k = 0 Then

 f = b

Else

 f = f(b, a mod b)

End If

End Function

Private Sub Command1_Click()

Dim i As Integer, j As Integer

i = Val(Text1.Text)

j = Val(Text2.Text)

Text3.Text = Str(i * j / f(i, j))

End Sub

该程序运行之后,在text1与text2分别输入25 与15,点击command1后在text3上显示的内容为(  )

A . 5 B . 30 C . 75 D . 125
下列VB表达式中,能生成一个[20,50]之间的随机整数的是(    )
A . Int(Rnd * 51) + 20 B . Int(Rnd * 31) + 20 C . Int(Rnd * 30) + 20 D . Int(Rnd * 31) + 19
有如下程序段:

s="ABCDEFGH"

i=1

Do While i<=Len(s)

    If i mod 2=0 then

        s=mid(s, i+1, len(s)-i) & mid(s, 1, i-1)

    End If

    i=i+1

Loop

Text1.text=s

A . ACEG B . CDEFG C . CDEGH D . GHACD
IPv6是英文“Internet Protocol Version6”(互联网协议第6版)的缩写。IPv6的地址长度为128位,采用十六进制表示。为了便于人工阅读和输入,IPv6 地址可划分成8个块,每块4位,块与块之间用“:” 隔开,如: ABCD:F010000:000:ABCD:EF01 :000:6789。同时,对于多个地址块为0的情况时,可以使用“: :”号,进行化简。化简原则如~ F:

①全0块“0000”,可以化简为“0”

②连续多个全0块,可以化简为“: :”

③一个IPv6地址中只能出现一个“: :”,出现多个全0块时,“: :” 要化简最长的一段,没有最长的就将最左侧的一段化简为“: :”

④“: :”可以出现在地址开头或结尾

如:数据“FBCD:EF01:6789”在化简前为“FBCD:EF01:0000:0000:0000:0000:0000:6789”。

小李根据上述化简算法设计了一个IP化简地址还原的VB程序,功能如下:在文本框Text1中输入已经化简的IP地址,单击“还原”按钮Command1,在文本框Text2中输出其化简前的IP地址。运行界面如图所示。

  1. (1) 运行程序,若在文本框Text1中输入“12::” (引号内数据),还原后,数组元素ip(1)的值为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Function ipv6(s As String) As String

        Dim i As Integer

        For i= Len(s) + 1 To4

            s= "0"+s

        Next i

       

    End Function

    Private Sub Command1_Click( )

        Dim ip(1 To 8) As String

        Dim st As String

        Dim f As Integer, k As Integer

        Dim s As String, n As Integer

        f= 0

        s = Text1.Text

        n= Len(s)

        For i= 1 To n

            c1 = Mid(s, i, 1)

            If c1 <> "." Then

                ip(k)= ip(k) +c1

            End If

            If c1= ":" Or i= n Then

                

                If c2 =":" Then

                    f= k

                Else

                    ip(k) = ipv6(ip(k))

                    k=k+ 1

                End If

            End If

        Next i

        k=k- 1

        x=8-k

        For i=k To f+ 1 Step-1

            

        Next i

        For i=f+ 1 To f+x

            ip(i) = "0000"

        Next i

        Text2.Text= ip(1)

        For i=2 To 8

            Text2.Text = Text2.Text + ":" + ip(i)

        Next i

    End Sub

有如下VB程序段:

Dim a(1 To 9) As String, k As Integer

Dim s1 As String, s2 As String

s1= Text1.Text:s2 = Text2.Text

For i = 1 To Len(s1)

    k = Val(Mid(s1, i,1))

    a(k) = Mid(s2, i, 1)

Next i

For i=1 To 9

    s=a(i)+s

Next i

Label1.Caption = s

在文本框Text1中输入“52463”,文本框Text2中输入“happy”, 执行该程序段后,标签Label1中显示的内容是(    )

A . happy B . yppah C . phpya D . Pyhpa
汉诺塔问题中,现在要将塔座A上的所有圆盘移到塔座B上;并仍按同样顺序叠放。移动圆盘时,需遵守汉诺塔问题的移动规则。可设计出解汉诺塔问题的递归算法为(   )。
A . B . C . D .
阅读如图所示的绘制x5+x4+x-3=0图像的程序代码。

import numpy as np  

import matplotlib.pyplot as plt  

x=np.arange(-1,2,0.01)  

y=x**5+x**4+x-3  

plt.plot(x,y)       

plt.title('x^5+x^4+x-3')  

plt.xlabel('X')      

plt.ylabel('Y')      

plt.show( )          

下列选择错误的是(    )

A . arange(-1,2,0.01)表示在-1,2之间,每隔0.01取一个点 B . plt.plot(x,y) 表示绘制图像 C . plt.xlabel('X')、plt.ylabel('Y')表示绘制X、Y轴 D . plt.show()显示图像
恺撒密码将明文中的a用d替换,b用e替换,……,z用c替换。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文,这种密码称为加法密码,又称为移位密码。阅读下列程序代码,

def CaesarCipher():

    c=mingwen.get("0.0", "end")   

    b=""

miwen.delete("0.0", "end")    

for i in range(len(c)):

    if 'a'<=c[i]<='w' or 'A'<=c[i]<='W':  

b=b+chr(ord(c[i])  ①  )       #生成密文

        elif 'x'<=c[i]<='z' or 'X'<=c[i]<='Z': 

            b=b+chr(ord(c[i])  ②  )       #生成密文

        else:

            b=b+c[i]     

miwen.insert("0.0",b) 

下列说法正确的是(     )

A . ①的位置填写-3 B . ①的位置填写+3、②的位置填写-23,或-26+3 C . ①的位置填写-23 D . ②的位置填写+3
求解a到b内(包含a和b)所有的质数,并对每个质数的每一位数字求和。请完善程序。程序如下:

import math

def IsPrime(i):

    if i==1:

        return False

        for j in range(2,int(math.sqrt(i))+1):

            if:

                return False

        return True

    a=int(input("请输入a:"))

    b=int(input("请输入b:"))

    summ=0

    for i in range(a,b+1):

        if IsPrime(i):

           

            while t>0:

                summ=summ+t%10

       

    print("数字和为:",summ)

有一段 Python代码及其运行结果如下

小明在代码中插入了语句“df_delc=df.drop(0)”, 其余不做修改,那么运行这段修改后的代码,其运行结果为( )

A . A B . B C . C D . D
  小张要对一批数据加密,数据内容全部由英文单词和空格组成(不包含数字和标点符号,数据最终以英文单词结尾,每个单词至少由两个字母组成)。加密时小张先从文本框中读取整段原文内容,然后对每个单词进行如下操作:每个单词中第一个和第二个字母交换位置,第三个字母按字母表顺序向后移动3 位,并后移到整个单词的最后面,其余字母前移,过程如图所示。例如:单词“Hazarded”,经过转换之后得到的密文是“aHardedc”。

代码和程序运行界面如下所示,请在划线处填入合适的代码,并且在加框处代码有错误,请改正:

 

Const n = 1000

Dim mw(0 To 1000) As String    '存放转换后密文的字符

Function zh(s As String) As String     '按字母表后移3位进行转换

    Dim p As Integer,flag As Boolean

    If s >= "a" And s <= "z" Then

        p = Asc(s) - 96: flag = True

    Else

        p = Asc(s) - 64: flag = False

    End If

        ①   

    If flag Then zh = Chr(p + 96) Else zh = Chr(p + 64)

End Function

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t As String, a As Integer

    Dim tmp As String, k As Integer, s As String

    s = Text1.Text

    k = 1: a = 1

    For i = 1 To Len(s)

    t = Mid(s, i, 1)

    If t = " " Then

        k = 0: mw(i) = t

    Else

        If k < 3 Then

            mw(i + a) = t: a = -a

        Else

            tmp = zh(t)

            j = i

            Do While

                   ②  

                j = j + 1

            Loop

            mw(j) = tmp

               ③   

        End If

    End If

    k = k + 1

    Next i

    For i = 1 To Len(s)

        Text2.Text = Text2.Text + mw(i)

    Next i

End Sub

请回答下列问题:

  1. (1) 如果输入的原文单词是“TextBox”,则加密后的密文是
  2. (2) 加框处代码有错误,则正确的是
  3. (3) 请将划线处补充完整

     ② ③ 

下列代码的输出结果是(  )

s=[1,3,5,7,9]

s.insert(2,6)

print(s)

A . [1,3,5,7,9,2] B . [1,3,5,7,9] C . [1,6,3,5,7,9 ] D . [1,3,6,5,7,9 ]
在Python中,abs( ):求绝对值,math模块中的sqrt( ):求平方根,以下程序运行的结果为(      )

A . 9 B . 8 C . 16 D . 10