3.2 Python语言程序设计 知识点题库

设 X←126,则 int ( X/100) = ; int(X/10) mod 10 =

那么能得到任意三位数X个位数的表达式是:

有如下VB程序段:

Dim a(l To 100) As String

Private Sub Commandl_Click()

  Dim c As Integer, t As String, ans As String

  s = Textl. Text

  k = Val(Text2. Text)

  ans =“”

  For i = 1 To Len(s) - k - 1

    c = c + 1

    a(c) = Mid(s, i, 1) + Mid(s, i + k + 1, 1)

    If check(c) Then

      ans = ans + a(c) + ","

    Else

      c = c - 1

    End If

  Next i

  Text3. Text = ans

End Sub

Function check(k As Integer) As Boolean

  Dim i As Integer

  check = True

  For i = 1 To k - 1

    If a(i) = a(k) Then check = False: Exit For

  Next i

End Function

若该程序段执行后,在文本框Text1中输入的字符串长度不超过10,文本框Text2中输入的值在0到8范围内(输入输出都不包括双引号本身),下列说法不正确的是(  )

A . 若在文本框Text1中输入“ZGBG”,Text2中输入“0”,则Text3中显示“ZG,GB,BG” B . 若在文本框Text1中输入“CCAA”,Text2中输入“1”,则程序运行结束时变量c的值为2 C . 将数组a的定义语句改为“Dim a(1 To 9) As String”,程序依然能够正确运行 D . 若a(1)到a(4)的值为“AB”,“AC” ,“BC” ,“AC”,则调用函数check(4)的结果为False
某算法的流程图如图所示:当输入n的值为10时,输出结果为()

A . 12 B . 14 C . 16 D . 13
有如下程序段: 

Dim s(1 To 81) As Integer, I As Integer, j As Integer, C As Integer, temp As Integer

  c=0 : s(1) = 0

  For i = 1 To 9

    For j = 1 To i

    temp = s(j * i)

    s(j * i) = j * i

    If temp <> s(j * i) And s(j * i) Mod 9 = 0 Then c =c + 1  

  Next j

Next i

该程序段运行后,变量c的值为(   )

A . 9 B . 10 C . 11 D . 12
运行程序时,Text1. text=“”语句会被自动执行,可以将该语句嵌入的过程是(  )
A . Command1_click B . Form_load C . Text1_click D . Timer1_timer
在VB语言中,下列变量中不合法的变量是(  )。
A . a_12 B . a1_2 C . 1_a2 D . a12_
“旋转数组”过程是指将数组中的元素向右移动k个位置,其中k是非负数。以数组a向右移动3个位置为例,其移动过程有如下两种方法:

原始数据:

a(1)

a(2)

a(3)

a(4)

1

2

3

4

方法一:

①向右旋转1步:

a(1)

a(2)

a(3)

a(4)

4

1

2

3

②向右旋转2步:

a(1)

a(2)

a(3)

a(4)

3

4

1

2

③向右旋转3步:

a(1)

a(2)

a(3)

a(4)

2

3

4

1

方法二:

①将a(1)值放至旋转3个位置后位置a(4):

a(1)

a(2)

a(3)

a(4)

1

2

3

1

②将原a(4)值放至旋转3个位置后位置a(3):

a(1)

a(2)

a(3)

a(4)

1

2

4

1

③将原a(3)值放至旋转3个位置后位置a(2):

a(1)

a(2)

a(3)

a(4)

1

3

4

1

④将原a(2)值放至旋转3个位置后位置a(1):

a(1)

a(2)

a(3)

a(4)

2

3

4

1

有n个数存储在数组a中,给定一个整数p(1≤p≤n),将数组a的前p个数与后n-p个数分别向右旋转k次。例如数组a的各个数值分别是1,2,3,4,5,6,7,当p=4,k=1时,旋转后的结果为4,1,2,3,7,5,6。小明为此编写了VB程序,功能如下:在文本框Text2、Text3中依次输入p和k的值,单击“旋转数组”按钮Command1后,数组旋转后结果显示在Text4中。程序运行界面如下图所示,请回答下列问题:

  1. (1) 当文本框Text3中输入内容修改为3时,执行该程序后,a(3)的值为
  2. (2) 请在划线处填入合适的代码。

    Dim a(20) As Integer

    Const n = 20

    Private Sub Form_Load()

    '随机产生n个[1,100]之间的随机整数,依次存储到a(1)、a(2)、…a(n)中,并在文本框Text1显示,代码略

    End Sub

    Private Sub Command1_Click()

     Dim i As Integer, p As Integer, k As Integer, cnt As Integer, c As Integer, t As Integer

     p = Val(Text2.Text)

     k = Val(Text3.Text)

    i = 1: start = 1:c = a(i): cnt = 1

     Do While cnt<= p      '方法二

    i =    ①  

     t = a(i)

     a(i) = c

     If     ②    Then

     start = start + 1

    i = i + 1

     c = a(i)

     Else

     c = t

     End If

    cnt = cnt + 1

     Loop

     For i = 1 To k      '方法一

     temp = a(n)

     For j =    ③   

     a(j) = a(j - 1)

     Next j

    a(p + 1) = temp

     Next i

     For i = 1 To n

     s = s + Str(a(i))

     Next i

    Text4.Text = s

    End Sub

     ② ③ 

表达式16/4-2^5*8/4 MOD 5\2的值为值是 (   )。 
A . 14 B . 4 C . 20 D . 2
Python中变量的命名遵循的规则,不正确的是(    )
A . 必须以字母或下划线开头,后面可以是字母、数字或下划线 B . 不区分大小写 C . 区分大小写 D . 不能使用保留字
给定正整数 n(1≤n≤26),要得到中间以“A”开始,两边各递增 n-1 个字符的对称字符串s,例如 n=5,则 s=“EDCBABCDE”。实现该功能的 VB 程序段如下:

s = ""

For i = 2 * n - 1 To 1 Step -1

If i <= n Then

  S=

Else

  S=

End If

Next i

上述程序段方框处的语句分别为:(    )

A . Chr(Asc("A") + n - i) + s 和Chr(Asc("A") + i - n) + s B . Chr(Asc("A") + n - i) + s和s + Chr(Asc("A") + i - n) C . Chr(Asc("A") + n – i+1) + s和Chr(Asc("A") + i – n+1) + s D . Chr(Asc("A") + n - i) + s和s + Chr(Asc("A") + i – n+1)
有如下VB程序段:

Dim k As Integer

s = 0: k = 0

For i = 1 To 4

    t = a(i)

    a(i) = k + t

    k = t

    s = s + a(i)

Next i

Text1.Text = Str(s)

数组元素 a(1)至 a(4)的值依次为“1, 3, 2, 0”,执行该程序段后,文本框 Text1 中显示的是(    )

A . 9 B . 10 C . 11 D . 12
下列VB程序段功能为:字符串s1、s2仅由字母组成,长度相同,在忽略大小写的情况下判断两者是否相同,结果显示在Label1中。

For i = 1 To Len(s1)

c1 = Mid(s1, i,1): c2 = Mid(s2, i, 1)

    If  Then

       If  Then Exit For      '退出For循环

       If  Then Exit For

       If  Then Exit For

    End If

Next i

If i > Len(s1) Then Label1.Caption =“相等” Else Label1.Caption =“不相等”

上述程序段中方框处可选语句为:

①Abs (Asc(c1) - Asc(c2)) <> 32 ②c1 <> c2

③c1 >= "a" And c2 >= "a" ④c1 <= "Z" And c2 <= "Z"

则(1)(2)(3)(4)处语句依次可为(      )

A . ①②③④ B . ①③④② C . ②①④③ D . ②④③①
在某区间内有若干个障碍物,现需找出一个最大的空正方形用于建设方形场地。如图所示,将该区间用网格表示(区间范围m*n,m、n的值均在1-1000之间),障碍物(黑色圆点)位于若干个网点上,障碍物个数及位置随机生成。

对w*h(10*8)网格数据进行存储,无障碍物的位置对应数组元素数值为0,有障碍物的位置对应数组元素数值为1。数组d中数据初始化后,对应数组元素数值d(2)=1:d(27)=1 :d(33)=1:d(45)=1:d(52)=1:d(57)=1,其他数组元素数值为0。对应最大空正方形的起始位置为3,边长为4。

找最大空正方形的方法如下:①从当前位置右下角开始逐渐扩大正方形边长,直到有障碍物出现,不能再扩展为止;②取下一个位置,按照步骤①继续查找,最后1列为边界,该位置上无需查找。

  1. (1) 给定7*8网格,有障碍物的位置为d(8)=1:d(18)=1:d(27)=1:d(36)=1:d(52)=1,则对应最大空正方形的起始位置和边长分别为。(注:两个数字之间请用逗号“”,隔开)
  2. (2) 小李根据上述描述,设计了一个查找最大的空正方形起始位置和边长的算法。算法的VB程序如下请在划线处填入合适的代码。

    Const W=10

    Const h=8

    Dim d(1 To w*h)As Integer

    Private Sub Form_Load( )

        ‘数组初始化,无障碍物的位置对应数组元素值为0,有障碍物的位置对应数组元素数值为1

    End Sub

    Private Sub Command l_Click()

        Dim i As Integer,length As Integer,maxw As Integer

        Dim max As Integer

        max=0

        For i=1 To w*h

        If i Mod w <> 0 Then ‘判断该位置是否需要查找

            If length>max Then max =length:maxw=i

        End If

         ‘输出最大空正方形的起始位置和边长,代码略。

    End Sub

    Function scan(k As Integer)As Integer

        Dim j As Integer

        Dim t As Integer,s As Integer

        Dim dw As Integer

        t=1

        Do While k\w+1+t<h And

            s=0

            dw=k+w+1

            For j=1 To t^2

                s=s+d(dw+w*((j-1)\t)+(j-1)Mod t)

            Next j

            If Then

                Exit Do     ‘退出循环

            Else

                t=t+1

            End If

        Loop

        scan=t

    End Function

语句print( 'abd' > 'abc' and 20%6 = = 10%4 )的结果为(    )
A . False B . True C . 3 D . 编译错误
给定一个数组(有n个元素),小李通过边分段、边合并的方式将n个数据处理成一个非降序数据段(a(1)≤a(2)≤a(3)≤……≤a(n)),每一轮数据处理方法如下:

1)查找相邻两个非降序数据段:在未处理的数据区域中,从前往后找出第一个最长非降序数据段。若该数据段后面没有元素,则本轮处理完毕:否则在第1个数据段的后面,从前往后找出数组中第二个最长非降序数据段。

2)合并两个数据段:借助数组tmp.将查找到的两个相邻数据段合并成一个非降序数据段,然后将合并后的数据依次存回到原数组中。

3)若数组中还有未处理的数据,则重复(1)(2)步骤。每一轮数据处理完毕后,重新从数组第1个数据开始进行下一轮处理。若检测到某一轮没有合并处理,则说明n个数据已构成非降序数据段,数据处理结束。

  1. (1) 根据上述描述,若数组各元素为“3,9,7,6,8,2,1,5,7,4”,则第一轮合并处理完成后,数组中的数据依次是:(用“,”间隔)。
  2. (2) 实现上述功能的VB程序如下.请在划线处填入合适代码。

    Const n = 10

    Dim a(1 To n + 5) As Integer

    Din tmp(1 To n + 5) As Integer

        '读取n个整数保存到数组a中,并在文本概Text1中显示,代码略。

    Private Sub Comnand1_ Click()

        Do While True

            If Not Merge() Then Exit Do

            '在列表概List1中输出这一轮合并后的数据,代码略。

        Loop

    End Sub

    Function Position(low As Integer) As Integer

        Din i As Int eger

        For i=low To n-1

            If  Then Exit For

        Next i

        Position = i

    End Function

    Function Merge() As Bool ean

        Dim i As Integer, flag As Boolean, p1 As Integer, p2 As Integer

        Dim low1 As Integer, high1 As Integer, high2 As Integer

        flag = False: low1= 1

        Do While low1 < n

            high1 = Position(low1)

            If high1 = n Then Exit Do Else flag = True

            high2 = Position(high1 + 1)

            p1=low1:p2=high1+1

            i = low1

            Do While

                If p2>high2 Or p1 <= high1 And a(p1) < a(p2) Then

                    tmp(i)=a(p1):p1=p1+1

                Else

                    tmp(i)=a(p2):p2=p2+1

                End If

                i =i+1

            Loop

            For i = low1 To high2

                a(i) = tmp(i)

            Next i

            

        Loop

        Merge = flag

    End Function

某数据解密算法描述如下:1)在输入的数字字串中依次提取有效的密文,有效的密文是一组连续的,都小于5的三位数字串; 2) 数字不能重复被提取:3)对有效密文进行解密:

①将密文进行转换为一个十进制数值:例如密文242转换的表达式为:2*53+4*5*+2*5*=72 对应的明文字符为大写“H":

②得到的数值就是对应明文的ASCII 字符的十进制编码(提示:空格所对应的ASCII值为十进制32,小写字母“z”所对应的ASCII值为十进制数122);

程序运行界面如下图所示。在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2 中输出解密后的明文密码。实现上述功能的VB代码如下:

Private Sub Convnand1_Click()

    Dim st, p, c1, c2, c3 As String

    Dim i, d, res As Integer

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

    i=1:res=””

    Do While i <=n- 2      '提取有效密文,并进行转换

        c1 = Mid(st, i, 1): c2 = Mid(st, i + 1, 1): c3= Mid(st, i +2, 1)

        If  Then    ‘①

            p = Mid(st, i, 3)

            d = conv(p)

            If d>=32 And d<=122 Then res= res + Chr(d)

                   ②      

        Else

            i =i+1

        End If

    Loop

    Text2 Text =    ③       

End Sub

‘以下代码是将有效密文数字转换为十进制数的函数

Function conv(p As String) As Integer

    Dim k As Integer, q As String, i As Integer

    k=0:q=””

    For i =ITo 3

        q = Mid(p, i, 1)

              ④      

    Next i

    conv=k

End Function

  1. (1) 若输入密文为“841497230235",则明文是
  2. (2) 程序代码中①加框处的语句有错,请改正:
  3. (3) 程序代码中②下划线请补充完整:
  4. (4) 程序代码中③下划线请补充完整:
  5. (5) 程序代码中④下划线请补充完整:
假设a="hello",b="2020",c=a+b,运算后变量c 的值为(   )
A . hello+2020 B . "hello+2020" C . "Hello2020" D . " hello2020"
有如下VB程序段:

For i=1 To 6

    If i Mod 2<>0 Then

        If a(i) Mod 10>5 Then

            a(i)=a(i) \ 10

        Else

            a(i)=a(i) Mod 10 

        End If

    Else

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

    End If

Next i

程序运行后a(1)到a(6)的值分别是2,3,4,5,0,1,则a(1)到a(6)各元素的初始值可能是(     )

A . 26,1,4,2,8,3 B . 12,1,14,2,11,3 C . 15,1,2,3,4,5 D . 29,1,40,2,3,30
有如下程序段,功能为判断a、b、c三条线段能否构成三角形。

a=int(input("请输入线段a的长度:"))

b=int(input("请输入线段b的长度:"))

c=int(input("请输入线段c的长度:"))

if             :

print("可以构成三角形")

else:

print("不可以构成三角形")

为实现上述程序功能,则划线处应填入的表达式是(     )

A . not (a + b <= c or a + c <= b or b + c <= a) B . a + b > c and a + c > b and b + c > a C . not (a + b <= c and a + c <= b and b + c <= a) D . a + b > c or a + c > b or b + c > a
有如下Python程序段:

a=input('请输入一串英文字符串:')

s=''

sum=0

for ch in a:

  s=s+str(ord(ch)-ord(‘A’)-1)

  for ch in s:

    sum+=int(ch)

print(sum)

若输入字符串为‘ZBAX’(不包含前后引号),则输出结果为(     )

A . 8 B . 13 C . 17 D . 4