2.2 做出判断的分支 知识点题库

已知a=3.69,b= -6,则VB表达式int(-a)+b mod 5的值为(  )
A . -3 B . -4 C . -5 D . -6
【加试题】已知数组元素 a(1)到 a(9)的值为{19,28,37,46,55,64,73,82,91},若在 Text1 中输入 29,然后执行下面程序段:

Key = Val(Text1.Text) \10 Text2.Text = ""

i = 1: j = 9: f = False

Do While i <= j And Not f m = (i + j)\ 2

If a(m) Mod 10 = Key Then search = m: f = True

ElseIf a(m) Mod 10 > Key Then i = m + 1

Else

j = m - 1 End If

Text2.Text = Text2.Text + Str(m) Loop

执行完该程序段后,Text2中显示的内容是(  )

A . 5   2 B . 55   37   28 C . 5   7   8 D . 55   73   82
有如下VB程序:

Private Sub Command1_Click()

 Dim a(1 To 5) As Integer

 a(5)=Val(Text1.text)

 For i=4 To 1 Step -1

   a(i)=a(i+1)\2

 Next i

 Label1.caption=str(a(1))

End sub

在文本框Text1中输入“100”,单击命令按钮Command1后,标签Label1中显示的内容是(  )

A . 25 B . 6 C . 12 D . 50
双精度型数据用浮点形式表示时,底数用表示。
随机产生一个二位正奇数的VB表达式是(  )
A . Int(Rnd*99) + 1 B . Int(Rnd*88) + 11 C . 2* Int(Rnd*45 + 5) + 1 D . 2* Int(Rnd*45 + 5) - 1
【矩阵问题】将n个元素转换成(nm)*m矩阵(n是m的倍数),例如有42个元素,m=7,则可转换成6*7(6行7列)的矩阵。转换示例如下:

转换前元素次序为:

12  2  5  3  6  9  4  10  8  5  6  9  6  3  5  8  11  2  8  9

转换为矩阵如下:

现要在矩阵中寻找一个规模为3*3的子方阵,使得该子方阵的各元素之和最大。

  1. (1) 若n=25,m=5,则该矩阵中共有3*3的子方阵个数为。(填数字)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click ( )

    Dim a (1 To 100) As Integer

    Dim sum (0 To 101) As Long ‘ sum(i) = a(1)+a(2)+a(3)+…+a(i)

    Dim i As Integer, j As Integer, n As Integer

    Dim m As Integer, k As Integer

    Dim ans As logn, begin As Integer

    Dim maxi As Integer, maxsum As Long, s As String

    n= Val(Text. Text)

    m= Val(text2. Text)

    ‘ 随机生成n个整数存储在a数组中,并以(n\m)行m列矩阵形式显示在列表框List1中

    ‘ 代码略

    k=3

    sum(1) = a(1)

    For i = 2 To n    ‘ 求sum(i)

            ①      

    Next i

    maxsum =0

    ans = 0

    For i =1 To n\m -k+1

      For j = k To m

        begin = (1-1)*m = j-k+1

        maxsum=  maxsum + sum (j+(i-1)* m)-sum(j-k+(1-1)*m)

                ②         

        maxsum = maxsum + sum(j+(i+1)* m)-sum(j-k+(i +1)* m)

        If maxsum > ans Then ans = maxsum

        maxi begin

        maxsum =0

      Next j

    Next i

    s = “”

    For i = 1 To k

        For j =1 To k

          s =      ③       

          List2 AddItem s

          s = “”

        Next j

    Next i

    List2 AddItem "maxsum ="+ Str(ans)

    End sub

     ② ③ 

某密码强度判断程序功能如下:在文本框Text1中输入由大写字母、小写字母、数字和其他字符4种不同类型字符组成的密码字符串,单击“判断”按钮Cmd1,在标签框Label3中显示判断结果。程序运行界面如图所示。

密码强度判断条件如下:密码长度小于6,则强度为“弱”。在密码长度大于等于6的情况下,若只出现一种字符,则密码强度为“弱”;若出现两种不同字符,则密码强度为“中”,出现3种以上不同字符,则密码强度为“强”。

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

    Private Sub Cmd1_Click()

    Dim n As Integer,i As Integer,m As Integer,s As String,c

    As String

        ①   

    If n<6 Then

      Label3.Caption ="弱"

    Else

      s= "0000"

      For i = 1 To n

        c=Mid(Text1.Text,i,1)

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

          Mid(s,4,1)= "1"'将字符串s第4位上的字符替换为"1"

        Elself c > ="A" And c<="Z" Then

          Mid(s,3,1)= "1"

        Elself c>="a" And c<="z" Then

            ② 

        Else

          Mid(s,1,1)= "1"

        End If

      Next i

      m = 0

      For i = 1 To 4

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

      Next i

      If m< 2 Then

        Label3.Caption="弱"

      Elself m = 2 Then

        Label3.Caption="中"

      Else

        Label3.Caption="强"

      End If

    End If

    End Sub

  3. (3) 若文本框Text1中输入的内容为“a26$gh2!”,单击判断按钮Cmd1,事件过程运行结束时,变量s的值为
“轮转后有序数组(RotatedSortedArray)”是将有序数组取其中某一个数为分点,将其之前的所有数都轮转到数组的末尾所得。比如{7,11,13,17:2,3,5}就是一个轮转后的有序数组,原有序数组中的子串{2,3,5}被轮转到了数组的末尾处。

对于一个轮转后有序数组arr可以进行二分查找,算法思路如下(以升序为例):

每次根据查找的左侧位置L和右侧位置R求出中间位置M后,M左边,M和右边[M+1,R],这两部分中至少一个是有序的(可根据中间位置数据和边界数据的大小关系判断)。

arr[M]和待查找数据Key比较

①arr[M]=key,返回M的值

②若M位置的右侧有序,当待查找数据在右侧,则下次在右侧查找,否则在M左侧查找

③若M位置的左侧有序,当待查找数据在左侧,则下次在左侧查找,否则在M右侧查找

  1. (1) 对于轮转后有序数组{7,11,13,17,2,3,5}使用以上函数search( )查找key值3,所需要的查找次数为
  2. (2) 以下VB函数Search( )实现了对轮转后有序数组arr进行二分查找的过程,如果查询成功,返回m值,查询失败则返回-1。请补充程序中①②③划线处的代码:

    Function Search (key As Integer, L As Integer, R As Integer) As Integer

        ①   

    Do While L<=R And Search=-1

    M=(L+R)\2

    If arr(M)=key Then

    Search=M

    Else

    If    ②    Then

    If arr(L)<=key And key<arr(M) Then

    R=M-1

    Else

    L=M+1

    End If

    Else

    If    ③    Then

    L=M+1

    Else

    R=M-1

    End If

    End If

    End If

    Loop

     ② ③ 

现要编写一个程序,对每个班级的同学生成考试座位号,规则如下:先按成绩从高到低排序,如果成绩相同,学号在前的学生座位号在前,最后输出每个同学的座位号。小王和小李采用不同的方法实现了上述算法。请仔细比较两位同学的代码的不同之处,并完成相关代码的填空。

Dim xm (1 To n) As String,xh(1 To n) As String

Dim cj(1 to n)As Integer

Private Sub form_load()

“读取相关数据表,把姓名、学号、成绩分别存储到数组xm、xh、cj中,并在List1中显示,代码略

End Sub

Private Sub Com1__Click()    ‘小王编写的代码部分

Dim wz (1 To n) As Integer

  For i = 1 To n-1

    wz(i) = i

    For j = n To i+1 Step-1

      IfThen

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

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

      End If

    Next j

  Next i

 

    For i = 1 To n-1

      For j = n To i+1 Step-1

        IfThen

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

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

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

        End If

      Next j

    Next i

  List2.Clear

    List2.AddItem“学号姓名成绩座位号”

    For i = 1 To n

      List2.AddItemxh(i)+“”+xm(i)+“”+Str(cj(i))+“”+Str(wz(i))

    Next i

  End Sub

Private Sub Com2_Click()      ‘小李编写的代码部分

Dim wz(1 To n) As Integer,t(1 To n) As Integer

  For i = 1 To n

    t(i)=i

  Next i

  For i = 1 To n

    For j = n To i+1 Step-1

      IfThen

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

      End If

    Next j

   

  Next i

List2.Clear

List2.AddItem“学号 姓名 成绩 座位号”

  For i = 1 To n

    List2.AddItemxh(i)+“”+xm(i)+“”+Str(cj(i))+“”+Str(wz(i))

  Next i

End Sub

下列合法的变量名是(   )
A . if B . i C . *c D . True
下列选项中,能作为VB程序变量名的是(   )。
A . s+1 B . 3stu C . true D . s1
某VB程序的部分代码如下:

Dim a(1 To 9)As Integer

Text 1.Text=""

For i=1 To 9

    a(x(i))=a(x(i))+1

Next i

For i=1 To 9

    For j=1 To a(i)

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

    Next j

Next i

若数组x(1)到x(9)的值依次为“8,9,7,3,2,7,1,4,2”,则执行该程序段后,在文本框Text1中显示的是(  )

A . 1 2 3 4 7 8 9 B . 1 2 2 3 4 7 7 8 9 C . 9 8 7 4 3 2 1 D . 9 8 7 7 4 3 2 2 1
有如下VB程序段,其中数组a各元素已赋值,且a(1)=1, a(2)=2;

t =True

For i =3 To 10

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

    If a(i)-a(i-1)<>2*dThen

t = False

    End If

Next i

执行程序后,t的值是True,则a(10)的值为(    )

A . 64 B . 128 C . 256 D . 512
若变量a = 5,b = 4,c = 3,d = 2,则表达式not 3>2*b and (b>c+1 or c<>3)的值是(    )。
A . True B . Flase C . 4 D . 无解
以下表达式结果与其他三项不同的是(     )
A . Len("sy2021") B . Mid("1996SX",4,1) C . 5+15 Mod 13\5 D . Sqr(Abs(-9))+Val("3")
下列变量名合法的是(    )
A . 2a B . if C . a+b D . E6a
下面程序输入X的值,按以下公式求Y的值。

 

Private Sub Command1_Click( )

    X=Val(Text1.Text)

    Select Case X

        Case  

            Print “出错”

        Case Is<0

            Y=100-X

        Case 0 To 100

            Y=100+X

        Case   

            Y=400

    End Select

    Text2.Text=X

End Sub

键盘依次输入3和4,执行如下程序,则运行结果为(    )

a=int(input())

b=int(input())

if a%3==0:

  if b%2==0:

    c=a**b

  else:

    c=a*b

  else:

    c=a-b

print(c)

A . -1 B . 81 C . 12 D . 64
某班级学习委员编写了一个随机抽取学生的程序,用于辅助班级作业检查。具体功能如下,班级名单存储在文件“mingdan.csv”中,输入抽取的学生数k,则输出随机抽取的学生名单。文件“名单”部分界面如图a所示,程序运行结果如图b所示。python程序代码如下,请回答下列问题。

图 a

图 b

from random import randint   import csv

k = int(input("请输入抽取人数: print("抽取人员名单为: ")

f = open("mingdan.csv")

f_csv = csv.reader(f)

dic = {}

num = 0

for row in f_csv:

  if num == 0:"))

    print(row[0]," ",row[1])

    num += 1

    continue

  dic[num] = [row[0],row[1]]

  num += 1

  f.close()

  num -= 1

  i = 0

while i < k:

  luck =      ①    

  

  print(dic[luck][0],      ③     )

  i += 1

  if num == i + 1:

    Break

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

        ②   ③

  2. (2) 如果删除加框处代码,则对程序造成的影响为                      (单选,填字母)
    A . 程序出现语法错误,无法正常运行 B . 当k<=num时,输出数据可能少于k行 C . 当k<=num时,输出数据可能多于k行 D . 输出的数据中,可能存在重复的人员
x是整型变量,下列选项中,与表达式not x<=3 and not x>6等价的是(     )

①not(x<=3 and x>6)   ②not(x<=3 or x>6)   ③x>3 and x<=6   ④x>3 or x<=6

A . ①③ B . ①④ C . ②③ D . ②④