相关试卷

  • 1、某日期加密授权码的生成方法如下:

    ①授权码由9位字符组成,前8位为日期的密文,最后1位为验证码;

    ②取日期各位的字符,若该字符第一次出现,则直接取其对应的加密字符,否则取下一个不重复的加密字符;

    ③求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符,取得的验证码重复时,处理规则与②相同。

    加密字符对应表如下:

    值(十进制)

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    加密字符

    K

    n

    G

    j

    L

    t

    W

    b

    O

    a

    P

    H

    Z

    Q

    Y

    C

    小李设计了一个生成8位日期(YYYYMMDD格式)授权码的VB程序,程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成”按钮Command1后,在标签Label2中显示该日期的授权码。运行界面如图所示。实现上述功能的VB程序如下。

    (1)、若输入的日期为"19970601",则其授权码是
    (2)、请在画线处填入合适的代码。

    Dim f(0 To 15)As Integer

    Const code ="KnGjLtWbOaPHZQYC"

    Private Sub Command1_Click( )

        Dim rq As String,sq As String

        Dim c As Integer,i As Integer,d As Integer

        rq = Textl.Text:sq=""

        For i= 1 To 8

            c=Val(Mid(rq,i,1))

            d=d+c

            sq=   ①   

        Next i

        yz =GetChar(d Mod 16+1)

        Text2.Text = sq + yz

    End Sub

    Function GetChar(x As Integer) As String

      Dim flag As Boolean

      flag = False

      Do While flag = False

          f(x) =f(x) +1

          If f(x) =1 Then

               ②   

            f(x) =f(x) +1

            flag=True

          Else

            x=(x+1) Mod 16

          End If

      Loop

    End Function

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

  • 2、李雷收到了朋友发给他的一封奇怪的邮件,里面有段内容是由一些数字和符号组成的,信上说了这段内容是加密后的内容,并给出了具体的加密方法(假定原文的英文字母都是大写的),具体方法如下:

    ①“A”变为一个1到100内的随机数*27+1,“B”变成一个1到100以内的随机数*27+2,…,“Z”变为一个1到100以内的随机数*27+26;

    ②每个字母变为数字后会加一个“一”用来分割数字;

    ③其他空格和标点字符都按原来的表示。

    李雷用VB编写了一个解密程序,功能如下:将邮件中密文的内容复制到文本框Text1中,点击“解密”按钮Command1后,程序会解密密文并将解密后的内容显示在文本框Text2中,程序运行界面如图所示。

    (1)、根据描述,若密文为“1905-1442-”,则表示的是
    (2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

      Dims As String, yw As String, t As String

      Dim Value As Integer

      s=Text1.Text

      Value=0

      yw=""

      For i=1 To Len(s)

        t=     ①   

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

            Value=Value *10+Val(t)

        Else If t="-" Then

            yw=yw+Chr(Asc("A")+Value Mod 27-1)

               ②   

        Else

            yw=yw+t

        End If

      Next i

      Text2. Text=yw

    End Sub

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

  • 3、以下程序中,单击按钮“Command1”后,在Text1中随机生成了由数字0~9组成的20位随机数字。

    同时,在Text2中对该数字进行“加密”,加密规则为:对于每一位数字,加上5,结果保留个位。程序运行界面如图所示。

    (1)、若要将按钮上的文本修改为“转换”,则应修改Command1对象上的属性。
    (2)、实现以上功能的VB程序如下,请在画线处填入合适的代码。

    Private Sub Command1_Click( )

        Dim s1 As String, s2 As String, c As String

        Dimi As Integer, s As Integer

        For i=1 To 20

            s1=s1+   ①   

        Next i

        Text1. Text=s1

        For i=1 To 20

            c=Mid(s1, i, 1)

            s=    ②   

            s2=s2 & s

        Next i

        Text2. Text=s2

    End Sub

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

    (3)、若此程序仅生成4位数字7894,其他规则不变,则输出的结果为
  • 4、小王编写了一个实现文字查找及替换功能的VB程序,运行界面如图所示。文本框Text1中显示原文内容,在Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Commiand1后,Text4中显示替换的结果,Text5中显示替换次数,Text6中显示“查找内容”在原文中的起始位置。

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

    Private Sub Command1_Click( )

      Dim s As String,result As String,pos As String

      Dim count As Integer,i As Integer

      i=1:count=0

      result="":pos=""

      Do While i<=Len(Text1.Text)

        s=Mid(Text1.Text,i,Len(Text2.Text))

        If s=Text2.Text Then

          result=result+Text3.Text

          count=count+1

          pos=     ‘①

          i=i+Len(Text2.Text)

        Else

                 ‘②

          i=i+1

        End If

      Loop

      Text4.Text=result

      Text5.Text=Str(count)

      Text6.Text=pos

    End Sub

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

  • 5、在平面直角坐标系中,给定一组有序的点。从原点出发,依次用线段连接这些点,构成一条折线。要求编写一个“计算折线长度”的程序,功能如下:在文本框Text1中依次输入这些点的坐标值(数据都用逗号分隔并以逗号结尾),单击“计算”按钮Cmd后,程序计算这条折线的长度,结果显示在Label1中。例如,三个点的坐标(5,10)、(8,12)、(6,17)输入格式如图所示。

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

    Private Sub Cmd_Click( )

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

    Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single

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

    s=    ①    

    x1=0:y1=0             ‘出发点为坐标原点

    k=1:i=1:Totald=0

    For i=1 To Len(s)

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

          v=Val(Mid(s,j,i-j))       ‘提取坐标值,保存在变量v中

          j=i+1

          If    ②      Then

              x2=v

          Else

              y2=v

              d=Sqr((x2-x1)-2+(y2-y1)-2)

              Totald=Totald +d

              x1=x2:y1=y2

          End If

          k=k+1

      End If

    Next i

    Label1.Caption=Str(Totald)

    End Sub
     

    (3)、运行该程序,输入数据如图所示,程序执行到循环结束时,变量k的值为
  • 6、下列VB程序段的功能为;根据文本框Text1中各字符的大小关系,计算各字符按升序排列的序号,并将序号保存在数组y中。如文本框内容为“2011”,程序运行后y(1)~y(4)各元素的值分别为“4,1,2,3”。

    s=Text1.Text

    n=Len(s)

    For i=1 To n

        y(i)=1

    Next i

    For i=1 To

        For j=  To n

          If  Then

              y(j)=y(j)+1

          Else

              y(i)=y(i)+1

          End If

        Next j

    Next i

    上述程序段3个方框处的表达式分别为(  )

    A、⑴n         ⑵1         ⑶Mid(s,j,1)>=Mid(s,i,1) B、⑴n         ⑵1         ⑶Mid(s,j,1)>Mid(s,i,1) C、⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>=Mid(s,i,1) D、⑴n-1       ⑵i+1       ⑶Mid(s,j,1)>Mid(s,i,1)
  • 7、有如下VB程序段:

    Private Sub Command1_Click( )

      Dims As String, i As Integer

      s=Text1.Text

      For i=1 To 8 Step 2

          s=ds(s, i)

      Next i

      Text2.Text=s

    End Sub

    Function ds(s As String, m As Integer)As String

      Dim n As Integer

      n=Len(s)

      If m<1 0r m>n Then ds= "位置有误"

      If m=1 Then ds=Mid(s, 2, n-1)

      If m=n Then ds=Mid(s, 1, n-1)

      If m <n Then ds=Mid(s, 1, m-1)+Mid(s, m+1, n-m)

    End Function

    若在文本框Text1中输入“TXHOLLYCLASS”,执行该程序段后,文本框Text2中显示的是(  )

    A、THLYLS B、XHLLCLSS C、TXHOLLY D、XOLCLASS
  • 8、有如下VB程序段:

    s="123456789"

    g=""

    For i=1 To 3

        n=Len(s)

        x=Int(Rnd*n)+1

        g=g+Mid(s, x, 1)

        s=Mid(s, 1, x-1)+Mid(s, x+1, n-x)

    Next i

    在程序执行时,若变量x的值依次为3,3,6,则最终变量区的值为(  )

    A、"336" B、"346" C、"348" D、"15"
  • 9、给定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段末尾连续三个元素的值也同时属于第4区间,因此,第3段“非重叠块”包含38,58,46,第3段“重叠块”包含5,62,69。

    (1)、给定2个区间依次为[10,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为个。
    (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(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数;

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

    ‘c(2*m-1)存储第m段“非重叠块”的元素个数,c(2m)存储第m段“重叠块”的元素个数(值为0);      ‘c(2*m+1)存储剩余段的元素个数

    Private Sub Command1_Click( )

      Dim i As Integer,p As Integer,i 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   ①   

      If IsIn(i, p)Then

          If IsIn(i, p+1)Then

              LL=LL+1

          Else

                 ②   

              LL=0

          End If

          i=i+1

        Else

          c(2*p-1)=L

          c(2*p)=LL

            L=0:LL=0

            p=p+1

        End If

      Loop

      If i<=n Then

        c(2*p-1)=n-i+1

      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 p>m Then

        IsIn=False

    Else

        If   ③   Then IsIn=True Else IsIn =False

    End If

    End Function

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

  • 10、 6174是一个数学黑洞数。一个任意的四位正整数(四位数字完全相同除外),将数字重新组合成一个最大的数和最小的数并相减,重复这个过程,最多七步,必得6174。如取四位数4562,按以上方法做如下运算:①6542-2456=4086;②8640-0468=8172;③8721-1278=7443;④7443-3447=3996;⑤9963-3699=6264;⑥6642-2466=4176;⑦7641-1467=6174。

    程序运行界面如图所示。

    在文本框Text1中任意输入一个不完全相同的四位正整数,在文本框Text2中输出掉进黑洞的步数。实现上述功能的VB代码如下,但加框处代码有误,请改正。

    Private Sub Command1_Click( )

      Dim a(1 To 4)As Integer

      Dim x As Integer,y As Integer,c As Integer,t As Integer

      x=Val(Text1.Text)

      c=0

      Do While x<>6174

          For i=1 To 4

              a(i)=x Mod 10

                        ‘①

          Next i

          For i=1 To 3

              For j=i+1 To 4

                If  Then      ‘②

                    t=a(i):a(i)=a(j):a(j)=t

                End If

            Next j

          Next i

          x=a(1)*1000+a(2)*100+a(3)*10+a(4)

          y=a(1)+a(2)*10+a(3)*100+a(4)*1000

          x=x-y

          c=c+1

        Loop

        Text2.Text=Str(c)

    End Sub

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

  • 11、尼克斯彻定理:任何一个大于等于1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5,33=7+9+11。编写一个VB程序验证该定理,程序运行时,在文本框Text1中输入一个大于等于1的整数,单击“验证”按钮Command1后,在文本框Text2中显示验证结果,运行界面如图所示。

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

    Private Sub Command1_Click( )

      Dim a,b,n,t,sum As Integer

      Dim flag As Boolean,s As String

      n=Val(Text1.Text)

      For i=1 To n-3 Step 2

        sum=0:t=i:a=t:flag=False

        Do While sum<n^3 And flag=False

            sum=sum+t

            b=t

                                ‘⑴

            If sum=n^3 Then flag=True

        Loop

        If flag=True Then Exit For

      Next i

      s=Str(n)+"^"+Str(3)+"="+Str(a)

      For  To b Step 2           ‘⑵

        s=s+"+"+Str(i)

      Next i

      Text2.Text=s

    End Sub

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

  • 12、用VB编写一个计算 的程序,程序代码如下,请补充完整。

    Private Sub Command1_Click( )

      Dim i, n, tAs Integer

      Dim m, s As Double

      s=1:t=1

      n=Val(Text1.Text)

      For i=2 To n

          m=1

          For j=1 To   ①   

              m=   ②       ‘计算1/(2*i-1)!

          Next j

          s=s+m*t     ‘累加通项式

            t=-t

      Next i

      Text2.Text=Str(s)   ‘结果显示到文本框Text2中

    End Sub

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

  • 13、小发报名参加“智力大冲浪”节目。比赛规则如下:比赛开始时,参赛者将预先得到M元奖金。比赛时间分为N(N≤100)个时段,有N个小游戏,每个时段完成1个,第i个小游戏必须在规定时段t(i)

    (1≤t(i)≤N)内完成,可以提前完成,但不能晚于该时段完成,否则要从奖金M元中扣去一部分奖金w(i),w(i)为自然数,不同的游戏扣去的奖金是不一样的。每个游戏必须从整时段开始。请间小炫如何安排自己做游戏的顺序,才能赢取最多的奖金?将结果输出到文本框Text1中。注意;比赛绝对不会让参赛者赔钱。例如:当N=5,M=100时,

    游戏编号

    1

    2

    3

    4

    5

    完成期限t(i)

    1

    4

    2

    3

    2

    扣除奖金数w(i)

    5

    4

    10

    8

    7

    最优方案为:

    完成时段

    5

    4

    2

    3

    1

    其中第一个游戏无法在期限内完成,扣除5元,最后赢取100-5=95元。

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

    ⑴按扣款数值从大到小排序,顺序为3,4,5,1,2。

    ⑵对于游戏,在时间段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程序如下。请在画线处填入合适的代码。

      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

                Else

                   ②   

                End If

          Loop

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

      Next i

         ③   

      Text1.Text=Str(ans)

    End Sub

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

  • 14、(贪心算法)最大整数问题:设有n个随机生成的正整数,将它们连接成一排,组成一个最大的多位整数。其求解思想是:先把整数转换成字符串,然后再比较ab和ba,如果ab≥ba,就把a排在b的前面,反之则把a排在b的后面。例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。

    小王同学编写了一个VB程序,功能如下:在列表框List1中随机生成n个1~1000之间的整数,单击“运行”按钮Command1后进行处理,最大整数结果输出在文本框Text1中。当n=5时,程序运行界面如图所示。

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

    (1)、要将按钮Command1的高度修改为800,以下赋值语句正确的是(单选,填字母:A .Command1_Height=800/B .Command1.Height=800/C .Height=800)。
    (2)、当n=3时,生成3个数:618,681,68,由这三个数组成的最大整数为
    (3)、请在画线处填入合适的代码。

    Const n=5

    Dim a(1 To 10)As Integer

    Private Sub Command1_Click( )

      Dim i, j, t As Integer

      For i=1 Ton-1

          For j=n To i+1 Step-1

              If    ①   Then

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

              End If

          Next j

      Next i

      For i=1 To n

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

    Next i

    End Sub

    Private Sub Form_Load( )

      Randomize

      For i=1 To n

        a(i)=   ②   

        Text1. Text=Text1. Text +Str(a(i))

      Next i

    End Sub

    Function cmp(a As Integer,b As Integer) As Boolean

      If Str(a)+Str(b)<Str(b)+Str(a) Then

        cmp=True

      Else

        cmp=False

      End If

    End Function

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

  • 15、对给定的若干种互不相同的钱币面值,编程计算最少需要多少张钱币才能凑成某个给定的钱数。给定的7种钱币面值分别为1,2,5,10,20,50,100,则凑成金额94元,需要50元一张,20元两张,2元两张,共5张纸币时,张数最少。

    程序界面如图所示。

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

    Dim a(1 To 7)As Integer

    Dim b(1 To 7)As Integer

    Private Sub Form_Load( )

      List1.AddItem "面值    张数"

      ‘在数组a中从小到大存储7种钱币面值的整数值

    End Sub

    Private Sub Command1_Click( )

      Dim n, num, k As Integer

      n=Val(Text1.Text)

      k=7

      Do While n>0

        If n>=a(k)Then

             ①   

          b(k)=b(k)+1

        Else

             ②   

        End If

      Loop

      For i=1 To 7

        If b(i)<>0 Then

            num=num+b(i)

            List1.AddItem Str(a(i))+"   "+Str(b(i))

        End If

      Next i

      List1.Addltem"最少"+Str(num)+"  张"

    End Sub

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

  • 16、某数据存储算法如下:使用长度为n的一维数组h来存储m个不同的整数型数据(m<n),数据的存储位置t根据存储数据的值除n取余计算得到。例如使用长度为11的数组来存储67,45,1275,119,145,269,64,共7个数据,先存储第1个数据67,67 Mod 11=1,在第1个位置上目前没有数据,故存放在第1个位置上。第2个数据为45,45 Mod 11=1,而在第1个位置上已存有数据,那么查找下一位置有没有数据,现第2个位置上没有数据,故存放在第2个位置。在查找空位时,如果到了数组最后一个位置还没有空位,则从头继续查找,以此类推。举例数据存储结果如下表所示。

    位置

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    数据

    64

    67

    45

    145

    269

    119

    1275

    (1)、若按上述规则,再存储一个数据79,则应存储在第个位置。
    (2)、当n=97时,实现上述数据存储及相应数据查找的VB程序如下,运行结果如图所示,请在画线处填入合适的代码。

    Const n=97

    Dim d(0 To 96)As Integer,h(0 To 96)As Integer

    Dim m As Integer     ‘变量m为数据个数

    Private Sub Command1_Click( )      ‘数据存储

      Dim i As Integer, t As Integer

      ‘从数据库读取数据并先存储在数组d中,代码略

      List1.Clear

      For i=0 To n-1

          h(i)=-1          ‘数组元素初始化

      Next i

      For i=0 To m

             ①   

          Do While h(t)<>-1

              t=(t+1)Mod n

          Loop

          h(t)=d(i)

      Next i

      For i=0 To n-1

          List1. AddItem Str(i)&""& Str(h(i))

      Next i

    End Sub

    Private Sub Command2_Click( )    ‘数据查找

      Dim x As Integer, y As Integer

      x=Val(Text1.Text)

      y=x Mod n

      x=1

      Do While   ②   

          z=z+1

          y=(y+1)Mod n

      Loop

      If h(y)=x Then

          Label2.Caption= "共查找了 "&Str(z)&"次,在第"&Str(y)&"个位置找到"

      Else

          Label2.Caption="共查找了" &Str(z)&"次,没有找到"

      End If

    End Sub

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

    (3)、将数组h中的元素值初始化为一1表示的含义是
  • 17、(约瑟夫问题)n个人围成一圈,从第1个人开始从1报数,数到3的人出圈;再由下一个人继续从1开始报数,数到3的人出圈……输出依次出圈的人的编号和最后一个留在圈里的人的编号。如输入n=8,则依次出圈的人的编号是3,6,1,5,2,8,4,最后留在圈内的是7号。

    以下VB程序在a数组中保存了下一个要报数的人的编号,即若。(w)=p,则表示当第w个人报过数2后,下一个要报数的是第p号。程序在列表框Listl中输出了依次出圈的人的编号,在标签Label1中输出了最后剩下的人的编号。请完善程序。

    Private Sub Command1_Click( )

      Dim i As Integer, n As Integer, w As Integer, num As Integer

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

      n=Val(Text1.Text)

      For i=1 To n-1

          a(i)=i+1

      Next i

      a(n)=1

      w=n        ‘变量w表示当前检查的是第w号数组元素,即从第n号开始检查

      t=0       ‘变量t用以模拟报数

      Do While   ①   

          num=a(w)    ‘当前报数的人的编号

          t=t+1

          If t=3 Then

              List1.AddItem Str(num)

            a(w)=   ②   

            t=0

          Else

                 ③   

          End If

      Loop

          Label1.Caption=Str(w)

    End Sub

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

  • 18、平面上有n(3≤n≤100)个房间围成一圈,编号分别为1~n,相邻的两个房间之间均有一扇门,第i个房间最多居住的人数为a(i)。初始时选择一个房间,将所有人都聚集在该房间,接着每个人都可以按顺时针方向走到相邻的房间,直到找到居住的房间。最后各个房间刚好都住满。一个人每经过一扇门花费1个单位的能量,请确定初始房间及每个人找房间的方案,使得所有人花费的能量的和最小。例如:n=5,a(1)=4,a(2)=7,a(3)=8,a(4)=6,a(5)=4。

    最佳方案为初始时所有人聚集在2号房间,此时花费的最小能量为7×0+8×1+6×2+4×3+4×4=48。

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

    Dim a(1 To 100)As Integer       ‘依次存储编号为1到100的房间的最多居住人数

    Private Sub Form_Load( )

        ‘产生n的值

        ‘本过程从数据库中依次读取编号为1到n的房间的最多居住人数,并存储在数组a中

        ‘代码略

    End Sub

    Private Sub Command1_Click( )

      Dim i As Integer,j As Integer,w As Integer

      Dim t As Long,ans As Long

      ans=32767

      For i=1To n

        t=0

        For j=0 To n-1

                          ‘①

          If w=0 Then w=n

                        ‘②

        Next j

        If t<ans Then ans=t

      Next i

      Text2.Text=Str(ans)

    End Sub

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

  • 19、一个n×n矩阵的主对角线(从左上到右下的对角线)上各个元素的总和称为这个矩阵的迹。一个矩阵转置后,新矩阵的迹和原矩阵的相等。

    以3×3数据块为例,原矩阵和转置矩阵的结果如图所示。

    小明发现对这个矩阵进行转置后,主对角线上的数字没有发生变化,所以决定编写VB程序随机生成一个n×n的矩降再试一下。程序实现的功能如下:在文本框Text1中输入整数n(2≤n≤10),单击“生成矩阵”按钮Command1,生成n2个10到99之间(包含10和99)的随机整数,并以n行、n列矩阵的形式显示在列表框List1中,将转置后的矩阵也显示在List1中。再单击“主对角线”按钮Command2,则在标签Label1中输出两矩阵主对角线上的元素,运行界面如图所示,程序代码如下,请在画线处填入合适的代码。

    Const max=100

    Dim n As Integer

    Dim a(1 To max)As Integer

    Dim b(1 To max)As Integer

    Private Sub Command1_Click( )

      n=Val(Text1.Text)

      For i=1 To n*n

        a(i)=    ①   

      Next i

      p=1

      For i=1 To n*n

        b(i)=a(p)

        If i Mod n=0 Then

          p=p-n*(n-1)+1

        Else

             ②  

        End If

      Next i

      List1.Clear

      List1. AddItem Str(n)+"*"+Str(n)+"方阵”

      Call Output(a( ))

      List1.AddItem"转置矩阵"

      Call Output(b( ))

    End Sub

    Private Sub Command2_Click( )

      Label1.Caption="原矩阵":L.abel2.Caption="转置矩阵"

      For i=1 To n

        Label1.Caption=Label1.Caption & Str(a(i+(i-1)*n))

        Label2.Caption=label2.Caption & Str(b(i+(i-1)*n))

      Next i

    End Sub

    Sub Output(a()As Integer)

    Dim line As String

    line=""

    For i=1 To n*n

        If i>1 And i Mod n=1 Then

          List1. AddItem line

          line=Str(a(i))

        Else

             ③  

        End If

      Next i

      List1. AddItem line

    End Sub

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

  • 20、生成之形矩阵:在文本框中输入之形矩阵的行数n(3≤n≤10),点击“生成”按钮Command1后,在List1中显示结果,程序运行界面如图所示。

    实现程序的代码如下,但加框处代码有误,请改正。

    Private Sub Command1_Click( )

      Dim n,t As Integer,s As String

      n=Val(Text1.Text)

      For i=1 To n

          s=""

          If       Then     ‘①

            For j=1 To n

                t=t+1

                s=s+ads(t)

            Next j

          Else

            For j=1 To n-i

                s=s+"  "

            Next j

            t=t+1

                  ‘②

          End If

          List1.AddItem s

      Next i

    End Sub

    Function ads(n As Integer)As String

      Dim a As Integer

      a=Len(CStr(n))    ‘函数CStr( )和Str( )功能类似,但输出字符时没有前导空格

      If a=1 Then

          ads="0"+CStr(n)

      Else

          ads=CStr(n)

      End If

    End Function

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

上一页 1080 1081 1082 1083 1084 下一页 跳转