4.4.4 循环控制的应用 知识点题库

有如下VB程序段:

For i = 4 To 3 Step -1

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

 tmp = a(i)

 For j = i-1 To 1 Step -1

If tmp > a(j) Then Exit For

a(j+1) = a(j)

 Next j

  a(j+1) = tmp

End If

Next i

数组元素 a(1)到 a(6)的值依次为“19,8,96,92,85,88”,经过该程序段“加工”后,数组元素 a(1)到 a(6)的值依次为(  )

A . 8,19,92,96,85,88 B . 8,19,85,88,92,96 C . 19,8,92,96,85,88 D . 19,8,85,92,96,88
有如下一段VB程序,以下说法正确的是(   )

k=-20

Do While k=0

  k=k+1

Loop

A . Do While执行了20次 B . Do While循环是无限循环 C . 循环体语句一次也不执行 D . 循环体语句执行一次
疫情发生后,小罗收集了某省南北两区共15个城市的累计病例人数和治愈人数,用以分析统计各区治愈率最高的n个城市。规则如下:每个城市包含区域名、城市名、累计病例人数和治愈人数,以“/”分隔,以“;”结尾。如“北区/A市/1467/530;”,表示北区的A市累计病例人数1467人,治愈人数有530人。

小罗编写VB程序实现上述功能:程序运行时,读取所有城市数据保存在变量shuju中并显示在列表框List1中。在文本框Text1中输入“南区”或“北区”,文本框Text2中输入n的值,单击“排名”按钮Command1,对数据进行统计分析,并在列表框List2中显示治愈率最高的n个城市,如有与第n个城市相同治愈率的城市,则同时输出。程序运行界面如图所示,请回答下列问题。

  1. (1) 代码“List2.AddItem”中的 AddItem是(单选,填字母:A . 事件名/ B . 属性名 / C . 方法名)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim shuju As String, a(1 To 100) As String

    Dim t As Integer, i As Integer, j As Integer, c As String, p As Integer, temp As String, q as String Dim f As Boolean, n As Integer, k As Integer

    '读取所有城市数据保存在变量shuju中,并显示在列表框List1中,代码略

    t = Len(shuju)

    i = 1: p = 0: j = 1

    Do While i <= t

      c = Mid(shuju, i, 1)

      If c = "/" Or c = ";" Then

        p = p + 1

        a(p) = j = i + 1

      End If

      i = i + 1

     Loop

    q = Text1.Text : n = Val(Text2.Text) : i = 1

    Do While i <= p \ 4 - 1

      k = i

      IfThen f = True Else f = False

      For j = i + 1 To p \ 4

        If a(4 * j - 3) = q Then

          If Val(a(4 * j)) / Val(a(4 * j - 1)) > Val(a(4 * k)) / Val(a(4 * k - 1)) Or Not f    Then k = j

           

          End If

        End If

      Next j

      If k <> i Then

        temp = a(4 * k - 3): a(4 * k - 3) = a(4 * i - 3): a(4 * i - 3) = temp

        temp = a(4 * k - 2): a(4 * k - 2) = a(4 * i - 2): a(4 * i - 2) = temp

        temp = a(4 * k - 1): a(4 * k - 1) = a(4 * i - 1): a(4 * i - 1) = temp temp = a(4 * k): a(4 * k) = a(4 * i): a(4 * i) = temp

      End If

      If  Then

        List2.AddItem a(4*i-3) & "/" & a(4*i-2) & "/" & Format(Val(a(4*i)) / Val(a(4*i-1)), "0.00%") & ";"

        i = i + 1

      Else

        Exit Do

      End If

    Loop

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
随着信息技术的发展,公众号:技术那玩意安全性越来越受到人们的重视,为了提升信息的安全性,发送信息时需要对信息进行加密处理,某信息的加密算法如下所示:

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

②第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

有如下VB程序段:

Dim a(1 To 10)As Integer

Dim i As Integer, k As Integer

For i=1 To 10 Step 2

    a(i)=1

Next i

For i=1 To 10

    If i Mod 3=0 Then a(i)=1-a(i)

Next i

For i=1 To 10

    If a(i)=1 Then k=k+1

Next i

该程序段执行后,变量k的值为(  )

A . 3 B . 4 C . 5 D . 6
如下代码将记录集rs中“售价”字段的数据通过循环依次存入数组a中。

i=0

Do While Not rs. EOF

    i=i+1

    a(i)=rs. Fields("售价")

    rs. MoveNext                  ‘①

Loop

若记录集rs共有10条记录,执行循环前,当前记录为第1条。循环结束后,①处代码共执行的次数为(  )

A . 8次 B . 9次 C . 10次 D . 11次
有如下程序段

s = Text1.Text

s1 = ""

For i = 1 To Len(s) \ 2

    m = Mid(s, i, 1)

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

    If m > n Then

        s1 = s1 + m + n

    Else

       s1 = s1 + n + m

Next i

Text2.Text = s1

在Text1中输入“8523691”,则执行该程序后,Text2中输出的是(   )

A . 819562 B . 8159823 C . 815926 D . 8195623
在挖金矿小游戏中,玩家通过指令控制小人运动,小人按照一定的规则将地底的金矿全部收集完毕。现将地底的截面可用一个n*n的矩阵表示,其中第一行表示地面,不会出现金矿;第2行至第n行表示地底。每一行中黑色格子表示金矿,白色格子表示空地,其中小人在矩阵左上角第一行第一列的位置。

玩家通过4种指令控制小人运动:

· 左 X:小人向左移动X个格子

· 右 X:小人向右移动X个格子

· 下 X:小人向下移动X个格子

· 挖矿:收集小人所在格子的金矿

小人收集金矿需要遵循一定的规则:

①小人必须将当前行的金矿全部收集,才能去往下一行,即金矿需从上到下收集

②对于同一行的金矿,小人必须按照从左往右的顺序开始收集

现编写程序,以8*8的矩阵为例,在文本框Text1中输入金矿数量,点击按钮“开始”后,随机产生对应数量的金矿并借助图形控件输出(保证不会在同一个格子出现两个金矿),并且在列表框List1中按顺序输出指令,使小人按照规则得到所有金矿。如图a所示。请回答下列问题。

图片_x0020_100013

图a

  1. (1) 现有4*4的地底截面如图b所示,小人在左上角位置,请写出任意一种可使小人按规则获得所有金矿的指令(指令之间用逗号或空格隔开)

    图片_x0020_100014

    图b

  2. (2) 请完成程序中的填空。

    Const n = 8           '程序以8*8的矩阵为例

    Dim x(1 To n*n) As Integer, y(1 To n*n) As Integer           '存储所有金矿的位置

    Dim px As Integer, py As Integer          '存储小人所在的位置

    Dim i As Integer, j As Integer, m As Integer, tmp As Integer

    Private Sub Command1_Click()

    m = Val(Text1.Text)

    Randomize

    '随机产生m个金矿并通过图形控件显示在界面上,代码略

    For i = 1 To m - 1

        For j = 1 To m - i

        '将所有金矿按照从上到下、从左到右的顺序排序,以符合题目描述的规则

            If x(j) > x(j + 1) Or Then

                tmp = x(j): x(j) = x(j + 1): x(j + 1) = tmp

                tmp = y(j): y(j) = y(j + 1): y(j + 1) = tmp

            End If

        Next j

    Next i

    px = 1: py = 1

    i = 1: j = 1

    Do While j <= m

        Do While x(j) = x(j + 1) And j <= m

            j = j + 1

        Loop

        If y(i) < py Then

            List1.AddItem "左" + Str(py - y(i))

        ElseIf y(i) > py Then

            List1.AddItem "右" + Str(y(i) - py)

        End If

        List1.AddItem "下" + Str)

        List1.AddItem "挖矿"

        For k = i + 1 To j

            List1.AddItem "右" + Str(y(k) - y(k - 1))

            List1.AddItem "挖矿"

        Next k

        px = x(j)

        

        j = j + 1

        i = j

    Loop

    End Sub

某算法程序段如下:

Dim s1 As String, s2 As String, ch As String

Const code = "@*()^&#"

s1 = Text1.Text

For i = 1 To Len(s1)

    ch = Mid(s1, i, 1)

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

        t = (Asc(ch) - 65 + i) Mod 7

        s2 = Mid(code, t + 1, 1) + s2

    Else

        s2 = s2 + ch

    End If

Next i

Text2.Text = s2

若 text1 中输入字符“AbCd”,则 text2 中输出的是 (     )

A .  AC^@ B .  ^@AC C .  ^(@& D . A^C@
编写函数,接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。
循环语句for i=1 to 20 step 3指定循环执行次数是(   )。
A . 7 B . 6 C . 10 D . 9
在Excel中,列号采用字母的形式表示,具体表示方法如下:

序号

第1列

第2列

……

第25列

第26列

列号

A

B

 

Y

Z

序号

第27列

第28列

……

第51列

第52列

列号

AA

AB

 

AY

AZ

……

序号

第703列

第704列

……

第727列

第728列

列号

AAA

AAB

 

AAX

AAZ

为了方便查看,小明编写了“Excel列号转换”程序,程序运行时,用户在文本框Text1中输入数字列号,点击按钮command1,在文本框Text2中输出它的字母列号;反之在文本框Text2中输入字母列号,单击按钮command2,在文本框Text1中输出它的数字列号。程序运行界面如图所示:


程序运行的代码如下,请回答下列问题:

  1. (1) 要修改窗体的标题为“EXCEL列号转换”,可通过修改其属性完成。
  2. (2) 第106列的字母列号为
  3. (3) 请在①②③划线处填入适当的代码。

    '将数字列号转换为字母列号

    Private Sub Command1_Click( )

        Const code = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”

        Dim s As String

        Dim n As Integer

        Dim r As Integer

        ①

        s =“”

        Do While n > 0

            ②

            n = n \ 26

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

        Loop

        Text2.Text = s

    End Sub

    '将字母列号转换为数字列号

    Private Sub Command2_Click( )

        Dim s As String

        Dim n As Integer

        Dim ch As String

        s = Text2.Text

        n = 0

        For i = 1 To Len(s)

            ch = Mid(s, i, 1)

            ③

        Next i

        Text1.Text = Str(n)

    End Sub

某字符转置算法描述如下:

·将字符串(均为大写字符)s依次转换为相对应的数值(字符A~Z对应数值1~26);

·转换后的数值以K个数据为一段,将n个待处理的数据依次分割成若干段(最后一段不足部分用0来补充);

·每一段中K个数据与K*K转置矩阵进行乘法运算;

·将乘法运算得到的每一个结果值除以26求余数,依次转换成相应字符(数值1~26对应字符A~Z),最后按原始字符串长度输出。

乘法运算规则如下:

第i个元素c(i) =第j个元素a(j) * 转置矩阵第i行第j个元素b(t)的乘积之和(其中j = 1 , 2 …K)

例如:字符串s = PYTHON,区块大小K = 4的转置过程如下:

  1. (1) 根据算法描述,上述示例中,字符“N”的相乘结果(即图中(★)处)为
  2. (2) 请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim a(1 To 100) As Integer    ‘存储字符串,长度不超过100个字符

        Dim b(1 To 100) As Integer    ‘存储转置矩阵,长度不超过10*10

        Dim c(1 To 100) As Long

        Dim s As String, tmp As String

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

        Dim n As Integer, m As Integer, lens As Integer

        s = Text1.Text    ‘在Text1中输入原始字符串

        k = Val(Text2.Text)     ‘在Text2中输入区块大小K

        Randomize

        For i = 1 To k ^ 2

            b(i) = Int(Rnd * 9) + 1

            tmp = tmp + Str(b(i))

            If i Mod k = 0 Then

                List2.AddItem tmp

                tmp = ""

            End If

        Next i

        lens = Len(s): n = lens

        For i = 1 To n

            tmp = Mid(s, i, 1)

           

            List1.AddItem Str(a(i))

        Next i

        Do While n Mod k <> 0

            n = n + 1

            a(n) = 0

            List1.AddItem Str(a(n))

        Loop

        For i = 1 To n

            m = (i -1) Mod k + 1

            t = 1

            For j =

                c(i) = a(j) * b((m -1)* k + t) + c(i)

                t = t + 1

            Next j

        Next i

        For i = 1 To n

            List3.AddItem Str(c(i))

        Next i

        s = ""

        For i = 1 To lens

           

            s = s + Chr(t + 64)

        Next i

        Text3.Text = s    ‘在Text3中输出转置后的字符串

    End Sub

数学中阶乘是用n!来表示,同时定义了n!=n*(n-1)!,例如:5的阶乘可以表示为5!=5*4*3*2*1。下列Python程序是通过for循环求解一个正整数的阶乘。

  1. (1) 以上程序第4行横线处应该填入:
  2. (2) 以上程序中变量a的数据类型是:
  3. (3) 运行后的结果是4!=24,则for循环中第4行的语句共执行了次。
质数又称素数。一个大于1 的自然数,除了1 和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1 既不是质数也不是合数)。小明编写了一个筛选[a,b]范围内素数的程序,功能如下:程序运行,输入正整数a 和b(a和b均大于1),程序运行如图所示。

  1. (1) 运行该程序,分别输入整数“30”和“40”,则筛选出的素数有个。
  2. (2) 请在划线处补充代码

    def prime(x):#如果x 是素数返回True,否则返回False

    flag= True

    for i in range(2, x):

    if :

    flag = False

    break

    return flag

    a = int(input("请输入整数a:"))

    b = int(input("请输入整数b:"))

    if a > b:

    #如果a 大于b,则交换a 和b 的值

    c = 0

    for j in range(a, b + 1):

    if :

    print(j)

    print(a ,"和",b"之间共找到",c,"个素数!")

阅读下列程序,写出运行结果

警察抓小偷,有四个嫌疑人甲乙丙丁,其中一人是小偷。甲说“不是我”,乙说“是丙”,丙说“是丁”,丁说“丙在冤枉人”。他们中只有一人说了假话,编程判断谁是小偷。(注:在Python运算中,True的值为1,False的值为0)

persons=[‘甲’,‘乙’,‘丙’, ‘丁’]

for thief in persons:

flag =(thief!=‘甲’)+(thief==‘丙’)+(thief ==‘丁’)+(thief!=‘丁’)

if flag == 3:

print(thief)

运行结果是:

某Python程序段如下:

import random

fibo=[1]*11

for i in range(2, 11):

    fibo[i] = fibo[i - 1] + fibo[i - 2]

n = random.randint(1, 10)

print (fibo[n])

运行该程序段,输出结果不可能是(    )

A . 1 B . 21 C . 35 D . 89
有如下VB程序段:

Dim a(1 To 6) As Integer

For i=1 To 6

    a(i)= Int(Rnd * 4)+1

    If a(i) Mod 2=0 And i Mod 2=0 Then

       a(i)=2 * a(i) - a(i - 1)

    End If

    s=s+Str(a(i))

Next i

执行该程序段后,变量s的值可能是(    )

A . 242221 B . 333126 C . 043513 D . 323117
已知a(1)到a(6)的初值依次为“5、6、7、8、9、10”,在文本框Text1中输入4,执行以下程序段后a数组各元素的值为“9、10、5、6、7、8”,则①②划下线处填空选项为(    )

n=6

k=Val(Text1.Text)

For j=i-1 To n

    temp= a(i)

    For j=i-1 To   ①   Step-1

        a(j+ 1) = a(j)

    Next j

    a(   ②   )= temp

Next i

A . ①i-k   ②j+1 B . ①i-k+1   ②j+1 C . ①i-k   ②j D . ①i-k+1   ②j
求矩阵列和的最大值,算法如下:数字矩阵有n * n(n不大于10)个数组元素,数组元素为随机生成任意的两位正整数,按n行n列进行排列,其中第一行的数据依次为a(1)~a(n),第二行的数据依次为a(n+1)~a(2* n……。例如当n=5时,随机生成25个数组元素,并排列成5 *5的矩阵,第一行的数据为a(1)~a(5),第二行的数据依a(6)~a(10) …….。现要求按列进行求和,并找出最大值的列。小江编写了一个VB程序,功能如下:在文本框Text1中输入n的值,单击“计算”按钮Command1后,在列表框List1中显示随机生成的n *n的数字矩阵,同时在列表框List2中显示每一列数据的求和结果、最大值及对应的列号,程序运行界面如图所示。

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

  1. (1) 语句List1.AddItem s中的“AddItem"属于(单选, 填字母:A .对象名/B .属性名/C .方法名/D .过程名)。
  2. (2) 请在划线处填写合适的代码。

    Private Sub Command1_ Click( )

        Const Maxn= 100

        Dim i As Integer, j As Integer, c As Integer

        Dim max As Integer, sum As Integer, n As Integer

        Dim a(1 To Maxn) As Integer, s As String

        n= Val(Text1. Text)

        Randomize

        For i=1 To n* n

            a(i)=

            s=s+Str(a(i))

            If i Mod n=0 Then

                List1. AddItem s

                s=“”

            End If

        Next i

        For i=1 To n

            sum= 0

            For j=

                sum=sum+a(j)

            Next j

            List2. AddItem "第" + Str(i) +"列的和是:"+Str(sum)

            If sum > max Then max=sum :       '改错

        Next i

        List2. AddItem "其中第" + Str(c)+ "列和最大,值为:"+Str(max)

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
最近更新