4.1.1 Python的常量和变量 知识点题库

小张老师给同学们写了一个小程序来让同学们体验模糊查找。在List1中已经有了某班学生的姓名。从text1中输入要查找的关键字,点击command1查找按钮,从List2中能列出带有要查关键字的所有姓名。

程序代码如下:

Private Sub Command1_Click()

Dim Sname As String, Skey As String    ‘Sname 保存姓名,Skey保存关键字

Dim i As Integer, j As Integer, n As Integer   ‘n关键字的长度

Skey = Text1.Text

n = Len(Skey)

List2.Clear

For i = 1 To List1.ListCount     ‘ListCount是列表框中项目的个数

    Sname = List1.List(i - 1)     ‘将List1中的第i-1项赋值给Sname

    For j = 1 To     ①   

    If Skey =     ②       Then

        List2.AddItem Sname

        Exit For

    End If

    Next j

Next i

If      ③     = 0 Then List2.AddItem "没有找到带<" & Skey & ">的名字。"

End Sub

  1. (1) 程序运行时弹出“要求对像”的错误提示,应该是界面中少了名为 的
  2. (2) ①处应填;②处应填;③处应填                            
【加试题】有如下VB程序段:

    Dim P As Integer, q As Integer, S As Integer, t As Integer

    p=Val(Text1.Text)

    t=0

    For q=P+1 To 2*p

      s=(p*q)Mod(q-p)

      If s=0 Then

         t=t+1

      End If

    Next q

    Label1. Caption=Str(t)

该程序段运行时,在文本框Text1中输入8,则在标签Label1中显示的内容是(  )

A . 3 B . 4 C . 5 D . 6
执行各选项的VB程序段后,变量s的值为“99以内所有正偶数之和”的是(  )
A . S=0 For i = 2 To 99 Step 2 s = s + 2 Next i B . For i = 2 To 98   s = s + i   i = i + 2 Next i C . s = 0 Do While i<= 98   i = i + 2   s = s + i Loop D . i = 2 Do While i<100   s = s + i   i = i + 2 Loop
如果一个自然数的每个质因数都至少是二重的(即每个质因数乘方次数都大于或等于2),如整数72=2^3*3^2(即72=2*2*2*3*3),判断2~72所有数中全部质因子的乘方次数,找出质因子“2”乘方次数为3;质因子“3”乘方次数为2,不是72的质因子,那么这个自然数称为“漂亮数”。小李编写了一个验证“漂亮数”的VB程序。在文本框输入小于1 000的正整数,单击“检查”按钮在列表框中显示该数的质因子及该因子乘方数,在标签Label1中显示判断结果,在标签Label4中显示所有质因数的分解过程。程序运行界面如下图所示。

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

Private Sub Command1_Click()

Dim a(1 To 999) As Integer

Dim n As Integer

Dim s As String

For i=1 To 999

 a(i)=0

Next i

n=Val(Text1.Text)

s =“”

Do While n<>1     ‘分解质因子过程并统计质因子出现次数

For i = 2 To n

 Do While n Mod i = 0

  s = s&“  ”&i

  a(i)= a(i)+1

       ‘①

 Loop

Next i

Loop

Label4.Caption =“质因子分解过程:” +s

For j = 2 To 999     ‘判断是不是漂亮数

 If Then      ‘②

  Label1.Caption = “不是漂亮数”

  Exit For

 Else

  Label1.Caption =“漂亮数”

  End If

Next j

For j = 2 To 999     ‘在列表框输出质因数及对应的乘方数

 If a(j)>0 Then

  List1.Additem Str(j)+“ ”+Str(a(j))

 End If

Next j

End Sub

 ② 

以下VB代码片段用于从数据库中读取数据:

Dim conn As New ADODB Connection

Dim rs As New ADODB. Recordset

conn ConnectionString =“Provider = Microsoft. ACE. OLEDB. 12.0; DATA Source =" & App. Path &"\ data accdb”

Set rs.ActiveConnection = conn

rs. Open “select * from table”

n = 0

Do While Not rs EOF

  n=n+1

  rs.MoveNext

Loop

下列对于以上代码的理解正确的有(  )

①连接的数据库文件名是“data”

②“ConnectionString”是conn对象的属性值

③查询的数据表名称是“table”

④程序运行后,变量n的值表示该数据表中记录的总数

⑤省略语句“rs. MoveNext”,程序也可以正常运行

A . ①②③④ B . ②③④ C . ③④⑤ D . ③④
小李编写了一个VB程序, 功能如下:在文本框Text 1中输入连续多个正整数(以“,”作为分割符和结束符),单击“排序”按钮Cmd 1,对其中的整数进行降序排序。排序后奇数在前,偶数在后,在标签Label 3中输出结果。程序运行界面如图所示。

  1. (1) 要使窗体Form 1标题显示“奇偶排序”,可修改该窗体的(单选,填字母:A .Text/B .Captin/C .Name) 属性来实现。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Cmd 1_Cik()    

        Dim s As Strng,c As String,a( 1 To 100)As Integer

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

        s=Text 1.Text:n=0

        For i=1 To Len(s)

            c=Mid(s,i,1)

            If Not(c>=”0”And c<=”9”) Then

                n=n+1

                a(n)=

                j=0

            Else

                j=j+1

            End If

    Next i

    For i=1 To n-1

                

            For j=i+1 To n

              If a(j) Mod 2= 1 Then

                If  Then k=j

            ElseIf a(k) Mod 2=0 And a(j)>a(k) Then

                k=j

            End If

          Next j

          If k<>i Then t=a(k)::a(i)=t

        Next i

        c=””

        For i=1 To n

            c=c+Str(a(i))

        Next i

        Label 3.Caption=c

    End Sub

     ② ③ 

  3. (3) 程序中加框处代码有错,请改正。
有如下VB程序段:

Dim conn As New ADODB.Connection

Dim rs As New ADODB.Recordset

conn.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;

data source = "+ App.Path+"\score.Accdb"

conn.Open

Set rs.ActiveConnection = conn

rs.Open "Select * from cj"

n=1

Do While Not rs.EOF

  Score(n)=rs.fields(“成绩”):Name(n)=rs.fields(“姓名”)

  n=n+1:rs.MoveNext

Loop

下列说法中不正确的是(  )

A . 定义的ADO的Connection对象实例名称是“conn” B . 连接的数据库文件名是“\score.acedb” C . 查询的数据表名是“cj” D . 该程序段运行后,可知所查询的数据表共有n-1条记录
有如下VB程序段:

i= 1

Do While i<= 6

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

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

        i=i- 1

    ElseIf i Mod 2= 0 Then

        a(i)=a(i- 1)+ a(i)

    End If

    i=i+ 1

Loop

执行该程序段后,a(1)~a(6)各元素可能的值是(  )

A . 4,9,2,13,8,11 B . 3,11,6,11,8,15 C . 6,13,8,11,6,15 D . 2,6,8,13,2,7
编号分别为1~n(n为偶数)的学生分成两组进行投篮比赛,奇数编号的为第一组,偶数编号的为第二组。对每个分组的成绩按从高到低排序,先比较处于分组第1位的两个队员成绩,成绩高的得1分,低的扣1分,相等均不得分,再依次比较处于分组相同位置的队员成绩,最后得到每组得分。

    如10名运动员1号到10号的成绩分别是“13,6,9,8,10,11,10,14,16,13”,从高到低排序后,第一组的成绩依次是“16,13,10,10,9”,第二组的成绩依次是“14,13,11,8,6”。第1位的成绩分别是16和14,则第一组获胜得1分,第二组扣1分,再比较两个分组第2位的成绩13和13,则两组均不得分。依次处理,比较完剩余队员的成绩,可得第一组得分为2,第二组得分为-2。

    编写一个VB程序,实现如下功能:在文本框Text1中依次输入成绩(偶数个整数,用逗号分隔并以逗号结尾),单击“确定”按钮Command1后,在列表框List1中显示对阵编号、对阵成绩及两个分组的最后得分。程序运行界面如图所示。

  1. (1) 下列对象不具有Caption属性的是(单选,填字母:A .Command1/B .Form1/C .Text1/D .Label1)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

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

    Dim s As String, ch As String, sum1 As Integer, sum2 As Integer

    Dim bh (1 To 50) As Integer, cj(1 To 50) As Integer

    s= Text1.Text

    j= 1: k=0

      For i= 1 To   ①  

        ch = Mid(s, i, 1)

        If Not (ch>= "0" And ch <= "9") Then

            k=k+1

            bh(k)=k

            cj(k) = Val(Mid(s, j, i-j))

                ②   

        End If

      Next i

      For i= 1 To k-2 Step 2

        For j= k To   ③   Step -1

            If cj(j)> cj(j-2) Then

                t= cj(j): cj(j)=cj(j-2): cj(j-2)=t

                t= bh(j): bh(j)= bh(j-2): bh(j-2)=t

            End If

        Next j

      Next i

      sum1 = 0: sum2= 0

      List1 .AddItem "对阵编号  对阵成绩"

      For i=1 To k- 1 Step 2

        If cj(i)> cj(i+1) Then

            sum1 = sum1 + 1: sum2 = sum2- 1

       

            sum1=sum1-1: sum2=sum2+1

        End If

        List1.AddItem adj(bh(i)) + "<-->" + adj(bh(i+1)) + adj(cj(i)) + "<-->" + adj(cj(i+1)

      Next i

      List1.AddItem"第一组得分: "+ adj(sum1)

      List1.AddItem"第二组得分: " + adj(sum2)

    End Sub

    Function adj(x As Integer) As String

    ‘函数功能:将数值x转换成字符串,并在字符串的左侧添加若干空格。代码略

    End Function

     ② ③ 

  3. (3) 程序代码中的加框处代码有误,请改正。
其8位日期加密授权码生成方法描述如下:

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

②日期的最后1位数字k(若k的值为0,令k=10),加密成26个大字英语字母表该位置对应的字母。

③将26个大写英文字母向左移k(日期的最后1位数字)个位置,并将移出的k个字母依次连接到最后。例如当k=3时,形成如下表所示新的字母排列顺序:

位置

1

2

3

4

……

23

24

25

26

字母

D

E

F

G

……

Z

A

B

C

④日期的第1个数字至第7个数字的加密方法是:计算第i个位置上的数字与第i+1个位置的数字及位置i三者相加的和,在新的字母表中取出该数字和对应的字母,作为第i个位置上数字加密字符。

⑤计算日期的各个位置上数字之和sum,若和sum的值大于26,在新的英文字表中,sum Mod 26对应字母转换成小写字母,作为验证码,否则验证码为新的英文字母表中对应字母。

  1. (1) 根据上述加密算法,若输日期为“20000101”,则生成的注册码为
  2. (2) 小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

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

    Dim mw As String, sum As Integer, t As Integer, t1 As Integer

    strl="0123456789"

    s=Text1.Text

       ① 

    t=k: sum=t

    s1=Mid(strl, t+1, 1)

    For i=7 To 1 Step-1

    t1=Asc(Mid(s, i, 1))-64

    j=    ② 

    s1=Mid(strl1, t+1, 1)+s1

    sum=sum+t

    Next i

    mw=jm(k)

    If sum>26 Then

    sum=sum Mod 26

    ch=Chr(Asc(Mid(mw, sun, 1))+32)

    Else

    ch=Mid(mw, sum, 1)

    End If

    If ch=Mid(s, 9, 1) Then Text2.Text=s1

    Else Text2.Text="该系列号未能通过验证!"

    End Sub

    Function jm(t As Integer) As String

    Dim i As Integer, p As Integer

    If t=0 Then t=10

    For i=1 To 26

    p=(t+i-1) Mod 26

       ③ 

    Next i

    End Function

     ② ③ 

某算法流程图如图所示:对于该算法下列说法正确的是(  )

A . 当n的值为800时,条件“n<=2000?”会被执行 B . 当n为任意整数时,条件“n<=800?”必定会被执行 C . 当n的值为2000时,输出p的值为0.25 D . 输出p的值有可能为0
执行如下VB程序段,则s的值是(  )

s=56

s1=s\10

s2=s Mod 10

s=s1+s2*10

Print "s="; s

A . 5.6 B . 6.5 C . 56 D . 65
某算法的流程图如下图所示。

当输入x的值为109时,在标签Label1中输出的内容为(    )

A . 4 B . 33 C . 36 D . 48
生成0-9数字组成的10位无重复数字的随机密码,其VB程序段如下:

方框中的代码由以下三部分组成:①s=s+Mid(s1,x,1)②x=Int(Rnd*n)+1 ③s1=Mid(s1,1,x-1)+Mid(s1,x+1)。代码顺序正确的选项是(    )

A . ①②③ B . ③②① C . ②①③ D . ②③①
在数组d中使用下图所示的算法查找Key,对于该算法以下表述正确的是(    )。

d[1]

d[2]

d[3]

d[4]

d[5]

15

15

8

23

7

A . 该算法的作用是从头至尾在数组中找同输入key相同的一个数,并输出该数的值 B . 该算法的作用是在数组中找到所有同输入的key相同的数,并输出它们的个数 C . 当key为15时,输出k的值为2 D . 无论输入数据是否在数组中,循环结束i的值均等于6
小王编写了一个实现文字查找替换功能的VB程序,运行界面如图所示。文本框Text1显示原文内容,Text2中输入查找内容,Text3中输入替换内容,单击“全部替换”按钮Command1后,Text4显示查找替换的结果,Text5中显示替换的次数,Text6显示“查找内容”在原文中的起始位置。

Private Sub Command1_Click()

Dim s As String, resule As String, pos As String

Dim count As Integer, i As Integer

i = 1: count = 0: resule = "": pos = ""

Do While i <= Len(Text1.Text)         ‘ i 是查找过程中所查找到的当前字符位置的标记

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

    result = result + Text3.Text

    count = count + 1

    pos =                   ‘pos 依次显示被替换内容在原文中的起始位置

    i = i + Len(Text2.Text)

  Else

    result=result+Mid(text1.text,i,1)
     

  End If

Loop

Text4.Text = result

Text5.Text =

Text6.Text = pos

End Sub

某地区有8个城市爆发疫情,需要发放救援物资。各城市的相邻关系用0表示不相邻,1表示相邻。例如:图a的邻接矩阵对应关系图如图b所示。

救援物资一共有4种(第1种口罩、第2种酒精、第3种防护服、第4种耳温枪),每个城市仅能分配到1种物资,要求相邻城市所分配到的救援物资各不相同。

算法分析:采用试探法分配物资(每个城市都从第1种物资开始逐个试探)。

第i个城市能否分配第c种物资,关键取决于第i个城市的周边是否有分配到相同物资的城市。如果已有相邻城市分配到第c种物资,则换第c+1种物资,否则就将第c种物资分配给第i个城市,继续探索第i+1个城市。

如果第i个城市,4种物资都无法分配到,则退回到第i-1个城市,调整第i-1个城市的物资,重新试探下一种物资。直至所有城市的救援物资都分配好。

例如:给城市1分配第1种物资,然后给第2个城市分配物资时,也从第1种物资开始试探,若发现第1种物资已分配给相邻城市,则试探第2种物资,以此类推。

小金同学编写VB程序实现上述功能:程序运行时,各城市之间相邻关系矩阵显示在列表框List1中。单击“分配”按钮Command1,在列表框List2中显示物资分配方案。程序运行界面如图c所示,请回答下列问题。

图c

  1. (1) 若按照上述算法,8个城市的相邻关系矩阵图如图 a、图 b所示,则城市 8所分配到的物资是(填:口罩/酒精/防护服/耳温枪)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click() Const n = 8

    Dim a(1 To n * n) As Integer, t(1 To n) As Integer, Dim w(1 To 4) As String Dim c As Integer, i As Integer, j As Integer,Dim f As Boolean

    w(1) = "口罩": w(2) = "酒精": w(3) = "防护服": w(4) = "耳温枪"

    ‘读取8个城市的邻接矩阵对应关系,存入a数组中,并显示在列表框List1中,代码略

    c = 1 t(1) = c i = 2

    Do While 

      For j = 1 To i - 1

        If Then

          Exit For

        End If

      Next j

      If j < i Then

        c = c + 1

        Do While c > 4

          i = i - 1

          If i = 0 Then

            List2.AddItem "no answer"

            Exit Sub

          End If

          c = 

        Loop

      Else

        t(i) = c

        i = i + 1

        c = 1

      End If

    Loop

    List2.Clear

    For i = 1 To n

      List2.AddItem "城市" & i & ":" & w(t(i))

    Next i

    End Sub

小董编写了一个有关“筛选操作”的VB程序,实现如下功能:在文本框Text1中显示一组随机生成个位数为“9”的两位数(原始数据),在文本框Text2中输入筛选个数,单击“操作”按钮Command1后,在文本框Text3中按降序显示所筛选个数的不重复最大数据(以逗号分隔    并以数据结尾),若在文本框Text2中输入的数大于原始数据中不相同数的个数,则在文本框Text3中显示“筛选的个数太大,请重新输入!”。程序运行界面如图所示。

  1. (1) 如图所示,该VB程序的窗体中共有类对象(填数字)。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const n = 10

    Dim d(n) As Integer, c As Integer

    Private Sub Form_Load()

      Dim i As Integer, j As Integer, f As Boolean, s As String

      Randomize

      c = n

      For i = 1 To n

        f = False

        d(i) =        ' 随机生成个位数为“9”的两位数

        For j = 1 To i - 1

          If Then f = True

        Next j

        If f Then c = c - 1

      Next i

     '原始数据在文本框Text1中显示。代码略

    End Sub

    Private Sub Command1_Click()

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

      Dim cnt As Integer,t As String, s As String

      d(0) = 100

      cnt = Val(Text2.Text)

      If cnt > c Then

        Text3.Text = "输入筛选的个数太大,请重新输入!"

        Exit Sub               'Exit Sub表示退出过程

      End If

      For i = 1 To cnt

        k = i

        For j = i + 1 To n

          If d(j) < d(i - 1) And( _x0000_i1034 )Then k = j

        Next j

        If k <> i Then

          t = d(i): d(i) = d(k): d(k) = t

        End If

      Next i

      For i = 1 To cnt

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

      Next i

      Text3.Text =

    End Sub

  3. (3) 程序中加框处代码有错,请改正。
有如下VB程序:

Dim b As Integer

  a=5:b=8

  b=a*b

  a=b+a

Text1.Text=Str(a)

该程序执行后,文本框上显示的内容是(  )

A . 40 B . "54" C . 45 D . "13"
在Python中,正确的赋值语句是(     )
A . x+y=10 B . x=2y C . x=y=50 D . 3y=x+1