第4单元 计算与问题解决 知识点题库

王五为学生们设计了学校食堂学生校园卡查询系统,在终端机上输入学生的校园卡卡号,可以查出该卡对应的学生姓名及相应的余额。

校园卡信息存储在一个综合的数据库“school.mdb”,其中的“Yue”数据表用来存储学生的校园卡基本信息,包括学号(num)、姓名(name)、余额(money),括号内的为对应字段名。下列VB程序用来实现根据学号查询并显示学生姓名及余额,运行界面如图所示:

数据库文件与应用程序在同一文件夹中,在文本框Text1中输入学生的学号,单击“查询”按钮,在标签Label4、Label5中分别显示学生姓名和余额。

Private Sub Command1_Click()

 Dim adocn As new connection

 Dim adors As new recordeset

 Dim str1 As string,str2 as string

 Str1=”driver=microsoft access driver(*.mdb);dbq=”&app.path&”\    ①      .mdb”

 Adon.open str1

 Str2=”select * from Yue where    ②     =’”+text1.text+”’”

 Adors.open str2,adocn,adOpenDynamic,adLockOptimistic

 If adors.eof then

  Msgbox”你输入的学号不存在!”

 Else

  Label4. caption =adors.Fields(“name”).value

       ③         =adors.Fields(“money”).value

 Endif

 Adors.close

 Adocn.close

End Sub

为了实现上述目标,在画线处填入合适的语句或表达式:

【加试题】下列程序执行后文本框 Text1 显示的内容是 (   )

s = "ERROR:Divisor must not be zero!"

flag = False  :  m = 0

For i = 1 To Len(s)

ch = Mid(s, i, 1)

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

If Not flag Then

m = m + 1  : flag = True

End If   

Else

flag = False

End If  

Next i 

Text1.Text=Str(m)

A . 4 B . 5 C . 6 D . 19
【加试题】编写一个技术成绩查询的 VB 程序。程序功能如下:在文本框 Text1 中输入分数 key(0-50 的整数),单击“查询”按钮 Command1,查询出信息成绩大于等于 key 的所有记录,并以“信息”为主要关键字、“通用”为次要关键字均进行降序排序,结果输出在列表框 List2 中。运行界面如下图所示。

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

  1. (1)    观察上图,排序后第 5 位的学生姓名是
  2. (2) 请在划线处填入合适的代码。

    Dim xm(1 To 600)  As String     '存储学生姓名

    Dim xx(1 To 600)  As Integer   '存储信息成绩

    Dim ty(1 To 600)  As Integer   '存储通用成绩

    Dim n As Integer           '存储记录总数

    Private Sub Form_Load()

    '本过程从数据库中读取学生数据,存储在相应的变量中,并在 List1 中显示'代码略

    End sub

    Private Sub Command1_Click()

    Dim key As Integer, mid As Integer

    Dim i As Integer, L As Integer, R As Integer, k As Integer

    Dim tmp1 As String, tmp2 As Integer

    '以“信息”为主要关键字、“通用”为次要关键字排序

    For i = 1 To n - 1

    k = i

    For j = i + 1 To n

    If xx(k) < xx(j) or Then

    k = j

    End If

    Next j

    If k <> i Then

    tmp1 = xm(k)  :  xm(k) = xm(i)  :  xm(i) = tmp1

    tmp2 = xx(k)  :  xx(k) = xx(i)  :  xx(i) = tmp2

    tmp2 = ty(k)  :  ty(k) = ty(i)  :  ty(i) = tmp2

    End If

    Next i '查询记录

    key = Val(Text1.Text) L = 1  :  R = n

    Do While L <= R

    mid = (L + R) \ 2

    If Then

     L = mid + 1

    Else

    R = mid - 1

    End If

    Loop

    List2.Clear

    ' vbTab 相当于是键盘上制表符 TAB 按键的功能

    List2.AddItem "姓名" & vbTab & "信息" & vbTab & "通用"

    For i = 1 to

    List2.AddItem xm(i) & vbTab & xx(i) & vbTab & ty(i)

    Next i

    End sub

【加试题】某个进行素数判断的VB程序段如下:

Private Sub Command1_Click()

    Dim x As Integer

    x=Val(Text1.Text)

    Label1.Caption=Str(x) & prime(x,2)

End Sud   

Function prime(n A Integer m A Integer)As String

    If n=m Then

        prime=“是素数。”

    ElseIf n<2 Or n Mod m=0 Then

        prime=“不是素数。”

    Else

    prime=prime(n,m+1)

End If

End Function

在文本框Text1中输入的值是123,并执行程序后,自定义函数prime( )被执行的次数是(  )

A . 1次 B . 2次 C . 122次 D . 123次   
用VB设计一个模拟选手得分程序,在文本框Text1中输入裁判人数(人数大于2),然后点击Command1按钮,在List1中产生70到100的随机数为裁判的打分,去除一个最高分,去除一个最低分,取其他裁判打分的平均分作为最终得分显示在文本框Text2中,运行效果如图所示。

  1. (1) 若要在程序运行时,修改窗体显示的标题为“得分计算”,则下面语句可行的是。(单选,填字母:A .Command1.Caption=“得分计算”/B .Form1.Name=“得分计算”/C .Form1.Text=“得分计算”/D .Form1.Caption=“得分计算”)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim n As Integer   '裁判人数

    Dim max As Integer, min As Integer, sum As Integer

    Dim AveScore As Single  '存储最终得分

    n = Val(Text1.Text): sum = 0

    If n <= 2 Then MsgBox ("输入数据要大于2,请重新输入!")

    If n > 2 Then

        List1.Clear

        Randomize

        score = Int(Rnd() * 31) + 70

        List1.AddItem Str(score)

       

        max = score

        min = score

        For i = 2 To n

            score = Int(Rnd() * 31) + 70

            List1.AddItem Str(score)

            If score > max Then max = score

            If score < min Then min = score

            sum = sum + score

        Next i

        AveScore =

        Text2.Text = Str(AveScore)

    End If

    End Sub

  3. (3) 若要将最终得分保留一位小数(四舍五入),下列代码可行的是______________________。
    A . AveScore=int(AveScore+0.5) B . AveScore=int(AveScore*10+0.5)/10 C . AveScore=int(AveScore*100+0.5)/100
如图所示加密程序:在文本框Text1中输入明文,单击命令按钮“加密”,在文本框Text2中输出密文。加密算法思路如下:1、只针对英文字符和数字进行加密,其余字符不变;2、将原文中的小写字母转换为大写字母;3、根据第2步所得结果,若是英文字符,则逐个后移4位(例如:A->E,Z->D),若是数字,则逐个前移2位(例如:3->1,1->9)。

综上所述:原文为Jim is at room 4!,加密后输出密文为:NMQ MW EX VSSQ 2!

  1. (1) 该程序单击命令按钮“加密”事件处理过程名为
  2. (2) 程序代码如下,请填空

    Private Sub Cmd1_Click()

    Dim str1 As String, str2 As String, ch As String

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

    str1 = Text1.Text

    str2 = ""

    n = Len(Text1.Text)

    For i = 1 To n

       ch = Mid(str1, i, 1)

       If Then

         ch = Chr((Asc(ch) - 32))

       End If

       If ch >= "A" And ch <= "Z" Then

         ch = Chr((Asc(ch) - Asc("A") + 4) Mod 26 + Asc("A"))

       ElseIf ch >= "0" And ch <= "9" Then

         ch = 

     End If

    Next i

    Text2.Text = str2

    End Sub

  3. (3) 若在Text1中输入的明文为:Num  15*,则程序运行后在Text2中输出的密文为:
有如下 VB 程序段:

i = 1: j = 63: n = 0

Do While i <= j

m = (i + j) \ 2

If key = a(m) Then Exit Do

ElseIf key < a(m) Then j = m - 1: n = n - 1

Else

i = m + 1: n = n + 1 End If

Loop

数组元素a(1)到a(63)存放着递增的数据。若执行该程序段后,n 的值为 6,则下列表达式成立的是(  )

A . key < a(1) B . key = a(1) C . key = a(63) D . key > a(63)
某对分查找算法的VB程序段如下:

i=1:j=6:flag=False key=Val(Text1.Text)

Do While i<=j And flag = False

   m=(i+j)\2

   If key=a(m) Then flag=True

   If key<a(m) Then j=m-1 Else i=m+1 Loop

数组元素a(1)到a(6)的值依次为“7,9,15,27,34,51”。文本框Text1中输入“27”后运行该程序,运行结束后,下列说法不正确的是(  )

A . 变量flag的值为True B . 变量i的值为5 C . 变量 j 的值为4 D . 变量 m 的值为4
【加试题】 有如下VB程序段:

Dim a(1 To 10) As Integer

a(1) = 1: a(2) = 2

For i = 3 To 10

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

Next i

i = 1: j = 10: f = False

Do While i <= j And f = False

    num = num + 1

    m = (i + j) \ 2

    If num = a(m) Then

        f = True

    ElseIf num < a(m) Then

        j = m - 1

    Else

        i = m + 1

    End If

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

Loop

该程序段执行结束后,文本框Text1中显示的内容是(  )

A . 8  2 B . 5 2 C . 8 2 3 D . 5 2 3
我们在用计算机解决问题时,常采用递归法。已知:f(3)=3;当n>3时,f(n)=f(n-1)*n;编程求f(5)的值。下列结果正确的是(  )
A . 120 B . 60 C . 3 D . 23
某数组有10个元素,依次为5、12、16、23、27、3、35、41、49、50,下列选项中正确的是(  )
A . 使用对分查找算法查找数据12,需要的查找次数是3 B . 使用顺序查找算法查找数据50,需要的查找次数是9 C . 使用对分查找算法查找数据41,需要的查找次数是2 D . 使用顺序查找算法查找数据5,需要的查找次数是0
有如下程序段:

Dim a(1 To 10)As Integer

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

Dim key As Integer

i= 1:j = 10:key = Val(Text1.Text)

Do While i <=j

    m =(i + j)\2

    If key < a(m)Then

      j = m - 1

    ElseIf key > a(m)Then

      i = m + 1

    Else

      Do While m>1

        lf a(m - 1)= key Then

          m = m - 1

        Else

          Exit Do

        End If

      Loop

      Exit Do

    End If

Loop

数组中a(1)到a(10)依次为“1,1,2,3,3,3,3,4,4,4”,若在文本框Text1中输人3,经上述程序段执行后,变量m的值为(  )

A . 7 B . 6 C . 5 D . 4
某对分查找算法的 VB 程序段如下:

n  = 0: i = 1: j = 6

Key = Val(Text1.Text)

Do While i <= j

  m = (i + j) \ 2

  n = n + 1

  If Key = d(m) Then Exit Do

  If Key < d(m) Then j = m - 1 Else i = m + 1

Loop

If i <= j Then  s = m - n Else  s = n

数组d(1)到d(6)的值依次为“4,6,9,13,20,25”,输入某个Key值后,运行该程序段后,变量s结果为3,则输入key的值不可能是(   )。

A . 25 B . 20 C . 5 D . 3
在有序单词序列“bike,cake,data,easy,feel,great,hive,mark,sweet”中,用对分查找算法找到“easy”的过程中,依次被访问到的数据为(  )
A . feel,data,easy B . great,data,easy C . bike,cake,dada,easy D . feel,cake,data,easy
有如下VB 程序代码段:

i = 1: j = 10: c = 0

k = Val(Text1.Text)

Do While i <= j

    m = (i + j) \ 2

    c = c + 1

    If a(m) >= k Then

        j = m - 1

    Else

        i = m + 1

    End If

Loop

数组元素a(1)到a(10)的值依次为“1,4,10,21,21,26,27,29,30,36”,在文本框Text1中输入“21”,执行该程序段后,下列说法正确的是(    )

A . 变量i的值是3 B . 变量j的值是4 C . 变量c的值是4 D . 变量m的值是3
脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。构成DNA的碱基共有 4 种,分别为腺嘌呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。在两条互补碱基链的对应位置上,A总是和T配对,G总是和C配对。编写Python程序实现如下功能: 随机产生一条单链上的碱基序列,输出其对应的互补链上的碱基序列。(    )

import random

DNA=['A','G','T','C']

s=''

for i in range(20):

        ①       

print(s)

match={'A':'T','T':'A','G':'C','C':'G'}

t=''

for i in range(20):

        ②       

print('互补链:',t)

A . ①s=random.choice()+s         ②t= t+match[i] B . ①s=s+random.choice(DNA)    ②t= t + match[s[i]] C . ①s=s+random.choice()          ②t= t + match[s[i]] D . ①s=random.choice(DNA)+s     ②t= t + match[i]
下面关于算法的描述,正确的是(    )
A . 一个算法只能有一个输入 B . 算法只能用流程图来表示 C . 一个算法的执行步骤可以是无限的 D . 一个完整的算法,不管用什么方法来表示,都至少有一个输出结果
算法是指(     )。
A . 数学的计算公式 B . 程序设计语言的语句序列 C . 问题的精确描述 D . 解决问题的精确步骤
某程序功能如下输入n,生成n*n的方阵,存于列表a,内容为1至9的随机整数。再对以(x0,y0)和(x1, y1)为对角顶点的矩形区域中的数据进行水平翻转,并将变换后的二维数组以矩阵形式输出。再输入小于n的四个数字(如a,b,c,d,四者关系必须满足a<c,b<d),用逗号间隔: 2,1,6,5 则左上角为a[1][2] ,右下角为a[5][6],则运行程序后,运行界面如图所示。

  1. (1) 以上图为例,如果输入左上角+右下角的坐标为:2,3,7,5。水平翻转后,则元素a[3][4]的值在新数组保存在元素a[][](填写下标)中。
  2. (2) 代码如下并完成填空。

    #生成n*n的矩阵

    import random

    n=int(input(‘输入n,产生n*n的方阵:’ ))

    a=[[random.randint(1,9) for i in range(n)] for j in range(n)]

    for i in a:

      print(i)

    print( )

    x,y=[],[]

    xy=input("请输入左上角+右下角坐标:") #输入左上角坐标+右下角坐标,用逗号分隔数字。如:"2,1,14,13"

    xy=xy+","

    c,j=0,0

    for i in range(len(xy)):

      if xy[i]==",":

        if :

          x.append(int(xy[j:i]))

        else:

          y.append(int(xy[j:i]))

       

        c=c+1

    for i in range(y[0],y[1]+1,1):

      for j in range(x[0],(x[0]+x[1])//2+1,1):

        a[i][j],a[i][]=a[i][],a[i][j]

    for i in range(len(a)):

      print(a[i])

人们在利用计算机程序解决同一个问题的时候,可以设计多种不同的算法。