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

【加试题】小郭编写一个最大数查找的VB程序,功能如下:程序运行时,在文本框Text1中输入一个数字字符串,单击命令按钮Command1,在文本框Text2中输出最大3位整数(每个数字字符不可重复使用)。程序运行界面如图所示。

实现上述功能的VB程序如下。请在画线处填入适当的语句和代码,把程序补充完整。

Dim w As Integer         ‘变量w用于存储每次最大数字字符的位置

Private Sub Command1_Click()

  Dim t As String

  Dim i As Integer,j As Integer

  Dim max As Integer,S As Integer

  t=Text1.Text

  s=0

  For i=3 To 1 Step-1

    max=0

    For j=1 To Len(t)

       If Val(Mid(t,j,1))>max Then

       max=Val(Mid(t,j,1))

    ①  

      End If

    Next j

    s=s+    ②   

    t=delmax(t)

  Next i

  Text2.Text=Str(s)

End Sub

‘自定义函数功能是去除当前最大数字字符

Function delmax(t As String)As String

  delmax=    ③  

End Function

  1. (1) 在程序画线①处应填入

  2. (2) 在程序画线②处应填入

  3. (3) 在程序画线③处应填入

一段字符中的每个词(由大、小写字母组成)是倒序显示的,比如“Good night,Tom!”就倒序显示成“dooG thgin,moT!”。小王编写了一个VB程序,实现还原功能,即单击“还原”按钮后,将文本框Text1中倒序显示的内容还原,并在文本框Text2中输出结果。程序运行界面如图所示。

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

  1. (1) 观察程序代码,“还原”按钮的对象名为
  2. (2) 请在①、②的划线处填入合适的代码 

    Function zf(s As String) As Boolean

      zf = False

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

              ①       

      End If

    End Function

    Private Sub rev_Click()

    Dim s As String, ch As String, rv As String, rv1 As String

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

    s = Text1.Text

    rv = "" : i = 1

    Do While True

      ch = Mid(s, i, 1)

      Do While Not zf(ch) And i < Len(s)

        rv = rv + ch

        i = i + 1

        ch = Mid(s, i, 1)

      Loop

      j = i

      ch = Mid(s, j, 1)

      Do While zf(ch) And j <= Len(s)

               ②        

                  If j > Len(s) Then Exit Do

        ch = Mid(s, j, 1)

      Loop

      rv1 = ""

      For                   '改错

        rv1 = Mid(s,k,1)+rv1

      Next k

      rv = rv + rv1

    If j <= Len(s) Then rv = rv + Mid(s, j, 1)

      i = j + 1

      If i > Len(s) Then Exit Do

    Loop

    Text2.Text = rv

    End Sub

     ② 

  3. (3) 加框处代码有错,请改正。
数组a中存放了n * n个1000以内随机正整数按n行n列在列表框List1中显示(即第一行自左向右依次显示a(1)~a(n),第二行自左向右依次显示a(n+1)~a(2*n),)单击“水平翻转”按钮Command1,对矩形区域中的数据进行水平转,并将变换后的n * n个数据保存到数组b中,最后在列表框List2中显示(即第一行自左向右依次显示b(1)~b(n),第二行自左向右依次显示b(n+1)~b(2 * n),……)。程序运行界面如图所示。

小明依据上述描述设计了如下VB程序。请回答下列问题:

  1. (1) 当n=8时,第3列的元素变成第列。
  2. (2) 请在划线处填入合适的代码。

    Const n = 6

    Dim a(1 To n ^ 2) As Integer, b(1 To n ^ 2) As Integer

    Private Sub Form _ Load ( )

    ‘产生n * n个1000以内随机正整数,保存在数组a中

    ‘按格式整齐显示在List1中

    ‘代码略

    End sub

    Private Sub Command1_Click ( )

    Dim i As Integer, j As Integer

    Dim s As String, c As String

    For i = 1 To n

        For j = 1 To n

               ①        

    Next j

    Next i

    List2. Clear: c = “”

    For i = 1 To n * n

        c = c+ Ads(b(i), 4) + “”

        If        ②         Then

            List2. AddItem c

            List2 AddItem “”

            c = “”

        End If

    Next i

    End sub

    Function Ads (     ③        ) As String

    Dim sx As String, yx As Integer, i As Integer

        sx = Str(x): yx = Len(sx)

    For i = 1 To y-yx

        sx = “” + sx

    Next i

          ④       

    End Function

     ② ③ ④ 

小王编写了VB程序,功能如下:在窗体Form1的文本框Text1中输入要统计的人数,单击"统计"按钮运行程序,统计前n人的每科选课情况,数组a(1 to 300)中保存了每位同学的7选3科目(例如:a(1)="物化技"),数组b(1 to 7)用来保存“政史地物化生技”各科选课人数。

  1. (1) 窗体Form1的属性中没有的是(单选,填字母:A .Text /B .Caption/ C .Width)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

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

    Dim a(1 to 300) As String, b(1 to 7) As Integer

    Private Sub Form_Load()

    '读取每位同学的选课科目,保存到数组a(1 to 300)中,代码略

    End Sub

    Private Sub Command1_Click()

    n =    ①         

    s = "政史地物化生技" : temp=""

    For i = 1 to n

    temp = temp + a( i )

    Next i

    For i = 1 to len(temp)

    m =    ② 

    b(m) = b(m) + 1

    Next i

    For i = 1 to len(s)

    list1.Additem Mid( s, i, 1 ) +    ③    + "人"

    Next i

    End Sub

    Function pos(j As Integer ) As Integer  '该函数用于查找科目在s中的位置

    Dim k as Integer

    For k = 1 to len(s)

    If  Then pos = k : Exit For

    Next k

    End Function

     ② ③ 

  3. (3) 程序中加框处代码有错,请改正。
(加试题)最大回文子串。回文字符串是具有回文特性的字符串:即该字符串从左向右读,与从右向左读都一样。如:凤落梧桐梧落凤,abcba等。“最大回文子串”是指一个字符串中长度最大的回文字符串,其基本算法思想如下:

⑴每个回文都有一个“中心”,当回文字符数为奇数时,中间的那个字符就是回文中心;但是当回文的字符数为偶数时,回文的中心是最中间的那两个字符,且这两个字符相同。

⑵对任意一个字符或者相同的两个连续字符,我们都可以假设它为回文的“中心”,向它的 左右两边扩展出尽可能长的回文。对于每种假设,我们都能得到一个回文,而最长回文必定由 其中的某个假设中得到!

现编写一个程序,在 Text1 中输入一串字符,单击“统计”按钮,在 Text2 中显示该字 符串中的最大的回文子串(长度相同时,输出最左边的子串)。请回答下列问题:

  1. (1) 当 Text1 中输入“123321344332423112113123”时,则输出的结果为
  2. (2) 请在划线处填入合适的代码。

    Dim n As Integer

    Dim a(0 To 100) As String Private Sub Command1( Click)() Dim s As String

    Dim left As Integer, right As Integer, i As Integer

    Dim max As Integer, m As Integer, b1 As Integer

    '变量b1用于记录回文子串的左端起点

    Text2.Text = ""

    s = Text1.Text n = Len(s)

    For i = 1 To n

    a(i) = Mid(s, i, 1) Next i

    max = 0: left = 0: right = 0

    For i = 1 To n left = i

    right = i

    m = longest(left, right) If m > max Then

    b1 = i - m \ 2 max = m

    End If left = i

    right = i + 1

    If a(left) = a(right) Then

    m = longest(left, right) + 1

    If m > max Then

        ①   

    max = m

    End If

    End If

    Next i

    For i = b1 To     ②   

    Text2.Text = Text2.Text + a(i) Next i

    End Sub

    Function longest(left As Integer, right As Integer) As Integer

    Dim p As Integer p = 1

    Do While left > 1 And right < n And     ③   

    left = left - 1 right = right + 1 p = p + 2

    Loop

    longest = p

    End Function

     ② ③ 

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

⑴将该字符的ASCII码转换成对应的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中输入二进制数,单击“转换”命令按钮Command1,在文本框Text2中输出对应的十六进制数。程序运行界面如图所示,请回答下列问题:

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

    ‘函数 bw 功能:若二进制位数不足,通过在前面添"0"使得位数为 4 的倍数
    Private Function bw(x As Integer, y As String) As String

    Dim r As 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)

    End If

    bw =   ①   
    End Function

    Private Sub Command1_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 = Text1.Text

       n = Len(m)

       Text2.Text =“”

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

       For i = 1 To n - 3 Step 4

         s = 0

         For j = i To i + 3

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

           s =  ③  

         Next j

         If s >= 10 Then

           s1 = Chr(Asc("A") + s - 10)

         Else

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

         End If

         Text2.Text = Text2.Text + s1

       Next i
    End Sub

     ② ③

   函数执行完成后,由将表达式的值返回给调用者,结束函数。
小刘记录了某地每天最高气温和最低气温,现要编写VB程序,计算一周内最大温差(当日最高气温与最低气温之差)。功能如下:在文本框Text1中依次输入本周内每天的最高气温与最低气温(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算出最大温差,结果显示在Label1中。界面设计如下图所示:

  1. (1) Cmd 对象属于类 (单选,填字母:A . Form / B . Label / C . TextBox   D . CommandButton)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

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

    Dim min As Single, max As Single

    Dim d As Single, v As Single, s As String

    s = Text1.Text

    d = 0: maxd = 0

    j = 1: k = 1

    For i = 1 To Len(s)

       If Mid(s, i, 1) = "," Then

       

         j = i + 1

         If  Then

            max = v

         Else

            min = v

            d = max - min

            If d > maxd Then

    End If

         k = k + 1

       End If

    Next i

    Label1.Caption = "本周温差最大值为" & Str(maxd)

    End Sub

  3. (3) 加框处的代码有误,请改正:
  4. (4) 运行该程序,输入数据如上图所示,程序执行到循环结束时,变量k为
某数据解密算法描述如下:

1)在输入的数字字符串中依次提取有效的密文,有效的密文的特点:

①是一组连续的,都小于5的三位数字串;②每个位置上的数字不能被重复提取;

2)对有效密文进行解密的过程:

将密文作为一个五进制数转换为对应的十进制数值,根据ASCII字符的十进制编码表,得出对应的明文字符(提示:空格符所对应的ASCII码值为十进制数32,小写字母“z”所对应的ASCII码值为十进制数122).

例如,密文242转换成十进制数为72,对应的明文字符为大写字母“H”。

程序运行界面如下图所示,在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2中输出解密后的明文密码。

  1. (1) 若输入的密文为“841497230235”,则对应的明文是
  2. (2) 实现上述功能的VB代码如下。划线处的语句有错,应改为

    '以下代码是将有效密文数字转换为十进制数的函数

    Function conv(p As String) As Integer

      Dim k As Integer, q As String, i As Integer

      k = 0: g = ""

      For i = 1 To 3

        q = Mid(p, i, 1)

                ①          

      Next i

      conv = k

    End Function

    Private Sub Command1_Click()

      Dim st As String, p As String, res As String

      Dim c1 As String, c2 As String, c3 As String

      Dim i As Integer, d As Integer, n As Integer

      st = Text1.Text: n = Len(st)

      i = 1: res = ""

      Do While i <= n – 2    '提取有效密文,并进行转换

        c1 = Mid(st, i, 1): c2 = Mid(st, i + 1, 1): c3 = Mid(st, i + 2, 1)

        If c1<"5" Or c2 <"5" Or c3 <"5" Then

                  ②          

          d=conv(p)

        If d >= 32 And d <= 122 Then res = res + Chr(d)

                   ③         

        Else

          i = i + 1

        End If

      Loop

      Text2.Text = res

    End Sub

  3. (3) 请在划线处填入合适的代码.

     ② ③ 

有如下VB程序段:

Private Function f(x As Single, n As Integer)As Single

  If n=0 then

    f=1

  Else

    If n Mod 2=1 then

      f=x*f(x,n\2)

    Else

        f=f(x,n\2)\x

    End If

  End If

End Function

Private Sub Command1_Click( )

  Label1.Caption=Str(f(4,6))

End Sub

程序运行时,单击按钮Command1,标签Label1显示的内容是(  )

A . 1 B . 4 C . 27 D . 64
在数据加密过程中,为了防止加密方法外泄,往往使用密钥,只有掌握了密钥才能正确加密、解密。某信息加密VB程序,对输入的明文(由英文字母或数字组成的字符串)进行加密,输出加密后得到的密文。该程序使用的密钥是一个2位十进制数。数据加密方法对明文中的每个字符进行如下处理:

①将该字符的ASCII码加密钥后,转换成对应的8位二进制;

②将对应的8位二进制数进行按位取反(1变0,0变1);

③将最后产生的8位二进制数转换成对应的十六进制数;

④将得到的十六进制数码交换顺序后连接,即为该明文的密文。

例如,明文大写字母“A",输入的密钥数值为25,得到的密文为5A,信息加密过程如图所示。

小李编写了加密算法的VB程序,在文本框Text1中输入明文,单击“加密”按钮Command1。程序对明文数据依次进行加密处理,加密后生成的密文将显示在文本框Text2中。程序运行界面如图所示。

  1. (1) 如果输入的明文为大写字母“F",密钥为16,则生成的密文是
  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Function btoh(m As String)As String     ‘将4位二进制数转换成对应的十六进制数

      Dim s As Integer, i As Integer

      Dim st As String

      st="0123456789ABCDEF"

      s=0

      For i=1 To 4

          s=s*2 +Val(Mid(m,i,1))

      Next i

         ①   

    End Function

    Private Sub Command1_Click( )

      Dim ans,ch,s,ret,s1,s2 As String

      Dim a,b,c As Integer

      s= Text1.Text

      c= Val(Text2.Text)

      For i = 1 To Len(s)

          ch=Mid(s,i,1)   ‘取出第i个字符存入变量ch

          a=Asc(ch)

          b=a+c

          ret = " "

          For m=1 To 8             ‘完成加密步骤①和步骤②

              n=(b+1)Mod 2

              ret =str(n)+ ret

                 ②   

          Next m

          s1 = btoh(Mid(ret,1,4))    ‘完成加密步骤③和步骤④

          s2 = btoh(Mid(ret,5,4))

          ans=ans +s2+s1

      Next i

      Text3.Text=ans

    End Sub

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

在文本框Text1中输入待加密的n个字符(仅由ASCII码字符构成,最多支持960个字符),输入后单击加密按钮,在文本框Text2中产生密文。加密方式如下:

①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);

②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;

③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;

⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;

⑥在文本框Text2中输出sc。

例如:

①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);

②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;

③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;

④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;

⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;

⑥输出sc。

注:(asc(“0”)=48,asc(“A”)=65,asc(“a”)=97)

Private Sub command1_Click()

    Dim a(1 To 961) As Integer

    Dim sr, sc As String

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

    Dim b(1 To 961) As Integer

    Randomize

    k = Int(Rnd * 4 + 3)

    sr = text1.Text

    For i = 1 To 961

        a(i) = -1

    Next i

    a(961) = k + 64

    t = 960 / k

    For i = 1 To Len(sr)

        m = i Mod k - 1

        n = i \ k + 1

        If i Mod k = 0 then n = n - 1: m = m + k

           ①     = 127 - Asc(Mid(sr, i, 1))      ‘将密文存储到数组a中

    Next i

    For i = 1 To Len(sr) + 1

        j = j + 1

        Do While a(j) = -1

            j = j + 1

        Loop

        b(Len(sr) + 2 - i) = a(j)      ‘将有密文值的a数组元素存储到数组b中

    Next i

    For i = 1 To Len(sr) + 1

        sc =   ②         ‘连接密文并保存到sc中

    Next i

    text2.Text = sc

End Sub

Function space(x As Integer) As String

    For i = 1 To    ③  

        space = space & "0"

    Next i

End Function

  1. (1) 若加密后的密文为“068029041”,则随机数是;在Text1中输入的明文是
  2. (2) 在填写空白处缺失的代码。

字母排队游戏。有一组不重复的字母串,现根据大小写分别进行排队。排队规则如下:①根据字母大小写按原顺序提取字母,大写字母排一队,小写字母排一队;

②固定两队字母中最小字母在各队中的位置;

③将两队其余字母按从小到大的顺序排在各自最小字母的两边。大写字母队列先从最小字母右边排队,排到最后位置再从最小字母左边开始排,直到第一个位置为止。同理,小写字母队列先从左边开始排队,再排右边。过程如图1所示:

编写VB程序,实现字母排队功能:在文本框Text1中输入待排字母串后,单击“排队”按钮Comand1,在列表框List1中显示排队结果。程序运行界面如图2所示。

请回答下列问题:

  1. (1) 根据程序运行界面,“字母排队”是窗体Form1的(单选,填字母:A .对象名/B .属性名/C .属性值/D .过程名)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim flag(1 To 52) As Boolean      'flag数组初值为False

    Private Sub Command1_Click()

        Dim su As String, sd As String, ch As String      'su,sd分别存储大小写字母队

        Dim i As Integer, n As Integer

        Dim ku As Integer, kd As Integer

        s = Text1.Text:n =Len(s)

        For i=1 To n

            ch =

            If ch >="A" And ch <="Z" Then su= su+ ch

            If ch>="a"Andch<="z"Thensd=sd+ch

        Next i

        ku = search(su, 0)

        kd = search(sd, 6

        su=“”:sd=“”

        For i=1 To 52

            If flag(i) And i<=26 Then su=su+Chr(i+64)

            If flag(i) And i>26 Then

        Next i

        List1.AddItem sort(su,ku, 1)

        List1.AddItem sort(sd,kd, -1)

    End Sub

    Function search(s As String, k As Integer) As Integer     '确定字母队列并查找最小元素位置

        Min = Mid(s,1, 1)

        flag(Asc(Min) - 64 - k) = True

        mini = 1

        For i=2 To Len(s)

            ch = Mid(s, i,1)

            If ch<Min Then mini=i:Min=ch

            

        Next i

        search = mini

    End Function

    Function sort(s As String, wz As Integer, k As Integer) As String      '排队

        nx = Len(s)

        sort = Mid(s, 1,1)

        i=2

        nc=1

        Do While nc <= 2

            For j=wz+k To nx^((1 +k) \ 2) Step k

                If k= 1 Then

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

                Else

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

                End If

                i=i+1

            Next j

            

            nc=nc+1

        Loop

    End Function

  3. (3) 程序中加框处代码有错,请改正。
高一年级开展“7选3”选科调查,现要求每位学生在预选卡上填写个人信息(班级、学号、姓名)并选涂三门选考科目(少于或多于三门的预选卡作废)。如小王预选组合是“物生技”其三门选考科目填涂情况如图a所示。预选卡回收后,通过读卡机将相关信息读入数据库中,其中选科信息存储规则:按照“政治、历史、地理、物理、化学、生物、技术”顺序存储为一个7位二进制字符串。因此小王的选科信息二进制编号存储为“0001011”。

为了了解选科预选情况,统计选科组合种类及每种组合人数。小王设计并制作了VB程序。运行该程序,单击“读取”按钮,从数据库中读取信息并显示在列表框List1中;单击“统计”按钮,在列表框List2中显示每种选科组合人数(无人选择的组合不显示)及选科组合种类。程序运行界面如图b所示。

  1. (1) 若某个学生“7选3”的预选选科组合为“政史生”,则该选科组合对应的+进制编号为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim cla(1 To 1000) As Integer    ‘班级号

    Dim snum(1 To 1000) As String    ‘学号

    Dim sname(1 To 1000) As String    ‘姓名

    Dim xinxi(1 To 1000) As String    ‘选科信息二进制编号

    Dim xknum(1 To 127) As Integer    ‘各选科组合人数

    Dim n As Integer

    Private Sub Command1_Click()

        ‘从数据库中读取n名学生的班级、学号、姓名和选科信息分别存储在数组cla、snum、sname和xinxi中,并输出在列表框List1中,代码略。

    End Sub

    Private Sub Command2_ Click ( )

        Dim t As Integer, i As Integer, count As Integer

        For i=1 To n

            t = BtoD(xinxi(i))

            

        Next i

        count = 0

        For i=127 To 1 Step-1    ‘选科组合十进制编号的范围

            If  Then

                count = count + 1

                List2.AddItem change(i) +””+ Str (xknum(i)

            End If

        Next i

        List2. AddItem“选科组合种类共有:”+ Str (count) + “种”

    End Sub

    Function BtoD(s As String) As Integer    ‘将选科信息二进制编号转换为十进制编号

        Dim x As Integer, i As Integer

        x=0

        For i=1 To 7

            If Mid(s,i,1) = “1” Then

                x=

            End If

        Next i

        BtoD = x

    End Function

    Function change(c As Integer) As String

        ‘该函数的功能是将选科十进制编号转换成对应的组合名称,代码略。

    End Function

在Python语言中,用来定义函数的关键字是(   )。
A . return B . def C . function D . import
如图1文本文件“score.txt”中保存着若干个学生某次测试的成绩,编写一个计算机程序,从该文件中读取每个学生分数,统计并输出各等级的学生人数,程序运行界面如图2所示。

根据分数判断其所属等级的标准如下:

分数段

90~100

80~89

70~79

60~69

60以下

等级

A

B

C

D

E

实现该功能的程序段如下,请完善程序:

def check(a):

    if     

        level[0]+=1

    elif int(a)>=80:

        level[1]+=1

    elif int(a)>=70:

        level[2]+=1

    elif int(a)>=60:

        level[3]+=1

    else:

f=open("score.txt","r")

score=f.readline( )

level=[0]*5

while score:

   

    score=f.readline()

f.close()

for i in range(0,5):

        print("等级"++"的人数为:",level[i])

小杨同学编写了一个vb程序用于学校里7选3选课情况统计。该程序主要功能有: 1.点击“生成选课组合”按钮Command1,生成35种选课组合:2.点击“统计选课情况"按钮Command2,统计出各种组合的选课人数:运行界面如下图。实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 分析程序代码,图里“选课组合”序号为30的组合名称为:
  2. (2) 请在划线处填入合适的代码。请回答下列问题:

    Dim zh(1 To 16) As String,zrs As Integer

    Dim xk(1 To 1000) As String    '存放同学的选课科目组合,已知学生人数少于1000人

    Dim zh2(1 To 35) As String     '存放35种选课科目组合

    Dim rstj(1 To 35) As Integer     '存放各种选课组合选课人数

    Private Sub Form_ Load( )

        '本过程从数据库中读取学生的选课情况数据,存放在数组xk中,学生的总人数存放在变量zrs。

        '代码略

    End Sub

    Private Sub Command1_ Click()

        Dim iAs Integer, j As Integer, m As Integer, n As Integer, k As Integer

        Dim km(1 To 7) As String

        List1.Clear

        List1.AddItem "序号"+ "" + "组合名称"

        km(1) = "物": km(2) = "化": km(3)= "生": km(4)= "政"

        km(5) = "史": km(6) = "地": km(7)= "技"

        m= 1

        For i= 1 To 5

            For k=i+ 1 To 6

                zh(m) = km(i) + km(k)

                m=m+1

            Next k

        Next i

        j=3:n= 1:y=j

        For i= 1 To m

            For k=y To 7

                zh2(n)=

                If n<= 9 Then

                    List1.AddItemn&""&" " & zh2(n)

                Else

                    List1.AddItemn&" " & zh2(n)

                End If

                n=n+ 1

            Next k

            y=y+ 1

            If y= 8 Then

                j= : y=j

            End If

        Next i

    End Sub

    Private Sub Command2_ Click()

        Dim i As Integer

        List2.Clear

        List2.Addltem "组合名称" +""+ "选课人数”

        For i= 1 To 35

            rstj(i)=

            List2.AddItem zh2(i) +"" + Str(rsij(0)

        Next i

    End Sub

    Function tj(zhme As String) As Integer      '统计某种选课组合的选课人数

        Dim i As Integer, rs As Integer

        rs= 0

        For i= 1 To zrs

            If zhmc = xk(i) Then

                rs=rs+ 1

            End If

        Next i

        tj=rs

    End Function

小明在玩翻转棋盘的游戏,游戏规则是在一个4*4的棋盘中挑选棋子(棋子只有黑白两面,0表示白,1表示黑),对于每颗被挑选的棋子,要将该棋子和它在棋盘上的上下左右4个相邻位置上的棋子一起翻转,若某个方向上无棋子,则不作处理,最后使得棋盘纯色(纯白或纯黑)。

如上图所示的棋盘,需要选择第2行第2列、第4行第2列两颗棋子,按照规则进行翻转便可使得棋盘变为纯黑。现编写程序找出实现棋盘纯色所需翻转棋子次数最少的方案并输出所挑选棋子的个数,若无答案则输出“无法翻转为纯色”。

解决该问题的算法原理:棋盘翻转方案为0000000000000000~1111111111111111之间的某几种,即十进制数 0~65535,利用枚举算法在0~65535之间枚举,即可找到最优方案。假设被选翻转棋子状态用1表示被选中,0表示不选中。例如某方案的十进制为1028即 2^10+2^2,转化为一个16位的二进制串0000010000000100就表示该棋盘中的第2行第2列、第4行第2列这两个棋子及其上下左右被选中翻转,我们认为该方案选中两个棋子进行翻转。

程序运行界面如下图所示,请回答下列问题。

  1. (1) 若某方案用十进制表示为100,则该方案总共选择了个棋子进行翻转。
  2. (2) 实现上述功能的程序代码如下,请将划线处的代码补充完整。

    '数组a储存棋盘原状态,数组b储存翻转后的棋盘状态

    Dim a(1 To 16) As Integer, b(1 To 16) As Integer, minc As Long

    Private Sub Form_Load()

      '生成原始由0、1组成的棋盘状态,用数组 a(1)-a(16)保存,代码略

    End Sub

    Private Sub Command1_Click()

      Dim k As Integer, c As Integer, i As Long, j As Long

      minc = 100

      For i = 0 To 65535

        For j = 1 To 16       '初始化棋盘

          b(j) = a(j)

        Next j

        k = 16: c = 0: j = i

        Do While j > 0

          If j Mod 2=1 Then

            b(k) = 1 - b(k)

            If k > 4 Then b(k - 4) = 1 - b(k - 4)

            If  Then b(k + 4) = 1 - b(k + 4)

            If k Mod 4 <> 0 Then b(k + 1) = 1 - b(k + 1)

            If k Mod 4 <> 1 Then b(k - 1) = 1 - b(k - 1)

            c = c + 1

          End If

         

          k = k - 1

        Loop

        If Then minc = c

      Next i

      If minc = 100 Then Label1.Caption = "无法翻转为纯色!" Else Label1.Caption = "最少翻" + Str(minc) + "次"

    End Sub

    Function check() As Boolean       '判断棋盘是否纯色

      Dim flag As Boolean, i As Integer

      flag = True

      For i = 1 To 15

        If Then flag = False: Exit For

      Next i

      check = flag

    End Function

  3. (3) 代码加框处有误,请改正。
小明用VB编写了一个单词统计的程序,用于统计单词数量(单词数量不超过100个),并且在列表框List1中输出单词和单词出现的次数,程序界面如下图所示,VB程序代码如下。

请回答下列问题:

  1. (1) 若删除加框处代码后,输入数据“Hello>>world!”则输 出数据共行。
  2. (2) 请在划线处填入合适的代码。

    Dim f(100) As Integer, cnt As Integer

    Dim words(100) As String, s As String, c As String, tmp As String

    Function search(g As String) As Integer

        Dim flag As Boolean

        flag= True

        For i=1 Tocnt

    If Then search=i : flag= False

        Next i

        If flag Then

            cnt= cnt+ 1

            words(cnt)=g

    search= cnt

        End If

    End Function

    Private Sub Command1_ Click( )

        s=Text1.Text

        tmp=" "

        cnt= 0

        For i=1 To Len(s)

            c= Mid(s, i, 1)

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

                tmp= tmp+ C

            Else

    f(search( tmp))=

                tmp=""

            End If

        Next i

        For i=1 To

    List1. AddItem words(i) +Str(f(search( words(i))))

        Next i

    End Sub