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

【加试题】居民身份证号码由十七位数字本体码和一位数字校验码组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。校验码生成步骤如下:

①把身份证前 17 位的每个数字和加权系数相乘并累加求和。身份证号码前17位数的加权系数见下表:

身份证号位数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

加权系数

7

9

10

5

8

4

2

1

6

3

7

9

10

5

8

4

2

②根据步骤①求得的和值,与11做取余运算得到序号,再根据序号提取校验码字符。如:所得和值除以11的余数为“0”,则对应的校验码为“1”。如下表:

序号

0

1

2

3

4

5

6

7

8

9

10

校验码

1

0

X

9

8

7

6

5

4

3

2

    若步骤②中提取的校验码和身份证号最后一位相同,则校验通过,否则校验失败。

    某人根据上述原理设计了一个身份证校验VB程序,功能如下:程序启动时从数据库student.accdb中读入全校学生身份证数据(全校共15个班级),并在列表框List1中显示,单击“校验”按钮Command1,在列表框List2中输出各班身份证号出错学生的信息和出错人数,若某班无出错学生,则不显示。程序界面如图所示。实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 某人身份证号的前17位为“33900520000101007”,根据上述步骤可计算出该身份证号的第18位校验码是
  2. (2) 请在划线处填上合适的代码。

    Const max = 1000

    Dim n As Integer  '存放学生人数

    Dim sfzh(1 To max) As String, xm(1 To max) As String  

    '数组sfzh、xm分别存放学生身份证号、姓名

    Dim bj(1 To max) As Integer, flag(1 To max) As Boolean

    '数组bj、flag分别存放学生班级、身份证校验结果

    Dim cw(1 To 15) As Integer   '数组cw存放各班身份证号出错人数

    Function check(x As String) As Boolean

    '本函数功能:校验身份证号x,若校验通过返回True;否则返回False

      Dim i As Integer, sum As Integer, xh As Integer, jym As String

      Dim a(1 To 18) As Integer, w(1 To 18) As Integer

    jym = "10X98765432" : sum = 0

      For i = 18 To 2 Step -1

    a(i) = Val(Mid(x, 19 - i, 1))

      Next i

      For i = 18 To 1 Step -1

    w(i) = 2 ^ (i - 1) Mod 11

      Next i

      For i = 2 To 18

    sum = sum + a(i) * w(i)

      Next i

    xh = sum Mod 11

      If = Mid(x, 18, 1)  Then check = True Else check = False

    End Function

    Private Sub Form_Load()

      '本过程从数据库中读入指定数据到数组sfzh、xm、bj,并在List1中显示

      Dim conn As New ADODB.Connection

      Dim rs As New ADODB.Recordset

    conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source=" + App.Path + "\student.accdb"

    conn.Open

      Set rs.ActiveConnection = conn

    rs.Open "select * from stu"

    '本过程其它语句略,学生人数存变量n,数组cw各元素初值置为0

    End Sub

    Private Sub Command1_Click()

      Dim i As Integer, j As Integer

      For i = 1 To n

        If  check(sfzh(i)) Then flag(i) = True Else flag(i) = False

      Next i

      For i = 1 To 15

        For j = 1 To n

         If  bj(j) = i And flag(j) = False Then

           

          List2.AddItem sfzh(j) + "  " + xm(j)

         End If

        Next j

        If cw(i) > 0 Then

          List2.AddItem Str(i) + "班共有以上" + Str(cw(i)) + "个身份证号错误"

          List2.AddItem ""

        End If

      Next i

    End Sub

落球游戏。小球从上方随机垂直掉落在孔(“.”)、平板(“-”)、左右滑坡(“/”“\”)、隔板(“|”)后,运动情况如下:

●小球落在孔上,入孔:

●垂直落在平板上,停下;

●落在左滑坡向左滚动,右滑坡向右滚动。若遇平板继续滚动,遇孔则入孔;遇隔板或滑坡则停下;或超出边界;

●落在隔板上,可能向左或向右滑落,概率分别为50%。滑落后运动规律与左右滑坡相同。

假设两个隔板不相邻且左右滑坡总是以“八”出现。小球入孔或超出边界则消失,记消失的概率为100%;小球若停下,记消失的概率为0。

如图a所示,小球随机落下,最终消失的平均概率计算过程如下:

(100%+100%+100%+0.5*(100%+0)+0+0+100%+100%+0.5*(100%+100%)+100%)/10=75%

编写VB程序求解小球消失的概率,程序运行界面如图b所示,代码如下,请回答下列问题:

    Dim s As string

    Dim prob As single

    Private Sub Command1 Click()

    Dim i As Integer, c As string

    s Text1 Text

    prob =0

    For i =1 To Len(s)

    c= Mid(s, i, 1)

    If c=“.” Then

        prob= prob +100

    ElseIf c =“/”Then

        prob= prob slope(i, True)

    ElseIf c=“\” Then

        prob prob+ slope(i, False)

    ElseIf c=“|” Then

        prob =prob+      

   

    End If

Next i

Text2 Text= Str(prob Len(s))

End sub

Function slope(k As Integer, flag As Boolean)As Single

Dim c As string

If flag Then

    For j=

        c= Mid(s, j, 1)

        If c =“.” Then slope =100: Exit For

        If c=“|” Or c=“\”Then slope =0: Exit For

    Next j

    If j< 1 Then slope =100

Else

    For j=k+ 1 To Len (s)

        c= Mid(s, j, 1)

        If c=“.”Then slope =100: Exit For

        If c=“|” Or c=“/” Then slope =0: Exit For

    Next j

    If j>Len(s) Then slope =100

End If

End Function

  1. (1) 在文本框中输入:“ ”则小球消失的概率为
  2. (2) 加框代码有误,请改正。
  3. (3) 请在划线处填入合适代码。
  4. (4) 若删除虚线框处的代码,运行程序,则      。(单选,填字母)
    A . 输出的概率值变大 B . 输出的概率值变小 C . 程序调试错误 D . 输出的概率值不变
幻方是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。n阶幻方是由1~n2之间的自然数组成的一个n阶方阵,其各行、各列及对角线所含的数字之和均相等。例如3阶幻方(如图1),幻和为15。

奇数阶幻方的构造是所有幻方中最简单的,可以按照如下规则来实现:

⑴将1放在第一行中间一列;(如图2)

⑵从2开始直到n*n为止,各数按下列规则存放:

假设当前要存放的数为k,则k存放在k-1)数的右上方并按照规则

①若(k-1)放在第1行且不是最后一列,则将k存放在n行,(k-1)所在列右侧;(如图3)

②若(k-1)放在第n列且不是第一行,则将k存放在第1列,k-1)的上1行;(如图4)

③若(k-1)即不在第1行也不在最后1列:

若(k-1)右上方有数,则将k放在(k-1)的下1行的同一列。(如图5)

若(k-1)右上方没有数,则将k放在(k-1)的右上方;(如图6)

④若(k-1)在第1行第n列,将k填在(k-1)的正下方(如图7)

  1. (1) 用下图的程序生成5阶幻方后,List1中的第一行显示的是

  2. (2) 30阶以内的幻方程序如下图,代码如下,请完成代码填空

        Private Sub Command1_Click()

        Dim i As Integer, i As Integer, n As Integer      ‘i表示行,j表示列

        Dim a(1 To 1000) As Integer, k As Integer      ‘数组a依次保存幻方中的数

        Dim s As String

        n= Val(Text1.Text)

        j=  ①   : a(j)=1

        i=1

        For k =2 To n*n

            If i=1 And j<>n Then

            i=n: j=j+1

            a((i-1)*n+j)=k

        ElseIf j= n And i<> 1Then

              ②   : j=1

            a((i-1)*n+j)=k

        ElseIf i=1 And j=n Then

            i+1 =1

            a((i-1)*n+j)=k

        ElseIf i <> 1 And j<> n Then

            If   ③   Then

                i=i-1:j=j+1

            va((i-1)*n+j)=k

            Else

                i=i+1

                a((i-1)*n+j)=k

            End If

        End If

    Next k

    List1. Clear

    For i=1 To n

        s=“”

        For j=1 To n

            s=s+ format(a((i-1)*n+j))

        Next j

        List1AddItem s

    Next i

    End Sub

    Function format( x As Integer) As String      ‘将数字字符串格式化为3个字符长度

    Dim n As integer, i As Integer

    format =Str(x)

    n=Len(format)

    For i=1 To   ④ 

        format ="”+ format

    Next i

    End Function

     ② ③ ④ 

质数又称素数,是指除了1和本身之外不再有其他因数的数。如果两个质数的差为2,则这两个质数称为生质数对。编写VB程序实现:单击“显示李生质数对”按钮Command1,在列表框List1中显示100以内的所有孪生质数对(运行效果如图所示)。实现上述功能的VB代码如下,请完成以下问题。

  1. (1) 要在程序运行时窗体Form1标题显示“李生质数对”,则可在Form_Load ( )事件过程中添加的代码是(单选,填字母:A .Form1. Caption = “孪生质数对” /B .Text.text “李生质数对”/C .Label. Caption = “李生质数对”)。
  2. (2) 程序代码中的加框处语句有错,请改正。
  3. (3) 在划线处补充完成程序代码。

    Dim a(1 To 50) As Integer

    Private Sub Command1_Click ( )

    Dim i As Integer

    k=0: i=3

    Do While i <= 100

        If           Then  ‘改错

            k = k+1

            a(k) = i

                 ①          

        i = i+2

    Loop

    For i=2 To k

        If       ②        Then

            List1. AddItem str(a(1-1))+“和”+str(a(i))

        End If

    Next i

    End sub

    Function prime( x As Integer) As Boolean    ‘判断是不是质数

    prime = True

    For i=2 To Int (Sqr(x))

        If x Mod i = 0 Then prime= False : Exit For

    Next i

    End Function

     ② 

执行以下代码,单击命令按钮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
对n项(n<=100)数据序列的前x项求和,可设计如下算法:将数据序列存储在数组a中,并按一定规则转换成数组c,再借助数组c实现求和.

将数组a转换成数组c的方法描述如下:

①将数组a中的元素依次存储到数组c中,把当前数组c看作第一层;

②把第一层中的各元素进行如下处理:奇数项值不变,偶数项的值更新为自己与自己前一项的和,将更新后的数组元素看作第二层;

③把第二层中的各元素,按上述方法进行同样操作,更新后的数组元素看作第三层;

④以此类推,直到当前层中仅有一项为止。

例如x=11时,转换过程如图所示:

借助数组c,可快速计算出数组a中前x项的和.例如,数组a中前11项的和,可由表达式c(11)+c(10)+c(8)得到.表达式具体分析过程如下:

②表达式第一项为c(11);

②将下标11转换成二进制数1011,计算该二进制数最右边的“1”所对应的权值,再用11减去此权值得到10,即表达式第二项为c(10);

③按上述方法继续操作,直到计算结果等于0为止。

小龙依据上述方法设计了如下vb程序.请回答下列问题:

  1. (1) 计算数组a中前22项和的表达式为(填写表达式,如c(11)+c(10)+c(8))。
  2. (2) 请在划线处填入合适的代码。

    Dim n As Integer

    Dim a(1 To 1000) As Long, c(1 To 1000) As Long

    Private Sub Form_Load()

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

    End Sub

    Private Sub Command1_Click()

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

    For i = 1 To n

    c(i) = a(i)

    Next i

    k = 2 '当前层第一个偶数项的位置

    space = 1 '当前层偶数项与前一项的间距

    Do While k <= n

    For i = k To n Step k

    c(i) = c(i) + c(i - space)

    Next i

    k = k * 2

    Loop

    End Sub

    Private Sub Command2_Click()

    Dim x As Integer, sum As Long

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

    Do While x <> 0

    sum = sum + c(x)

    Loop

    Text2.Text = Str(sum)

    End Sub

    Function lowbit(x As Integer) As Integer

    Dim temp As Integer

    temp = x: lowbit = 1

    Do While ③'

    lowbit = lowbit * 2

    temp = temp \ 2

    Loop

    End Function

数组 a 规模为(m+1)×n,其中 a(1) ~a(m ∗ n)元素中存储数据,数据中m×n个元素按行序排列成一个数字矩阵如图所示。计算每列数据的和,并依次存储在m+1行对应的数组元素中。

依据该算法思想,设计一个VB程序,实现该功能的代码如下,请回答下列问题。

  1. (1) 根据代码可知,该程序的按钮对象名是
  2. (2) 在程序划线处填上合适代码。

    Const m = 6

    Const n = 5

    Dim a(1 To (m + 1) ∗ n) As Integer

    Private Sub Form_Load()

    '数组初始化,生成 m×n 个两位数的随机整数并赋值给数组a

     Randomize

    For i = 1 To m ∗ n

     a(i)=    ①    

    Next i

    End Sub

    Private Sub Cod1_Click()

    Dim i As Integer, j As Integer

    For i = 1 To n

        ②    

    Next i

    '将计算后数据,按 m + 1 行,n 列输出到列表框中,代码略

    End Sub

    Function sum(y As Integer) As Integer         '函数功能是计算每列数据和

    sum = 0

    For i =     ③     

     sum = sum + a(i)

    Next i

    End Function

     ② ③

有如下VisualBasic自定义函数:

Function f(x As Integer) As Single

  f=Abs(x)

End Function

该函数返回值的数据类型是(    )

A . 整数型 B . 日期型 C . 逻辑型 D . 单精度实数型
某字符(限ASCII字符)加密算法,对明文中的每个字符进行下列加密处理:

1)将该字符的ASCII码转换成对应的2位十六进制数;

2)将产生的十六进制数互换位置;

3)步骤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

完全数又称完美数,是指所有的真因子(除了自身以外的约数)之和恰好等于它本身的数。例如:6的真因子有1,2,3,相加等于其本身(1+2+3=6),所以6是一个完全数。现编写一个VB程序,求完全数。其功能如下:输入一个正整数n,点击“查找”按钮,在列表框List1中输入小于n的所有完全数。界面如图所示,请将程序补充完整。

该程序的代码如下:

Private Sub Command1_Click()

  Dim n,r,j,i As Integer

  n=Val(Text1.Text)

  For i=1 Ton-1

    If   ①   Then

      List1.AddItem Str(i)

    End If

  Next i

End Sub

Function Div(n As Integer)As Integer

  Dim sum As Integer

    For i=1 Ton-1

      If     ②    Then

        sum=sum+i

      End If

  Next i

  Div=sum

End Function

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

编写VB程序统计单词个数。要求:在文本框Text1中输入英语短文,单击“统计”按钮,单词的个数显示在Text2中(假定每个单词仅包含英文字母)。程序界面如图所示,按此要求编写程序如下:

Function Stod(ch As String)As String

  Dim n As Integer, i As Integer

  Dims As String, st As String

  For i=1 To Len(ch)

    s=Mid(ch, i, 1)

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

      s=Chr(Asc(s)-32)

    End If

    ______________

    Stod=st

  Next i

End Function

Private Sub Command1_Click()

  Dim article, f As String, s1, s2 As String

  Dim i As Integer, m As Integer

  Dim flag As Boolean

  article=Stod(Text1. Text):f=Stod(Text2. Text)

  m=0:flag=False

  For i=1 To Len(article)

    y=Mid(article, i, 1)

    If y>="A"Andy<="Z"Then

        If flag=False Then

            s1=

            s2=Mid(article, i+Len(f), 1)

            If s1=f And Not(s2>="A" And s2<="Z") Then

              m=m+1

          End If

          flag=True

      End If

    Else

      flag=False

    End If

  Next i

  Label2.Caption="单词"+Text2.Text+“出现"+Str(m)+"次"

End Sub

  1. (1) 要在文本框Text1中输入这段英文内容,需要修改Text1的属性值(单选,填字母:A .Caption/B .Text/C .Font/D .Height)。
  2. (2) 请将程序代码中的画线处语句补充完整。
  3. (3) 程序代码中的加框处有误,请改正。
  4. (4) 程序代码中,flag=表示一个单词的开始,即当前字一个单词的首字母。
如果两个质数的差为2,则这两个质数称为李生质数对。编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框List1中显示100以内的所有孪生质数对。如图所示。

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

Dim a(1 To 50)As Integer

Private Sub Command1_Click( )

  Dim i As Integer

  k=0:i=3

  Do While i<=100

      If  Then     ‘①

          k=k+1

          a(k)=i

      End If

      i=i+2

  Loop

  For i=2 To k

      If   Then     ‘②

          List1.Addltem Str(a(i-1))+ "和"+Str(a(i))

      End If

  Next i

End Sub

Function prime(x As Integer) As Boolean

  prime=False

  For i=2 To Int(Sqr(x))

    If x Mod i=0 Then

      prime=True

      Exit For

    End If

  Next i

End Function

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

斐波那契数列又称黄金分割数列,指的是这样一个数列:0,1,1,2,3,5,8,13,21,34……在数学上,斐波那契数列以下面的方法来定义:

F(0)=0 (n=0)

F(1)=1 (n=1)

F(n)=F(n-1)+F(n-2) (n≥2)

输出斐波那契数列中第10个数的Python程序如下:

def fib(n):

    a,b= 0,1

    for i in range(n):

       

return a

print(fib(10))

关于加框处的代码,下列说法正确的是(     )

A . 最多执行1次 B . 最多执行9次 C . 交换a和b的值 D . 从数列中的第三项起,每一.项都是它 相邻的前两项之和
AB两个篮球队进行了多场比赛,现在要统计比分并确定获胜球队。计分规则是胜场多的队伍获胜,若胜场相同,则计算累计小分(小分=本队得分-对手得分),小分多获胜,若还是相同,则算平局。小蓝同学根据上述算法编写了一个VB程序实现比赛结果统计。每场比分记录在文本框Text1中,单击“统计”按钮command1,把两队每场按AB两队比分差降序显示在列表框list1中,同时在文本框Text2输出最终结果。部分程序界面如图所示。

Private sub command1_click()

    Dim a(1 to 20) as integer,b(1 to 20) as integer,i as integer

    Dim j as integer,t as integer,p as integer,k as integer,xiaofen as integer

    ‘从文本框读取AB两队各场的比分分别存数组a、b,场次k,代码略

    For i=1 to k-1

        For j= 1 to      ①      

            If     ②        then

                t=a(j):a(j)=a(j+1):a(j+1)=t

                t=b(j):b(j)=b(j+1):b(j+1)=t

            End if

        Next j

    Next i

    p=0 : xiaofen=0

    For i=1 to k

        If a(i)>b(i) then     ③      

        xiaofen = xiaofen+a(i)-b(i)

        List1.Additem str(a(i)) + “:”+ str(b(i))

    Next i

    If p*2>k or k=p*2 and xiaofen>0 then

        Text2.text = “A队获胜”

    Elseif  then

        Text2.text = “B队获胜”

    Else

        Text2.text = “两队平局”

    End if

End sub

  1. (1) 若希望程序在运行时列表框list1内容清空,则应该在代码中添加语句(单选,填字母:A . list1.additem \B . list1.clear \C . list1.caption )
  2. (2) 在程序划线处填入合适代码,使程序完整

     ② ③ 

  3. (3) 加框处代码有错误,请改正。
某物品柜有5层,每层有10个格子,每个格子只能放一个物品。第1层格子编号依次为1到10,第2层格子编号依次为11到20,依此类推。有9组物品(组号1~9),每组有2到8个物品,物品总数不超过50个。将9组物品按组号由小到大依次放入柜中,放置方式有两种:

1)整体放置。按格子编号由小到大的次序查找第一个可放置该组全部物品的空区域(空区域是指从某个空格子开始的同层连续的所有空格子),若找到,则在该空区域居中、连续放置该组全部物品,如图a所示。

2) 零散放置。若所有空区域格子数都小于该组物品数,则将该组每个物品依次放置在当前编号最小的空格子中,如图b所示。

编写VB程序,模拟物品放置。运行程序,在列表框List1中显示每组物品的组号和数量,单击“放置”按钮Command1,在列表框List2中显示每组物品放置结果。程序运行界面如图c所示。

图c

  1. (1) 若第1、第2组的物品数分别为6和2,则放置第2组物品的格子编号依次为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Constm = 50     'm表示物品柜的格子数

    Const w = 10    'w表示物品柜每层的格子数

    Const n = 9    'n表示物品的组数

    'f(i)存储第i个格子开始的同层连续的所有空格子数。f(i)为0表示第i个格子不是空格子

    Dim f(m)As Integer

    Dim a(n)As Integer

    Private Sub Form_Load( )

    '读取各组物品的个数依次存入数组a,并在List1中显示

    '代码略

    End Sub

    Function getpos(r As Integer As Integer

    '按格子编号从小到大的次序,查找空格子数≥r的第一个空区域

    '若找到,返回该空区域的起始编号,否则返回 -1

    '代码略

    End Function

    Private Sub Command1_Click( )

        Dim i As Integer,j As Integer, k As Integer,p As Integer,v As Integer

        Dim s As String

        For i = 1 To m

            f(i) = w -(i -1)Mod w     'w为10,表示每层的格子数

        Next i

        v = 1

        For i = 1 To n

        s = ""

        p =

        If p = - 1 Then

            j = 1

            Do While j < = a(i)

                If f(v) <> 0 Then

                    s = s + Str(v)

                    f(v)=

                    j = j + 1

                End If

               

            Loop

        Else

            k =(f(p)- a(i)) \ 2

            For j = k To 1 Step - 1

                f(p) = j

                p = p + 1

            Next j

            For j =

                f(j) = 0

                s = s + Str(j)

            Next j

        End If

        List2. AddItem "第" + Str(i) + "组:" + s

        Next i

    End Sub

小安需要在一个n*n(4<=n<=10)的房间里使用黑白两种地砖铺设房间,要求相邻的两块地砖颜色都不同。房间里会随机产生m(m<=10)根柱子,如果最后黑白两种地砖使用的数量相同,就认为可以铺满整个房间。小安将a数组元素值设置为0、1和2三种,当数组a的值为0时显示“□”,代表白地砖,为1时显示“■”,代表黑地砖,为2时显示“○”,代表柱子。最后,小安还求出了任意两根柱子之间的最大面积,单位长度为1(当两个柱子在同一行或同一列,认为面积为0,面积求法如图b所示)。

图a

图b

程序运行界面如图a所示。实现上述功能的VB代码如下:

Dim n As Integer, m As Integer

Dim a(1 To 100) As Integer

Dim b(1 To 10) As Integer 'b数组存储柱子位置

Dim f(3) As Integer, i As Integer 'f数组存储三种类型的个数

Private Sub Command1_Click()

    n = Val(Text1.Text):m = Val(Text2.Text)

    k = 0

    For i = 1 To m

        b(i) = Int((Rnd * n ^ 2) + 1)

        a(b(i)) = 2

        For j = 1 To i - 1

            If b(i) = b(j) Then

                   ①   

                Exit For

            End If

        Next j

    Next i

    '将房间设置为黑白两种颜色交错,白黑以0、1代替

    For i = 1 To n * n

        

        If a(i) = 0 And k = 1 Then

            s = s + "■": a(i) = k

        ElseIf a(i) = 0 And k = 0 Then

            s = s + "□": a(i) = k

        Else

            s = s + "○"

            f(k) = f(k) - 1

            f(2) = f(2) + 1

        End If

            ②  

        If i Mod n = 0 Then

            List1.AddItem s

            s = ""

        End If

    Next i

    '对b数组的数值按升序进行排序,代码略

    For i = 1 To m - 1

        s = search(i)

        If s > smax Then smax = s

    Next i

    '对f(0)和f(1)的相等情况进行判断,并输出最后结果,代码略

End Sub

Function search(i As Integer) As Integer

    Dim x1 As Integer, x2 As Integer

    Dim y1 As Integer, y2 As Integer

    x1 = (b(i) - 1) \ n + 1

    y1 = (b(i) - 1) Mod n + 1

    For j = i + 1 To m

        x2 = (b(j) - 1) \ n + 1

        y2 = (b(j) - 1) Mod n + 1

        If    ③   Then s = 0

        s = (x2 - x1) * (y2 - y1)

        If s > search Then search = s

    Next j

End Function

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

     ② ③ 

  2. (2) 实线框处的语句改为k = 1 - k,对程序运行结果(填:有/无)影响?
文本加密:利用Mid和Asc函数获取文本和密码字符串每一位字符的ASCII码,然后将文本中某一位字符串的ASCII码与相应的密码字符串中某一位的ASCII码就行异或运算。最后利用Chr函数将运算出的ASCII转换为字符。运行程序,在文本框中输入要加密的字符串和密码,并点击“加密”按钮,在文本框中显示加密或解密后的字符串,显示结果如下图所示。

程序代码如下:

Dim x As String

Dim y As String

Dim c(1 To 100) As String

Private Sub Command1_Click()

    Dim z As String

    x = Text1.Text

    y = Text3.Text

    z = f(x,y)

    Text2.Text = z

End Sub

Function f(x As String, y As String) As String

    Dim i, w, achar As Integer

    Dim mm As String

    w = Asc(y)

    For i = 1 To Len(x)

        achar = Asc(Mid(x, i, 1))

        c(i) =  Chr(x Xor y)     ‘

    Next i

    For t = 1 To Len(x)

        mm = mm+achar       ‘

    Next t

    f = mm

End Function

程序代码有2处错误,请在画线处写上正确代码。

高考期间,为了提高学生的学习效率和保证膳食营养,学校开展“教室就餐”,食堂提供A/B/C/D四种套餐,学生通过网络订餐,订餐后的数据都存在数据库中,套餐字母均为大写。现需要设计一程序,在窗体加载时,读取数据库中学生的订餐情况,并按班级编号升序排列,以班级+姓名+订餐情况输出至列表框List1中,在文本框Text1中输入班级,单击命令按钮Command1统计该班级的订餐情况,程序运行如图所示。

  1. (1) 分析如下程序,可知数据库的文件名为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Dim xm (1 To 1000) As String, bj(1 To 1000) As Integer

    Dim tc1 (1 To 1000) As String, tc2(1 To 1000) As String ,n As Integer

    Private Sub Form Load( )

    '从数据库中按班级、学号有序地读取学生的姓名、班级、中午套餐、晚上套餐,依次存入xm、bj、tc1、tc2数组中,总人数存入n中,部分代码如下,其余代码略

        Dim conn As New ADODB.Conncction

        Dim rs As New ADODB.Recordset

        conn ConncctionString = "provider=Microsoft.ACE.OLEDB.12.0;data source=" + "jiucan.accdb"

        conn.Open

        Set rs.ActiveConnection = conn

    End Sub

        Private Sub Command1_Click()

        Dim k As Integer, i As Integer, t As Integer, m As Integer, s1 As String, s2 As Integer Dim zc (1 To 4) As Integer, wc (1 To 4) As Integer      '用于统计套餐数量

        Dim bs (0 To 20) As Integer , ljs (0 To 20) As Integer

        t = Val (Text1. Text):m = 0

        For i = 1 To 4          '为数组赋初始值

            zc(i) = 0: wc(i) = 0

        Next i

        For i = 0 To 20         '为数组赋初始值

            bs(i) = 0: ljs(i) = 0

        Next i

        For i = 1 To n – 1            '按班级编号进行升序排序

           

            For j = i To n- 1

                If bj(j) < bj(k) Then k = j

            Next j

            s1 = xm(i): xm (i) = xm (k): xm (k) = s1

            s2 = bj(i): bj (i) = bj (k): bj (k) = s2

    s1 = tc1(i): tc1 (i) = tc1 (k): tc1 (k) = s1

            s1 = tc2(i): tc2 (i) = tc2 (k): tc2 (k) = s1

            bs(bj(i)) = bs(bj(i)) + 1

            If bs(bj(i)) = 1 Then

        Next i

        bs(bj(i)) = bs(bj(i)) + 1

        For i = 1 To m

           

        Next i

        For i = ljs(t) - bs(t) + 1 To ljs(t)

    zc(fx(tc1(i))) = zc(fx(tc1(i))) + 1

            wc(fx(tc2(i))) = wc(fx(tc2(i))) + 1

        Next i

        '查询班级的用餐情况,在列表框 List 中输出,代码略

    End Sub

    Function fx(a As String) As Integer

       

    End Function

学校创客社团开展机器人比赛活动,其中设置了机器人循迹项目。比赛规则如下:给出10* 10规模的矩阵地图,随机设定4个循迹点,小车以蛇形路线找到循迹点后,计算最长的两点直线距离。矩阵图中以0表示非循迹点,1表示循迹点,循迹过程如图a所示:

编写一个VB程序实现如下功能:单击“开始循迹”按钮Command1,呈现10*10矩阵地图,并随机生成4个循迹点,分别用数字1表示,数字0表示非循迹点;计算4点中相距最远的两点的直线距离,显示在标签Label1中。程序运行界面如图b所示。

  1. (1) 若随机生成的4个循迹点如图a所示,则该4点中相距最远的两点直线距离为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n = 10

    Const m=4

    Dim b(1 To 8) As Integer

    Private Sub Command1_Click()

        Dim f(1 To n* n) As Integer

        Dim i As Integer, j As Integer

        Dim w As Integer, k As Integer

        Dim length As Single, maxlen As Single

        Dim s As String

        '生成矩阵地图和随机生成4个循迹点,0表示非循迹点,1表示循迹点,存于数组f中,代码略。

        For i= 1 To n^2       '显示矩阵地图和4个循迹点

            s = s+ Str(f(i))

            If i Mod n=0 Then

                List1. AddItem s

                s=" "

            End If

        Next i

        w=1

        For i=1 To n

            For j=1 To n

                k = (n+1)* ((i-1) Mod 2)+(-1)-(i-1) * j

                If  Then     '记录循迹点所在位置

                    b(2*w-1)=i

                    b(2*w)=k

                    w=w+1

                End If

            Next j

        Next i

        i=1

        maxlen = 0

        Do While i<=m-1

            For j=i+1 To m

                

              If length > maxlen Then maxlen = length

            Next j

            i= i+1

        Loop

        Label1. Caption = Str( maxlen)

    End Sub

    Function reck(x As Integer, y As Integer) As Single

        Dim c As Integer, d As Integer

        Dim h As Single

        c=

        d=Abs(b(2*x)-b(2*y))

        h=Sqr(c^2+d^2)

        reck = h

    End Function

一个厨师收集了n道菜的满意程度,这个厨师做出每道菜的时间都是1单位时间。一道菜的喜爱时间为烹饪这道菜以及之前每道菜所花费的时间总和乘以这道菜的满意程度。现在你可以按任意顺序安排做菜的顺序,也可以选择放弃做某些菜来获得更大的喜爱时间总和。如:输入n道菜的满意程度“-1,-8,0,5,-9”,先将满意程度降序排列再通过计算,最大的喜爱时间总和为(-1*1+0*2+5*3=14)
 

5

0

-1

-8

-9

喜爱时间总和

1道菜

1

       

5

2道菜

2

1

     

10

3道菜

3

2

1

   

14

4道菜

4

3

2

1

 

10

5道菜

5

4

3

2

1

-3

编写VB程序,实现上述功能。运行程序,在文本框Text1中输入n道菜的满意程度后(数据之间以逗号隔开),单击“计算”按钮Commandl,在标签Labell中显示,最后在标签Label1中显示做完所有菜「喜爱时间」总和的最大值。程序运行界面如图所示。

请回答下列问题:

  1. (1) 若文本框中显示的内容为“-2,5,-4,0,3,-3",则做完所有菜[喜爱时间」总和的最大值为。(填数字)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_ Click()

        Dim xa As Integer, c As String

        c = Text1. Text

       

        Label1. Caption =“做完所有菜的「 喜爱时间」总和的最大值为”+ Str (xa)

    End Sub

    Function xiai(x As String) As Integer

        Dim m(8) As Integer, i As Integer, j As Integer, k As Integer, sum As Integer

        Dim ch As String

        max= 0 : k=0

        j =1

        For i=1 To Len(x)

            ch = Mid(x, i, 1)

            If ch ="," Then

                k=k+1

                m(k) = Val(Mid(x, j, i - j))

                j=i+1

            End If

        Next i

        

        For i=1 To k

            For j=k+1 To i+1 Step-1

                If m(j)>m(j-1) Then

                    t = m(j): m(j) = m(j - 1): m(j-1)= t

                 End If

             Next j

        Next i

        For i=1 To k+1

            

            If m(i) > 0 Then

                sum = sum + m(i)

            End If

        Next i

        xiai = sum

    End Function

最近更新