过程与自定义函数 知识点题库

【加试题】小李编写一个统计学生选考科目的VB程序,算法的基本思想是:检查每位学生选课组合的编码是否有效,对有效选择结果进行科目统计,根据各科次占有效人数的百分率求出各科排名。程序运行时,单击“显示”按钮Commmad1,学生选课数据显示在列表框list1中,各科编号及对应科目名称显示列表框list2中,单击“统计”按钮Commmad2,选课结果按各科百分率由高到低显示在列表框list3中,程序运行结果如图所示。

_x0000_i1043

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 学生选课的编码数据存储在数据表中,其字段名为
  2. (2) 请在划线处填入合适的代码。

    Dim ach(1 To 500) As String     '存储各学生选课编码

    Dim bno(1 To 10) As Integer     '存储各科目编号

    Dim bname(1 To 10) As String    '存储各科目名称

    Dim bnum(1 To 10) As Integer    '存储各科目被选次数

    Dim bmc(1 To 10) As Integer     '存储各科目被选的名次

    Dim n As Integer, num As Integer

    Private Sub Command1_Click()

    Dim i As Integer, km As String

    km = "物理化学生物政治历史地理技术"

    Dim cn As New ADODB.Connection, rs As New ADODB.Recordset, sql As String

    cn.Open "provider=Microsoft.Jet.oledb.4.0;Data Source=" + App.Path + "\students.mdb"

    rs.Open "select * from choose", cn

    Do While Not rs.EOF

    n = n + 1 : ach(n) = rs.Fields("subject") : rs.MoveNext

    Loop

    rs.Close

    cn.Close

    Set rs = Nothing

    Set cn = Nothing

    For i = 1 To 7

    bno(i) = i

    bname(i) = Mid(km, (i - 1) * 2 + 1, 2)

       List2.AddItem Str(bno(i)) + "---" + bname(i)

    Next i

    End Sub

    Private Sub Command2_Click()

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

    Dim c As String, per As Integer

    For i = 1 To n

    If check(ach(i)) = True Then

    For j = 1 To 3

    c = Mid(ach(i), j, 1)

    bnum(Val(c)) =      

      Next j

    num = num + 1

    End If

    Next i

    i = 1

    Do While i <= 7'该循环得到各学科被选人数的名次

    bmc(i) = 1

    For j = 1 To 7

    If bnum(j) >bnum(i) Then      

    Next j

    i = i + 1

    Loop

    For i = 1 To 7

    For j = 1 To 7

    If        Then

    per = Int(bnum(j) * 100 / num * 100) / 100

    List3.AddItem Str(bno(j)) + "---" + bname(j) + "---" + Str(per) + "%"

    End If

    Next j

    Next i

    End Sub

    Function check(s As String) As Boolean

       '代码略! 若学生选科代码有效,函数返回True,否则返回False

    End Function

【加试题】为分析数组a中各元素依次变化的情况,进行如下定义:

●变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。

●波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。

●对称波峰:上升段与下降段个数相同的波峰称为对称波峰。

  下图为一组数据的变化段及波峰示意图。

现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计了如下VB程序。请回答下列问题:

  1. (1) 数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为

  2. (2) 请在画线处填入合适的代码。

    Const n=20

    Dim a(1 To n)As Integer

    Private Sub FormLoad()

        ‘读取数据,并存储到数组a中。代码略

    End Sub

    Private Sub Command1_Click()

        Dim flag As Integer   ‘存储变化段的状态:1表示升;-1表示降;0表示平

        Dim count As Integer    ‘存储对称波峰的个数

        Dim steps As Integer

        Dim i As Integer

        flag=0:steps=0:count=0

        For i=    ①   To n

          If a(i)>a(i-1)Then

            If IsSymPeak(flag,steps)Then count count+1

          If flag=0 Or flag=-1 Then

        ②  

          Else

             steps=steps+1

          End If

          flag=1

        EIself a(i)=a(i-1)Then

          If IsSymPeak(flag,steps)Then count=count+1

          steps=0

          flag=0

        Else

          steps=steps-1

          flag=-1

        End If

      Next i

      If IsSymPeak(flag,steps)Then count=count+1

      Text1.Text=Str(count)

    End Sub

    Function IsSymPeak(flag As Integer,steps As Integer)As Boolean

        If    ③    Then

           IsSymPeak=True

        Else

           IsSymPeak=False

        End If

    End Function

     ② ③ 

简化的VB词频统计程序。程序功能为:在文本框Text1中输入一篇英文文章,在文本框Text2中输入一个英文单词,单机“统计”按钮Command1后,在文本框Text3中显示这个英文单词出现的次数。程序运行界面如图所示。

查找的英文单词由连续的ASCII英文字符(a~z或A~Z)组成。组合词程序会进行分解,如river-small可拆分为2个单词river和small,查找的英文单词不区分大小写。程序代码如下,但加框处代码有错,请改正:

Private Sub Command1_Click()

Dim article As String,f As String,count As Integer

Dim i As Intege,,begin As Integer,s As String

article=Text1.Text : f=Text2.Text : count=0

begin = 1

For i=1 To Len(article)

   t = Mid(article,i,1)

   If Not(t>="A"And t<="Z" Or t>="a" And t<="z") Then

     If i > begin Then

        s =      '①

        If LowerCase(f)=LowerCase(s) Then

            count = count+1

        End If

      End If

          begin = i + 1

     End If  

  Next i

    Text3.Text=Str(count)

End Sub

Function LowerCase(word As String) As String    '单词转化为全小写的形式

Dim i As Integer,c As String

For i=1 To Len(word)

   c = Mid(word,i,1)

   '小写英文字母的ASCII码值比大写字母的值大32

   If c>="A" And c<="Z" Then c =    '②

   LowerCase = LowerCase + c

Next i

End Function

以上程序段运行时,为了实现上述功能,加框处代码应改正为:

;②

【加试题】删数问题。输入一个数字串s,删去其中k个数字(k<数字串中数字的个数),使剩余数字在保持相对位置不变的情况下构成一个值最小的整数。例如,s=“19990608”,k=4,处理结果为:608。

删数的算法如下:

⑴如果k>0,则从前往后检测相邻字符,否则,转⑶;

⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转⑴;

②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到⑴;

⑶去掉串首的0,输出结果。

按照上述算法思路,编写了VB程序,功能如下:在文本框Text1中输入数字串,在文本框Text2中输入删数的个数,单击“处理”按钮Command1,在文本框Text3中显示最小的整数。程序运行界面如图所示。

  1. (1) 如果输入的数字串为“20160125”,删除个数为4,则结果是
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    delete函数说明:delete(st,x,y)为自定义函数,功能为在字符串st中删除x位置开始的y长度的子串。

    Private Sub Command1_Click()

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

    s = Text1.Text

    k = Val(Text2.Text)

    n = Len(s)

    Do While k > 0

      i = 1

      Do While i < n And

        i = i + 1

      Loop

      If i = n Then

        

         n = n - k

         k = 0

      Else

         s = delete(s, i, 1)

         n = n - 1

        

      End If

    Loop

    i = 1

    Do While n > 1 And Mid(s, 1, 1) = "0"

       s = delete(s, 1, 1)

       i = i + 1

       n = n - 1

    Loop

       Text3.Text = s

    End Sub

    Function delete(st As String, x As Integer, y As Integer) As String

      delete = Mid(st, 1, x - 1) + Mid(st, x + y) 'mid函数第3个参数省略,则截取从开始位置向右到字符串结尾的所有字符

    End Function

数塔问题。一组数字构成如图a所示的数塔,从数塔顶层出发,每个结点可以选择移动至左下方或右下方结点,一直走到塔底为1条路径。求从数塔顶层到塔底各条路径上数字和的最大值。

解决此问题可采用自底至顶分析的方法。如图a所示的数塔中,先从第3层开始分析:如果路径经过第3层的第1个数字12,那么从12到尾结点的路径上数字之和的最大值是当前结点值加上该结点左下方、右下方结点中的较大值,记作f(3,1)=12+141同理,f(3,2)=7+15、f(3,3)=26+15:再分析第2层,计算f(2,1)、f(2,2):最后计算出第1层f(1,1),即为所求结果。

  1. (1) 如图a所示数塔各条路径上的数字和的最大值为

  2. (2) 编写VB程序,运行界面如图b所示,程序代码如下,请在划线处填入合适的代码,将程序补充完整。

    Const n= 5

    Dim a(1 To n^2) As Integer   ‘数组a存储数塔数据,存储结构如图c所示

    Dim f(1 To n^2) As Integer   ‘数组f存储从第i层第j个数到底层尾结点的最大数字之和,其存储结构与数组a一样

    Private Sub Command2Click()

    ‘生成数塔,将数据存入a数组中,代码略

    End Sub

    Private Sub Command2Click()

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

    For j=1 To n

    f((n-1)*n+j)=

    Next j

    For i=

    For j=1 To i

    k=(1-1)*n+j

    f(k)=

    Next j

    Next i

    Label1.Caption=“路径上的数字和最大值为:"+Str(f(1)

    End Sub

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

    If a>b Then max=a Else max=b

    End Function

一个简单的四则混合运算式子(算式中只包含整数、+、-、*、/、=)的运算规则是先进行“*”或“/”,再进行“+”或“-”,下列是用VB编写的简单四则混合运算的程序,运行程序时在文本框Text1中输入网则运算式子,单击命令按钮Command1,在标签Label1中输出结果。程序界面及代码如下。请回答以下问题。

  1. (1) 若在文本框Text1中输入式子“12*5-32/4+20=”,则运行程序后在标签Label1中显示的内容是
  2. (2) 请在划线①②③处填入合适的代码,让程序能实现计算功能。

        Private Sub Command1_Click()

          Dim a(1 To 100) As Single

          Dim b(0 To 100) As String

          Dim s As String, c As String

          Dim sz As Integer, i As Integer, k As Integer

          s=Text1.Text,

          k=0

          For i=1 To Len(s)

            c=Mid(s, i, 1)

            If c>="0" And c <= "9" Then

              sz=0

              Do While c>="0" And c<="9"

                sz=   ①  

                i=i+1

                c=Mid(s, i, 1)

              Loop

              k=k+1:a(k)=sz:b(k)=c

            End If

            Do While k>1 And    ②  

                If b(k-1)="+"Then a(k-1)=a(k-1)+a(k)

                If b(k-1)="-"Then a(k-1)=a(k-1)-a(k)

                If b(k-1)="*"Then a(k-1)=a(k-1)*a(k)

                If b(k-1)="/"Then a(k-1)=a(k-1)/a(k)

                b(k-1)=b(k)

                k=k-1

            Loop

          Next i

          Label1.Caption="运算的结果是:"+Str(a(1))

        End Sub

        Function yxj (x As String) As Integer

          If x="*"Or x="/"Then

            yxj=1

          ElseIf x="+"Or x="-"Then

            yxj=2

          Else

               ③  

          End If

        End Function

     ② ③ 

为分析数组a中各元素依次变化的情况,进行如下定义:

1)变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。

2)波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。

3)对称波峰:上升段与下降段个数相同的波峰称为对称波峰。下图为一组数据的变化段及波峰示意图。

现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题:

  1. (1) 数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为
  2. (2) 请在划线处填入合适的代码。

         Const n=20

         Dim a(1 To n)As Integer

         Private Sub Form_Load()

         '读取数据,并存储到数组a中,代码略

         End Sub

         Private Sub Commandl_Click()

         Dim flag As Integer '存储变化段的状态:1表示升,-1表示降,0表示平

         Dim count As Integer '存储对称波峰的个数

         Dim steps As Integer

         Dim i As Integer

         flag=0:steps=0:count=0

         For i=   ①   To n

           If a(i) >a(i-1) Then

             If IsSymPeak(flag, steps)Then count=count+l

             If flag=0 Or flag=-1 Then

                    ②        

             Else

               steps=steps+ 1

             End If

             flag=1

           ElseIf a(i)=a(i-1) Then

             If IsSymPeak(flag, steps)Then count=count+l

             steps=0

             flag=0

           Else

             steps=steps-1

             flag=-1

           End If

         Next i

         If IsSymPeak(flag,steps)Then count=count+1

         Text1.Text=Str(count)

         End Sub

         Function IsSymPeak(flag As Integer,steps As Integer)

         As Boolean

         If       ③      Then

           IsSymPeak =True

         Else

           IsSymPeak=False

         End If

         End Function

(郊游活动)有n名同学参加学校组织的郊游活动,已知学校提供给这n名同学的郊游总经费为cnt元,与此同时每位同学都自带了部分钱。为了方便郊游,活动地点提供m(n<=m<=100)辆自行车供人租用,租用每辆自行车也需要花费钱,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。

租车原则是首先考虑自带经费多的部分同学优先租相对花费少的自行车,尽量少花学校经费以达到最多同学租车的结果。比如学生带的钱为9,3,6,7,5,租车的钱分别需要15,8,12,6,9,11,如果5个人都能租车,至少需要学校提供经费为(6-3)+(8-5)+(9-6)+(11-7)+(12-9)=16,如果学校经费只有10元,则自带钱最少的同学不租车,这时所需学校经费为(6-5)+(8-6)+(9-7)+(11-9)=7。计算过程中采用二分查找法来判断租用自行车的人数能否达到最大值。

  1. (1) 若7位同学自带经费分别为5,17,15,12,10,9,14,自行车租车费用分别为27,14,27,25,17,18,23,21,学校提供经费为25元,则最多有位同学能够租用到自行车。
  2. (2) VB程序代码如下,请在划线处填入合适的代码。

    Dim a( 1 To 100) As Integer, b( 1 To 100) As Integer

    Dim n As Integer, m As Integer

    Private Sub Command1_Click() 

      Dim left As Integer, right As Integer, mid As Integer, an s As Integer

      n=Val(Text 1.Text) :m=Val(Text 2.Text)

    ‘从数据库读取n位同学带的钱存储在数组a,m辆自行车租用的钱存储在数组b,代码略。

    Call px(a(),n)

    Call px(b(),m)

    left =1:right=n:ans= 0

    Do While left<=right

      mid=(left+right) \ 2

      If check(mid) =True Then

        ① 

        right =mid-1

      Else

        left =mid+ 1

      End If

    Loop

    Label 1.Caption=“能租车的最大人数为”+Str(ans)

    End Sub

    Sub px(d() As Integer, s As Integer)

      Dimi as integer, j as integer, k as integer

      For i=2Tos

        k=d(i)

        j=i-1

       Do While k<d(j)

         d(j+1)=d(j)

         j=j-1

         If j=0ThenExitDo

      Loop

        ②  

      Next i

    End Sub

    Function check(mid As Integer) As Boolean

      Dim cnt As Integer, jf As Integer, t As Integer

      cnt=Val(Text 3.Text)

    For t=1Ton-mid+ 1

        If b(t) >a(mid+t-1) Then jf=b(t) -a(mid+t-1) Else jf= 0

          ③ 

      Next t

      If cnt>= 0 Then check=True

    End Function

     ② ③ 

有VB程序段:

Function c(m As Integer, n As Integer) As Long

  If n= m Then

    c=1

  Else

    If n=1Then c= m Else c=c(m-1, n-1)*m\n

  End If

End Function

Private Sub Command1_Click()

  Dim k As Integer, i As Integer, sum As Long

  k = Val (Text1. Text): sum= 0

  For i= 2 To k

    sum=sum+c(k,i)

  Next i

  Text2. Text = Str (sum)

End Sub

在文本框Text1中输入3,执行该程序段,则文本框Text2中显示的内容是(  )

A . 2 B . 6 C . 4 D . 8
有如下 VB 程序段:

Private Sub Command1_Click()

Dim i As Integer,s As string

s = ""

For i = 1 To 3 Step 2

 s = str(f(i)) + s

Next i

Text1. Text = 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 . 247 B . 27 C . 72 D . 742
给定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段末尾连续3个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含33,58,46,第3段“重叠块”包含55,62,69。

  1. (1) 给定2个区间,数组各元素为“12,44,34,45,66,50,45,70”,第1段“重叠块”中的元素个数为3个,第1个区间为[10,50],则第2个区间可能为(单选,填字母A .[30,80] /B .[9,45] /C .[60,90])。
  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用于保存统计结果:

    'c(1)、c(2)分别存储第1段"非重叠块"和"重叠块"的元素个数,

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

    'c(2m-1)存储第m段"非重叠块"元素个数,c(2m)存储

    第m段"重叠块"的元素个数(值为0)

    'c(2 m+1)存储剩余段元素个数

    Private Sub Command1_Click()

    Dim i As Integer, p As Integer, L 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 i <= n And p <= m

     If IsIn(i, p) Then

     If Then

     LL = LL + 1

     Else

     L = L + LL + 1

     LL = 0

     End If

     i = i + 1

     Else

     c(2 ∗ p - 1) = L

     c(2 ∗ p) = LL

     L = 0

     p = p + 1

     End If

    Loop

    If i <= n Then

    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 a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)

    And p <= m Then

     IsIn = True

    Else

     IsIn = False

    End If

    End Function

若两个素数之差为2,则该对素数称为双胞胎数,如3,5就是一对双胞胎数。编写python程序,实现如下功能:输入n的值,统计显示n以内的所有双胞胎数。程序运行界面如图所示:

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

def isprime(x):

    for i in range(2,x):

        if  :

            return False

    return True

n=int(input("请输入一个正整数 n:"))

c=0

k=3

while k<=n-2:

    if isprime(k) and  :

        print(k,k+2)

        

    k=k+1

print("共有"+str(c)+"对双胞胎数")

在python语言中,通过关键字(     )来定义函数。
A . def B . function C . fun D . procedure
完善程序实现如下功能并保存:

有5个人坐在一起,第5个人说他比第4个人小3岁;第4个人说他比第3个人小3岁;第3个人说他比第2个人小3岁;第2个人又说他比第1个人小3岁;第1个人说他是38岁。编写程序,计算出第5个人的年龄并显示。

def age(n):

    if n == 1: c =

    else: c = age(n - 1) - 3

    return

print("第5人的年龄:",age())

input("运行完毕,请按回车键退出...")

数据的有损压缩:对多媒体数据进行有损压缩时,以少量数据丢失作为代价的,比如对某8 bit量化缩为6 bit量化,其算法可简单表示为:逐一删除各个字节的后2 bit,将删除后的6 bit数据首尾相连,然后重新按照8 bit一组构建字节,以十六进制显示。

例如,压缩前的原始数据为:

11111100  010111010  10110000可表示为十六进制:FC  5A  B0

删除每字节的后2 bit:

111111  00  010110  10  101100  00

首尾相连构建新的数据:

11  11110101  10101100表示为十六进制:…F5  AC

自此,原数据进行了有损压缩。程序运行界面如下所示,

实现上述算法的VB程序如下,但程序中加框处有误,请改正。

Dim a(1 To 100) As Integer

Const code="0123456789ABCDEF"

Const n=100

Private Sub Form_Load()       '以随机数模拟读取原始数据

    s=""

    Randomize

    For i=1 To n

        a(i)=Int (Rnd()*16)

        Text1.Text=Text1.Text+   '①

    Next i

End sub

Private Sub Command1_Click()

    For i=1 To n

        t=t+HtoB(a(i))

    Next i

    For j=1 To n* 4 Step 8              '每8位一组每8位一组,取前6个字符

        s=s+Mid(t, j, 6)

    Next j

    For i=1 To 4 *(n-1) Step 4        '每4位一组转为十六进制显示

        Text2.Text= Text2.Text +BtoH (Mid(s, 1, 4))

    Next i

End sub

Function HtoB (x As Integer) As String       '十六进十六进制转为二进制函数

    t=""

    m=0

    Do While  '②

        r=x Mod 2

        m=m+1

        t= Trim(r)+t                      'trim()用于删除前导空格

        x=x\2

    Loop

    HtoB=Mid("0000", 1, 4-m)+t

End Function

Function BtoH (y As String) As String      '二进制转为十六进制函数

    t1=Val(Mid(y, 4, 1))

    t2=Val(Mid(y, 3, 1))

    t3=Val(Mid(y, 2, 1))

    t4=Val(Mid(y, 1, 1))

    s=t1+t2*+t3*4+t4*8

    BtoH= Mid(code,s+1,1)

End Function

  1. (1) ①处加框代码应改为
  2. (2) ②处加框代码应改为
替代密码是明文中的每个字符根据密钥替代成密文中的另一个字符,替代后的各个字母保持原来的位置。

例:使用凯撒密码对明文“yza”进行加密的过程:“yza”→121 122 97→…→ 98 99 100 →“bcd”

要求:如果明文是大写字母则需要转小写。如果明文是其它字符则不作任何处理。例如:明文为“ABc,z”密钥为3,则结果密文为“def,c”

  1. (1) 如果明文为“EAa:H”密钥为3,则结果密文为
  2. (2) 程序实现如下,请在划线处补充代码。

    def change(code,key):

       #change函数功能:实现要进行加密的字符code由大写字母转小写字母

    #判断转换后的字符code是否为小写字母,若是则进行加密

      

       m=ord(code)

       return chr(m)

    code=input(“请输入要加密的明文”)

    key=int(input(“请输入密钥”))

    code_new=“”

    for i in code:

       code_new+=change(i,key)

    print(code_new)

小明设计一种简易的加密方式,规则如下:

A)在输入的字符串中提取英文字母,作为需要加密的明文(明文字符数必须是3的倍数,不足3位的舍去)

B)将明文ASCII码分成3个字节一组,顺次连接后得到24位二进制数;

C)将得到的24位二进制数字按每6位一组分成4组,每组6个位;

D)在C)中得到的6个位前补上2个0,得到8个字节的二进制数;

E)将D)中得到的8个二进制数分别转换为十进制数;

F)将得到的数字用随机产生的大写字母连接起来,以大写字母结尾

按照上述规则,设计了一个加密VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中英文字母提取,将3的倍数个的字母转换为4个数字,并输出在文本框Text2中程序运行效果如下图所示。请回答下列问题:

  1. (1) 在Text1中输入A9B20C@D1E,已知产生的随机字符顺序为英文字母表,则在Text2中显示的是
  2. (2) 请在划线处填入合适代码。

    Private Sub Command1_ Click()

        Const maxn= 100

        Dim s As String, i As Integer, n As Integer

        Dim ch As String, k As Integer, jg As String

        Dim a(1 To maxn) As Integer, b(1 To maxn) As Integer

        s= Text1. Text

        n=0

        For i=1 To Len(s)

        ch= Mid(s, i, 1)

            If  Then

                n=n+1

                a(n)= Asc(ch)

            End If

        Next i

        

        For i=0 To k

            b(i * 4+1)=a(i*3+1)\ 4

            b(i*4+2)=

            b(i*4+3)=(a(i*3+2)Mod16)* 4+a((i- 1) *3+3)\ 64

            b(i*4+4)=a(i*3+3)Mod64

        Next i

        Randomize

        jd= ""

        For i=1 To 4 * (k+1)

            jd=jd+Str(b(i)) +

        Next i

        Text2. Text=jd

    End Sub

    Function pd(c As String) As Boolean

        pd= False

        If c>="A" And c<="Z" Or c>="a" And c<="z" Then:

            pd= True

        End If

    End Function

有Python自定义函数mychar(),执行程序,输入字符串“吃葡萄不吐葡萄皮”,输入字符“葡”,输出结果为(    )

def mychar(s,c):

  count=0

  for i in s:

    if i==c:

      count+=1

return count

x1=input('请输入字符串:')

x2=input('请输入字符:')

print(mychar(x1,x2))

A . 5 B . 2 C . 4 D . 1
用Python编辑器打开“Y:\93”下的文件“求组合数.py”,实现以下功能并保存结果。

①请填空完善该程序,实现功能:计算组合数Cnm=n!/(m!*(n-m)!),其中n!=1×2….. ×n,m和n均为正整数,且m<=n<=1000。

②编写完成后原名保存并关闭应用软件。

def fac(n):      #用递归的方法求n!

    if n == 0:

        return 1

    else:

        return n*

n=int(input("请输入正整数n的值:"))

m=int(input("请输入正整数m的值(m<=n):"))

c = //(fac(m)*)

print(c)

有一种ASCII字符加密的算法,其加密过程如下:

①将明码中每个字符的ASCII码转为八位二进制,依次连接

②位置加密:每4位一组进行移位,第1组左移一位,并将原第一位数码移至最后(如0110转化为1100),第2组右移一位,并将原最后一位数码移至头部(如0001转化为1000),第3组左移...以此类推,实现位置加密,并将每组移动后的结果转换成十进制,按顺序连接

③值加密:随机产生一个密钥key,在符号列表['+','*','//','%']中取出对应运算符号,将②中的十进制结果分别与密钥key进行运算,顺次连接求得该字符的密文,(如key为3,取得运算符'%',则字符'a'的高位密文为12%3=0,低位密文为8%3=2,顺次连接后得'a'的密文为'02'

④将每个字符的密文顺序连接,得到最终字符串密文。

用Python编写的程序运行结果如图所示,请回答下列问题:

  1. (1) 当 key=3时,输入要加密的明文:“aA”,则输出的密文为:        
  2. (2) 请在划线处,填入适当的语句或语句表达式

    import random

    def jzzh(x):

        s=''

        for i in range(8):

            r=x%2

            s= 

            x=x//2

        return s  

    def jisuan(x):      #进行key运算

        m=0

        if fh[key]=='+':

            m=x+key

        elif fh[key]=='*':

            m=x*key

        elif fh[key]=='//':

            m=x//key

        elif fh[key]=='%':

            m=x%key

        return m

    def yidong(x):      

        jg=''

        n=len(x)//4

        for i in range(n):

            if i%2==0:         

                f= 

            else:               

                f=x[i*4+3]+x[i*4:i*4+3]

            s=0

            for j in f:      #将4位二进制转成十进制

                s=s*2+int(j)

            jg+=    

        return jg      

    mingw=input('请输入要加密的明文:')

    fh=['+','*','//','%']

    miw='' global key

    key=random.randint(0,3) for a in mingw:

        a=ord(a)

        L=jzzh(a)

        miw+=L jieguo=yidong(miw)

    print("产生的随机密钥为:",key,"\n 密文为:",jieguo)