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

编写“矩形面积”程序,实现如下功能:按一定比例随机生成a(1)至a(100)数组元素的值:0或1(0多1少);将这100个数组元素,按行依次转化为10×10的二维阵列; 当数组元素的值为0 时显示成“□”,当数组元素的值为1时显示成“◆”,并在列表框 List1中输出。寻找阵列中,由“□”字符构造出的最大面积的矩形,在标签Label1中显示最大面积所占的单位数。程序运行界面如图所示。

实现上述功能的VB代码如下:

Dim a(1 To 100) As Integer Private Sub Command1_Click()

Dim i As Integer, s As Integer, smax As Integer ‘用于随机生成数据,并将阵列按规则在列表框中输出,该部分功能的代码略。

smax = 0

For i = 1 To 100

If a(i) = 0 Then s = search(i) If s > smax Then smax = s

Next i

Label1.Caption = "最大面积的矩形,占" + Str(smax) + "个单位。" End Sub

Function search(i As Integer) As Integer

Dim x As Integer, x1 As Integer, xend As Integer Dim y As Integer, y1 As Integer

Dim s As Integer

x = (i - 1) Mod 10 + 1   '起始列号 y = (i - 1) \ 10 + 1    '起始行号 x1 = x

y1 = y xend = 10

search = 0

Do While y1 <= 10

If a((y1 - 1) * 10 + x) = 1 Then Exit Do   '判断 x1 = x

Do While x1 <= xend

If a((y1 - 1) * 10 + x1) = 1 Then

x1 = x1 – 1   '改错

Else

x1 = x1 + 1

End If Loop

y1 = y1 + 1

s = (x1 - x) * (       )   '填空 If s > search Then search = s

Loop

End Function

请回答下列问题:

  1. (1) 根据程序的运行界面,没有 Caption 属性的控件为类(单选,填字母: A .窗 体/ B .命令按钮/ C .列表框/ D .标签)。
  2. (2) 程序代码中,去除“判断”处语句,是否会影响程序的结果(选填:是/否)。
  3. (3) 程序代码中,“改错”处的语句有误,请改正。
  4. (4) 程序代码中,将“填空”处的语句补充完整。
执行以下代码,单击命令按钮Command1后,显示在窗体上第二行的内容是(  )

Private Sub Command1_Click()

Dim n As Integer, m As Integer

n=2:m=0

Do While m < 3

   n=n+2

   If fun(n) Then

      Print n

      m=m+1

   End If

Loop

End Sub

Function fun(x As Integer) As Boolean

   fun=false

   If x/2=Int(x/2) Then

      fun=fun(x/2)

   Else

      If x=1 Then fun=True

   End If

End Function

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

删数的算法如下:

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

⑵①若所有相邻字符都已非降序,则将串尾k个字符删去,k值置0,转(1);②若相邻两数存在逆序(即前一个数>后一个数),则将前一个数删除,k值变化,然后回到(1);

⑶去掉串首的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

    Dim 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

情报员小王在工作时发现R国会用一些对称字符(如ABBA、ABA、123321)进行通信。R国为防止通信内容被破解,会在对称字符的头、尾加一些无关字符,如:12ABBA、ABAKK、5123432198。因此小王编写了一个VB程序,用于读取通信字符串中最长的对称字符。在文本框Text1中输入通信字符,单击“读取”按钮 Command1,在标签Label2中显示最长的对称字符,程序运行界面如图所示。请完善代码。

Private Sub Command1_Click()

Dim x As String, n As Integer, i As Integer

Dim k As Integer, start As Integer

Dim max As Integer

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

max = 0: start = 1

For i = 1 To n

 k = n

 Do While k > i

  IfAnd k - i + 1 > max Then

  max = k - i + 1

  start=i

 End If

 Loop

Next i

Label2.Caption =“最长回文字符串为” + Mid(x, start, max)

End Sub

Function isPa(t As String) As Boolean ’判断是不是回文数

Dim i As Integer

For i = 1 To Len(t) \ 2

 If Mid(t, i, 1) <> Mid(t, Len(t) - i + 1, 1) Then isPa = False

Next i

End Function

自定义函数delStr(S,m)的功能是删除字符串S中第m位上的字符,

Function delStr(S As String, m As Integer)As String Dim n As Integer

n= Len(s)

If m<1 Or m>n Then

delStr="输入位置有误!"

ElseIf m=1 Then

delStr=Mid(S, 2, n-1)

ElseIf m<n Then

   ①  

ElseIf m=n Then

delStr=Mid(S, 1, n-1)

End If

End Function

则划线①处代码填写正确的是(  )。

A . delStr=Mid(S, 1, m)+Mid(S, m+1, n) B . delStr=Mid(S, 1, m-1)+Mid(S, m, n) C . delStr=Mid(S, 1, m)+Mid(S, m, n-m) D . delStr=Mid(S, 1, m-1)+Mid(S, m+1, n-m)
在VB中,判断一个整数的各位上的数字是否重复的自定义函数,请在程序划线处填入合适的代码。

Private Function judge(t As Long)As Boolean

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

s=Str(t): judge =False

For i =1 To Len(s)-1

s1 = Mid(s, i, 1)

For j =i+ 1 To Len(s)

If    ①   Then Exit Function

Next j

Next i

    ② 

End Function

 ② 

   函数的调用采用的方式。
随着信息技术的发展,公众号:技术那玩意安全性越来越受到人们的重视,为了提升信息的安全性,发送信息时需要对信息进行加密处理,某信息的加密算法如下所示:

①将发送信息中的每一个字符的八位二进制取反

②第1、2、4、8位上插入4个二进制数,若取反后的八位二进制数中1的个数是偶数,插入的4个二进制是1、0、1、0,否则是0、1、0、1

③将12位二进制分为3段(4位一段),每一段的最后一个数字移动到最前面,并将移动后的4位二进制数抓换为十六进制数,转换后的3位十六进制数即是加密后的字符字符"A"的加密过程如下表所示:

原文“A”转换成8位二进制数取反

1 0 1 1 1 1 1 0

插入4位二进制数1、0、1、0

1 0 1 1 0 1 1 0 1 1 1 0

4位1段,最后一个数字移动到最前面

1101 0011 0111

转换为十六进制数,即密文

D37

按照上述规则,小明设计了一个加密的VB程序,程序功能如下:在Text1中输入待加密的字符,单击“加密”按钮,将加密后的字符显示在Text2中,程序运行界面如下图所示,请回答如下问题:

  1. (1) 在Text1中输入“b”,则Text2中显示的内容是  (已知ASC("a")=97)
  2. (2) 请在横线处填入合适的代码。

    Private Sub Command1_Click()

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

      Dim a(1 To 12) As Integer

      Dim mingw As String, miw As String

      mingw = Text1.Text

      For i = 1 To Len(mingw)

        n = Asc(Mid(mingw, i, 1))

        j = 8

        Do While

          a(j) = (n + 1) Mod 2 count = count + a(j)

          n = n \ 2

          j = j - 1 Loop

          For k = 1 To 4

            m = 8 + k - 1

            Do While m >= 2 ^ (k - 1)

              a(m + 1) = a(m)

              m = m –1

            Loop

             

          Next k

          For t = 1 To 3

            miw =

          Next t

          Text2.Text = miw

      Next i

    End Sub

    Function rev_btoh(b(i) As Integer, start As Integer, ending As Integer) As String
      Dim i, sum As Integer

      Const code = "0123456789ABCDEF"

      sum = b(ending)

      For i = start To ending - 1

        sum = sum * 2 + b(i)

      Next i

      rev_btoh = Mid(code, sum + 1, 1)

    End Function

  由于交易程序错误,十进制系统的数字被重新排列。例如:将0改为2,1改为3,2改为0,如果正确的数据为“021”,则现在系统显示“203”。该交易系统的用户特别关心他们在系统中的排名,所以公司决定紧急编写一个程序,该程序能将系统显示的价值按真实价值升序排序。

程序要求如下:给定需要排序的数字(十进制混乱版本)和映射,返回按正确的十进制值升序排序的混乱数据,如果多个映射值相等,则返回的值按其显示的原始顺序。(采用插入排序算法实现:其基本思想是将整个数组分为左边有序和右边无序两个部分,每次取出无序部分的第一个元素,把它插入到有序部分的合适位置,直至所有的数据有序为止。)

例如,固定长度为10的映射{“3”,“5”,“4”,“6”,“2”,“7”,“9”,“8”,“0”,“1”}

和混乱的错误数据{“990”,“332”,“32”}

将“990”映射为“668”:

第一个数字为“9”。在映射数组中,9在位置6处,因此映射值得第一位是“6”。

第二个数字为“9”。在映射数组中,9在位置6处,因此映射值得第一位是“6”。

第三个数字为“0”。在映射数组中,0在位置8处,因此映射值得第一位是“8”。

按同样的方法,“332”映射为“004”,“32”映射为“04”。

“004”和“04”转换成整数都是4,按整数值排序会产生{4,4,668},而保留“332”和“32”的顺序会得到混乱数据为{“332”,“32”,“990”}。

程序VB代码如下:

Const m = 1000

Const n = 10

Dim mapping(1 To n) As String    '存储映射数字

Dim nums1(1 To m) As String    '存储现在的错误数据

Dim nums2(1 To m) As String    '存储原始的正确数据

Private Sub Form_Load()

'读取系统中现在的错误数据存储在数组nums1中,并将数据添加到列表框list1,代码略

'读取映射数字存储在mapping数组中,代码略

End Sub

Private Sub Sort_Click()

    Dim errornum As String

    Dim rightnum As String

    Dim i, j As Integer

    Dim temp As String

    Dim s As String

    For i = 1 To m

        nums2(i) = ""

        For j = 1 To Len(nums1(i))

            errornum = Mid(nums1(i), j, 1)

                ①    

            nums2(i) = nums2(i) + rightnum

        Next j

    Next i

    '对原始正确数据进行升序插入排序

    For i = 2 To m

        temp = nums2(i): j = i - 1

        Do While Val(temp) < Val(nums2(j))

            nums2(j + 1) = nums2(j)

            j = j - 1

            If j = 0 Then Exit Do

        Loop

           ②  

    Next i

    For i = 1 To m

        nums1(i) = ""

        For j = 1 To Len(nums2(i))

            nums1(i) = nums1(i) +     ③  

        Next j

    Next i

    s = ""

    For i = 1 To m

        s = s + nums1(i)+ " "

    Next i

    List2.AddItem s

End Sub

'根据错误数字返回正确数字

Function match(x As String) As String

    Dim i As Integer

    For i = 1 To n

        If mapping(i) = x Then Exit For

    Next i

    match = CStr(i - 1)

End Function

请回答下列问题:

  1. (1) 根据代码可知,下列具有Caption属性的对象是(单选,填字母:A . List1/ B . Sort/ C . Text1)
  2. (2) 将程序横线处的代码补充完整。

     ② ③ 

  3. (3) 若mapping数组为{“4”,“2”,“3”,“7”,“6”,“8”,“1”,“0”,“9”,“5”},混乱数据为{“425”,“63”,“25”,“778”},则最终列表框List2中显示的是
某加密程序的Python程序段如下:

def encrypt(code,key):

    code_ new = " "

    for s in code:

        s1= 97 +((ord(s)-97)+key) % 26

        code_ new + = chr(s1)

    return code_ new

c = input('code=')

b = encrypt(c, 3)

print(b)

  1. (1) 函数encrypt中所用的加密算法是
  2. (2) 如果从键盘输入的字符串c为“student”,那么输出的字符串为
  3. (3) 你认为该程序段存在哪些不足之处?该如何改进?
某加密算法的加密程序段如下:

def enpwd(msg, key):

    size = len(msg)

    result= [ ]

    for i in range(key):

        t=i

        while t<size:

            result.append(msg[t])

            t+=key

    return".join(result)

msg = input('请输入待加密的明文:')

key = int(input('请输入密钥:'))

pwd = enpwd(msg, key)

print(pwd)

  1. (1) 如果输入的msg为“12345678”, key为“3”,那么输出的结果为
  2. (2) 这种加密机制称为(选填:“替代密码”“换位密码”或“简单异或密码”)。
某地区开展新冠疫苗接种工作,疫苗共有ABC三类,数量有限。符合下列条件的人员,可安排接种:①待接种第一针的;②已接种某类疫苗30天以上可接种该类第二针的。待接种人员按优先级进行排序(优先级数值小的表示优先级高)。

编写程序,实现接种序号发放的功能:运行程序,列表框List1中显示待安排接种人员信息(其中A32表示已经接种A类疫苗32天,B2表示已经接种B类疫苗2天,以此类推;F表示待接种第一针),在文本框Text1中输入可使用的疫苗情况(A-100代表有A类疫苗100剂),单击“序号发放”按钮Command1,在列表框List2中显示持接种序号人员信息。程序运行界面如图所示:

请回答下列问题:

  1. (1) 要使命令按钮Command1上显示“序号发放”,是通过设置其属性得到。
  2. (2) 请在划线处填入合适的代码。

    Dim bh(1 to 2000)As Integer, yxj(1 to 2000) As Integer

    Dim xm(1 to 2000) As String,qk(1 to 2000) As String

    Dim num As Integer

    Private Sub Form_Load()

        '读取编号,优先级,姓名,接种情况分别存在bh,yxj,xm,qk 数组并输出到List1中

        '接种总人数存入num,代码略

    End Sub

    Private Sub Command1_click( )

        Dim s As String, p As String, x As String

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

        s = Text1.Text

        p = Mid(s,1,1)

        n = Val(Mid(s, 3, Len(s) - 2))

        For i = 1 To n

           

            For j = i + 1 To num

                If    Then k= j

                ElseIf check(qk(k), p) = True Or check(qk(j), p) = True Then

                    If yxj(k) > yxj(j) Then k = j

                End If

            Next j

            If k<> i Then

                t = bh(k): bh(k) = bh(i): bh(i) = t

                t = yxj(k): yxj(k) = yxj(i): yxj(i) = t

                x = xm(k): xm(k) = xm(i): xm(i) = x

                x = qk(k): qk(k) = qk(i): qk(i) = x

            End If

        Next i

        List2.AddItem "接种序号" + " " + "姓名"

        For i = 1 To n

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

        Next i

    End Sub

    'check 函数用于判断是否符合该类疫苗的接种条件

    Function check(ch As String, key As String) As Boolean

        IfThen

            check = True

        Else

            If Mid(ch, 1, 1) = key And Val(Mid(ch, 2, Len(ch) - 1)) > 30 Then check = True

            Else

                check = False

            End If

        End If

    End Function

  3. (3) 程序中加框处代码有错,请改正。
LZW编码是一种自适应词典编码,通过建立一个字典,实现字符的编码。假设输入的字符串中仅有小写字母和空格,编码方法如下:

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

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

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

4)继续扫描字符串,截取单词,并按照步骤(3)的方法进行处理,直至整个字符串编码完毕。字符串“abab”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

函数如下

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
在数据压缩中,一个常用的途径是行程长度压缩。对于一个待压缩的字符串而言,我们可以依次记录每个字符及重复的次数。这种压缩,对于相邻数据重复较多的情况比较有效。 例如,如果待压缩串为“AAABBBBCBB”,则压缩的结果是(A,3)(B,4)(C,1)(B,2)。

现要求根据输入的字符串(长度在1000 以内),全部由数字和字母组成,得到大小写不敏感压缩后的结果(即所有小写字母均视为相应的大写字母)。如:原字符串为aAABBbBCCCaaaaa,压缩后的结果(A,3)(B,4)(C,3)(A,5)。

实现这一功能的程序代码如下:

Private Sub Command1_Click()

    Dim s As String, s1 As String

    Dim tmp As String, ans As String

    Dim i As Integer, j As Integer

    s = Text1.Text

    s1 = ""

    For i = 1 To Len(s)

        s1 = s1 & ToUpcase()

    Next i

    i = 1

    Do While i <= Len(s1)

        tmp = Mid(s1, i, 1)

        ans = ans & "(" & tmp & ","

        j = i + 1

        Do While j <= Len(s1) And Mid(s1, j, 1) = tmp

            j = j + 1

        Loop

        ans = ans && ")"

        

    Loop

    Text2.Text = ans

End Sub

Function ToUpcase(c As String) As String

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

        ToUpcase = Chr(Asc(c) - 32)

    Else

        ToUpcase = c

    End If

End Function

在画线处填入适当的语句或表达式,将程序补充完整。

小明用VB编写了统计短文(不超过500字)中英语单词频次的程序。在文本框Text1中输入短文,单击“单词统计”按钮Count后,在列表框List1中按字典升序输出单词(不区分大小写)和出现频次,程序运行结果如图所示。

请回答下列问题:

  1. (1) 观察程序代码,该事件处理过程名为
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Count_Click()

        Dim word(1 To 500) As String, num(1 To 500) As Integer

        Dim s As String, c As String, tmp As String, t As Integer

        Dim i As Integer, j As Integer, k As Integer, low As Integer, high As Integer

        Dim m As Integer, n As Integer, b As Integer

        For i = 1 To 500

            num(i) = 0

        Next i

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

        i = 1 : b = 1 : m = 0 : j = 0

        Do While i <= n

            c = Mid(s, i, 1)

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

                j = j + 1

            Else

                If j > 0 Then

                    tmp = 

                    low = 1

                    high = m

                    Do While low <= high

                        t = (low + high) \ 2

                        If tmp = word(t) Then

                            Exit Do

                        If tmp < word(t) Then

                            high = t - 1

                        Else

                            low = t + 1

                    Loop

                    If   Then

                        For k = m To low Step -1

                            word(k + 1) = word(k)

                            num(k + 1) = num(k)

                        Next k
                         

                        num(low) = 1

                        m = m + 1

                    Else

                        num(t) = num(t) + 1

                    End If

                    j = 0

                End If

                b = i + 1

            End If

            i = i + 1

        Loop

        List1.Clear

        For i = 1 To m

            List1.AddItem word(i) + ":" + Str(num(i)) + "次"

        Next i

    End Sub

    Function Lowcase(t As String) As String

        Dim c As String, s As String, i As Integer

        s = ""

        For i = 1 To Len(t)

            c = Mid(t, i, 1)

            If c >= "A" And c <= "Z" Then s = s + Chr(Asc(c) + 32) Else s = s + c

        Next i

         

    End Function

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 . ①④
小方同学在某网站注册时需要预设登录密码,预设密码需要符合以下2点:①密码不少于6位字符组成;②必须同时包含大写英文,字母、小写英文字母、阿拉伯数字和标点符号。据此,该同学编写了生成密码的VB程序,程序运行界面如图a所示,当点击“生成密码”按钮( command1)时,在文本框Text1中输出符合要求的密码字符

图b为标准ASCII码表供你参考(其中ASCII为1-32,127的字符为特殊符号,不能用作密码):

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

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

    Private Sub Command1_Click() 

        Dim t As Integer, flag as Boolean

        Dim pwd as String ,n as Integer

        Dim a(1 To 4) As Integer

        flag= True

        n=0

        pwd=" "

        Randomize

        Do While flag

            t=             '随机生成33~126的ASCII码

            pwd= pwd+Chr(t)

            s= 0

            For i=1 To 4

                s=s+a(i)

            Next i

            n=n+1

            If n>=6 And s=4 Then

        Loop

        Text1. Text= pwd

    End Sub

    '获取字符类型:1-小写字母,2-大写字母,3-阿拉伯数字,4-符号

    Function check(x As Integer) As Integer

        If x>=97 And x <= 122 Then

            check= 1

        ElseIf x >=65 And x <=90 Then

            check= 2

        ElseIf x>=48 And x <=57 Then

            check= 3

        Else

            check= 4

        End If

    End Function

  2. (2) 以下字符串不可能是上述程序生成的密码的一项是(填数字序号)

    ①H2? N64Aj

    ②[26wv9,Q

    ③$ 14G/uv④zX}rb! T&}d2

小炫报名参加“智力大冲浪”节目。比赛规则如下:

比赛开始时参赛者将预先得到M元奖金。

比赛时间分为N个时间段(N≤100),有N个小游戏,每个时间段可完成1个游戏,第i个小游戏必须在规定期限t(i)时段前完成(1≤t(i)≤N),否则要从奖金M元中扣去奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。注意:比赛绝对不会让参赛者赔钱!

例如:当N=5,M=100时,

游戏编号

1

2

3

4

5

完成期限t(i)

1

4

2

3

2

扣除奖金数w(i)

5

4

10

8

7

在这种情况下,小炫依次完成编号为5、3、4、2、1的小游戏,获得了最高奖金95元。

他的算法思想:让扣款高的游戏尽量准时完成,扣除的奖金越少,则最后赢取的奖金越多。

1)按扣款数值从大到小排序,在样例中,排序后游戏编号依次为3、4、5、1、2;

2)对于游戏i,在时间段1到t(i)完成,效果都是一样的,所以尽量放置的时间段t(i)完成,若该时段已经被占用,则依次考察时间段t(i)-1,t(i)-2,……,1。在样例中,

①考虑游戏3,放置在时间段2完成(注:t(3)=2);

②考虑游戏4,放置在时间段3完成(注:t(4)=3);

③考虑游戏5,时间段2已被游戏3占用,放置在时间段1完成(注:t(5)-1=1);

④考虑游戏1,时间段1已被游戏5占用,不能按时完成,放到时间段5;

⑤考虑游戏2,放置在时间段4完成(注:t(2)=4)。

小炫按如上算法编写了一个VB程序,计算“智力大冲浪”游戏中玩家最多可赢取的奖金,将结果输出到文本框Text1中。

VB程序代码如下所示,请在划线处填入合适代码。

Dim n As Integer, m As Integer

Dim t (1 To 100)As Integer     '变量t(i)表示第i个游戏的完成期限

Dim w (1 To 100) As Integer    '变量w(i)表示第i个游戏未完成要扣除的奖金

Dim f (1 To 100)As Boolean     '变量f(i)表示第i个时段是否已经被占用

Private Sub Form_ Load()

    '初始化游戏设置信息,时段数量n、初始奖金数m、数组t、数组w

    '代码略

End Sub

Sub swap(x As Integer, y As Integer)    '自定义过程,可以用Call语句来调用该过程

    Dim z As Integer

    z=x:x=y:y=z

End Sub

Sub sort()     '自定义过程,可以用Call语句来调用该过程

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

    For i=1 To n-1

        For j=i+1 To n

            If w(i)< w(j) Then

                Call swap(w(i), w(j))     '调用自定义过程

                

            End if

        Next j

    Next i

End Sub

Private Sub Command1_Click()

    Dim i As Integer, k As Integer, p As Integer

    Call sort      '调用自定义过程

    tot=0

    For i=1 To n

        f(i)= True

    Next i

    For i=1 To n     '对每个游戏从该游戏的规定期限开始往左找可用时间段

        '找到则完成该游戏,否则放弃该游戏

        p=-1

        k=t(i)

        Do While k >0 And p=-1

            If f(k)= True Then

                p=k

                f(k)= False

            Else

                

            End if

        Loop

        If p=-1 Then tot=tot +w(i)

    Next i

   

    Text1. text= str(ans)

End Sub

小王为班级联欢会设计了一个抽奖程序,将所有同学的编号和对应的姓名分别保存在数组a(全班共50个同学,编号为1到50)和数组b中,程序会随机产生一个1到50的正整数(同时包括1和50),作为中奖编号。

程序界面如图所示,左边列表框List1中显示同学的编号和姓名,单击“抽奖”按钮(Command1),在标签Label3 中显示抽中的编号,同时在标签Label4中显示“恭喜***同学”,其中具体同学的姓名从数组b中获取。

解决此问题的程序段如下:

Dim a(1 To 50) As Integer

Dim b(1 To 50) As String

Function search(m As Integer) As Integer

    search= 0

    For i=1 To 50

        If m=a(i) Then

            search=a(i)

        End If

    Next i

End Function

Private Sub Command1_ Click()

    Dim c As Integer, t as integer

    Randomize

        ①   

    Label3. Caption= Str(c)

    t= search(c)

    If t<>0 Then

        Label4. Caption=“恭喜”+   ②    +“同学”

    End If

End Sub

Private Sub Form_ Load()

    '此过程用于对数组a和数组b进行初始赋值,代码略

End Sub

  1. (1) 函数search中所用的算法是。(选填:顺序查找或对分查找)
  2. (2) 在程序中划线处土填入合适代码。

     ② 

最近更新