程序的调试及运行 知识点题库

小丁想买几张6+1彩票,选号时,他希望前4位用自己的生日:11月8日,即1108,特别号码他选了买彩票日子的个位数5,并且他希望前六个数字组成的数能被他的幸运数字9整除。他的好朋友小杰帮他设计了一个VB程序,可以提供一份符合这些要求的号码清单供他挑选。相应的界面如图1所示。阅读程序并完成后面的问题。

图1

 

  1. (1) 设计应用程序界面时,为添加a所指向的对象,应使用2图所示的“控件工具箱”中的 (填写相应编号);在图3所示的“属性窗口”中,将 属性值设置为“开始”,可使图2中b所指向的对象显示“开始”。
  2. (2) 请根据题意将下列程序补充完整。

    Private Sub Command1_Click()

    Dim i as integer, j as integer, c As Integer

    Dim n As Long

    c = 0

    For i = 0 To 99

          n = 110800 + i

                  If        ①         Then

              List1.AddItem Str(n) + " " + "5"

                    ②     

         End If

    Next i

    Label2.Caption = "满足条件的数有:" + Str(c) + "组"

    End Sub
         ②

【加试题】某Visual Basic程序如下:(   )

Private Sub Command1Click()

  Dim a(-1 To 8) As Integer

  Dim i As Integer

  For i = -1 To 8

    a(i) = i * i

  Next i

  List1.AddItem Str (a(i))

End Sub

运行程序,单击命令按钮Command1后,出现的错误提示为

A . 下标越界 B . 子程序或函数未定义 C . 溢出 D . 类型不匹
输入一个三位数的整数,要求将此三位数的各位上的数字重新排列,组成一个尽可能大的三位数。例如:输入213,重新排列可得到尽可能大的三位数是321。

现要求编写VB程序(运行界面图所示),实现如下功能:在文本框Text1中输入一个三位数整数,单击“求解”按钮Command1,在文本框Text2中显示重新组合后的最大三位数整数。某同学按此要求编写的程序如下,其中函数max(x)用于求解最大三位数整数,但加框处代码有错,请改正。

      ②

Function max(x As Integer) As Integer

  Dim a As Integer, b As Integer, c As Integer, t As Integer

  a = x \ 100

  b = (x \ 10) \ 10             ' ①

  c = x mod 10

  If a < b Then t = a: a = b: b = t

  If a < c Then t = a: a = c: c = t

  If b < c Then t = c: c = b: b = t

  max = c* 100 + b * 10 + a     ' ②

End Function

Private Sub Command1_Click()

     Dim n As Integer, y As Integer

     n = Val(Text1.Text)

     y = max(n)

     Text2.Text = Str(y)

End Sub

某Visual Basic程序如下:

Private Sub Command1_Click()

  Dim s As String, i As Integer

  s = ""

  For i = 1 To 10 Step 2

      s = Str(i) + s

  Next i

  Text1.Text = s

End Sub

运行程序,单击命令按钮Command1后,在文本框Text1中显示的内容为(    )

A . 13579 B . 1 3 5 7 9 C . 9 7 5 3 1 D . 97531
对称字符串从左读到右和从右读到左完全一样,如“1221”“12321”。编写VB程序,判断输入字符串是否对称,程序运行界面如图a所示,在文本框Text1中输入字符串,单击Command1按钮,在标签Label2上显示判断结果。

  1. (1) 在设计程序界面时,要在Command1按钮上显示“判断”二字,应修改该按钮的属性。

  2. (2) 实现上述功能的VB程序如下,请在画线处填入合适的代码。

      Private Sub Command1_Click()

        Dim S As String,c1 As String,c2 As Integer

        Dim n As Integer,i As Integer

        Dim f As Boolean

        s=Text1.Text

        n=Len(S)

        f=True

        For i=1 To n\z

          c1=   ①  

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

          If c1<>c2 Then

            f=False

            Exit For

          EndIf

        Next i

        If    ②    Then

           Label2.Caption=“对称”

        Else

           Label2.Caption=“不对称”

        EndIf

      End Sub

     ②

  3. (3) 运行该程序,在文本框中输入aba,单击“判断”按钮后,出现图b所示错误提示,引起该错误的原因是(单选,填字母:A,变量s的数据类型错误;B,变量c2的数据类型错误;C,变量f的数据类型错误)。

数字之美:在数学中有一种规律数列,随着第一个因数末尾增加一个相邻自然数,积的末尾也增加一个相邻自然数。如1*8+1=9,12*8+2=98,123*84+3=987,……,这种数列可以组成完美的三角形结构,称为数字之美。这一规律用VB程序编写后,运行界面如图所示。

实现该功能的VB程序段如下:

Function space(x As Integer)As String        ‘输出格式化,设置左侧的空格数量

  Dim n As Integer

  For n=9 To x Step-1

     ①  

  Next n

End Function

Private Sub Form_Load()

  Dim t As Long,i As Integer,n As String

  Dim a(1 To 9)As String

  Dim b(1 To 9)As String

  Const num=“987654321”

  For i=1 To 9

    t=t*10+i

    a(i)=space(i)+CStr(t)  ‘CStr函数的功能是将数值转为字符,转换时不会添加空格

       ②   

    n=n+a(i)+“*8+”+CStr(i)+“=”+b(i)+Chr(13)       ‘Chr(13)实现换行处理

  Next i

  Label1.Caption=n

End Sub

  1. (1) 触发该功能的事件是(A,按钮的单击事件;B,窗体的加载事件;C,标签的修改事件)。
  2. (2) 在程序中①和②画线处填入适当的语句或表达式,把程序补充完整。

    在程序中①画线处应填入

    在程序中②画线处应填人

  3. (3) 若在定义时,将变量t的数据类型定义为Integer,运行后会出现(选填:下标越界、溢出、类型不匹配)错误。
如下程序:

Private Function f(x As Single, n As Integer) As Single

  If n =0 Then

    f =1

  Else

    If n Mod 2 =1 Then

      f=x * f(x, n\2)

    Else

      f=f(x, n\2) \x

    End If

  End If

End Function

Private Sub Command1_Click()

  Label1.Caption=Str(f(4, 6))

End Sub

程序运行时,单击按钮Command1,标签Label1显示的内容是(  )

A . 1 B . 4 C . 27 D . 64
编写VB应用程序,当用户输入的一串由字母、数字等字符组成的字符串,统计其中每个字母出现的次数(不分大小写)。程序运行时界面如图a所示。

图a

  1. (1) 设计应用程序界面时,为添加标签对象“输入字串:”,应使用图b所示的“控件工具箱”中的(填写相应编写),并在图c所示的“属性窗口”中,将属性设置为“输入字串:”。

  2. (2) 程序运行时,在Text1中输入字符串,单击“统计”按钮,在List1中显示统计结果。请在划线处填入合适代码。

    函数 IsLetter(x)功能,若 x 是字母,则返回值为字母 x 在字母序列“A”~“Z”中的序号,如字母“A”的序号为 0,字母“D”的序号为 3。若 x 不是字母,则返回值为-1。

    Function IsLetter(x As String) As Integer

      If ”A” <= x And x <= ”Z” Then

        IsLetter = Asc(x) - Asc(”A”)

      ElseIf ”a” <= x And x <= ”z” Then

        IsLetter = Asc(x) - Asc(”a”)

      Else

           ①  

      End If

    End Function

    Private Sub Command1_Click()

      Dim f(25) As Integer, m As Integer, n As Integer

      Dim s As String, c As String

      List1.Clear

      For m = 0 To 25 '初始化数组 f

        f(m) = 0

      Next m

      s = Text1.Text

      For m = 1 To Len(s)

        c = Mid(s, m, 1) '依次读取字符串中的每个字符进行判断

           ②  

        If n <> -1 Then f(n) = f(n) + 1

      Next m

      For m = 0 To 25

        If   ③  Then '输出统计结果,没有出现的字母不输出

        List1.AddItem(Chr(m + Asc(”a”)) & ”:” & f(m))

        End If

      Next m

    End Sub

     ② ③

下列VB程序运行时,在文本框Text1中输入1234,单击命令按钮Command1后,文本框Text1中显示的内容是。该程序使用了结构(填:顺序 / 选择 / 循环)。

Private   Sub  Command1_click ( )

Dim  n  As  Integer , x  As  Integer

n = Val ( Text1.Text  )

x = n  Mod 10

n = x * 1000 + n \ 10

Text1.Text = Str ( n )

End  Sub

下列VB程序运行时,单击命令按钮Command1后,文本框Text1中显示的内容是:

Private Sub Command1_Click()

Dim x As Integer, m As Integer

m = 3

For x = 1 To 5

   If m > 3 Then m = m + 2 Else m = m - 1

Next x

Text1.Text = Str(m)

End Sub

【加试题】筛选法求素数的核心思想是先找最小素数,然后剔除其所有的倍数,在留下的数中再剔除最小素数的倍数,重复执行,直到剔除所有的非素数。

小张编写了一个2查找孪生素数对(差值为 2)的 VB 程序,功能如下:在文本框Text1中输入一个整数n(n≤1000000),单击“求素数对”按钮Command1,在列表框List1中显示2到n范围内的素数,在标签Label2中显示素数个数,在标签Label3中显示孪生素数对个数。程序运行界面如图所示。

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

Private Sub Command1_Click()

Dim n As Long, i As Long, j As Long

Dim tAs Long '存储素数个数

Dim countAs Integer '存储素数对个数

Dim p As Long

Dim a(2 To 10000000)As Integer

n = Val(Text1.Text)

For i = 2 To n

    a(i) = 1

Next i

p = 2

Do While p <= Int(Sqr(n))

    If a(p) = 1 Then

        j = 2

        Do While j <= n \ p

                       '(1)

            j = j + 1

        Loop

    End If

    p = p + 1

Loop

t = 0

For i = 2 To n

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

Next i

count = 0

For i = 2 To n - 2

    If  Then      '(2)

        count = count + 1

        List1.AddItem ads(i, 1) & ads(i + 2, 5)

    End If

Next i

Label2.Caption = "总共有" + Str(t) + "个素数"

Label3.Caption = "其中有" + Str(count) + "个孪生素数对"

End Sub

Function ads(xAs Integer, n As Integer) As String

'整数转换成长度固定的字符串,代码略

End Function

如图1所示,这是一个城市街道简图,小明从 A 点出发,到达 B 点,如果在每一个路口只能向右或向上走(0 表示向上走,1 表示向右走),问小明有多少条行走路线,并请输出每条路线。程序界面如图2所示。

算法分析:从A点到B点共有7个路口,即可以有一个7位二进制数表示所走路线。观察以上路线,枚举所有满足路线特征的7位二进制数,再去掉不满足的二进制数即可。

  1. (1) 图1所示路线对应的十进制数为
  2. (2) 实现上述功能的 VB 程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim b As String, t As Integer, i As Integer, c As Integer, d As Integer

    t = 0 '可走路线计数

    For i = 15 To 120 '所有可走路线用十进制枚举

    d = i

    c = 0

    b = ""

    Do While d <> 0

    If d Mod 2 = 1 Then

        b = "1" + b

        c = c + 1

        If c > 4 Then Exit Do '若"1"的总数超过 4 个表示路线错误,需退出 Do 循环

    Else

          ① 

    End If

          ② 

    Loop

    If c = 4 And Len(b) = 7 Then

        t = t + 1

        List1.AddItem b

    End If

    Next i

    Label1.Caption = Str(t) + " 条"

    End Sub

     ② 

有以下程序段:

s=int(input("请输入购买矿泉水的数量(多少瓶):"))

p=float(input("请输入矿泉水的单价(每瓶多少元):"))

if s<10:

  j=1.0

if s>=10 and s<=24:

  j=0.9

if s>24:

  j=0.8

  t=s*p*j

print("总费用为:","%.2f"%t,"元")

如果输入的是18  2,则程序运行的结果为(   )

A . 32 B . 32.4 C . 32.40 D . 36
下面程序执行结束,文本框Text1中显示(    )

Private Sub Form_Click()

  a = "123": b = "456"

  c = Val(a) + Val(b)

  Text1.Text=str(c\100)

End Sub

A . 123 B . 3 C . 5 D . 579
某地区中考录取采用“平行志愿”的投档录取方式,该录取方式的具体规则为:

①根据考生的考试总分从高到低依次对考生的填报志愿进行投档;

②每位考生可填三个志愿学校,轮到该考生投档时依次对其三个志愿进行投档,若第一志愿学校还有剩余招生名额,就被第一志愿学校录取,结束该考生的投档,否则需对其后续志愿学校进行同样的投档操作,若该考生所填的所有志愿学校都没有剩余招生名额,则该考生无法被任何学校录取,该考生的投档结束。

③当所有学校都已完成计划招生数时,停止投档,录取结束。

编写 VB 程序,实现上述“平行志愿”投档录取的功能,单击“读取考生数据”按钮 Command1, 则从数据库中获取所有考生的成绩、志愿信息以及每个学校的计划招生数,单击“投档录取”按钮 Command2,开始进行投档录取, 并在列表框 List1 中输出每个学校的计划招生数、实际招生数、录取分数线和最低录取名次信息,程序运行界面如图所示。请回答下列问题:

  1. (1) 若A校计划招生520人,B校计划招生480人,C校计划招生540人,某同学的考分名次为490名,其三个志愿学校依次为B校、A校、C校,且已知同名次的人数最多有30人,则该同学不可能被哪所学校录取:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Const schCnt = 5                     '学校数量

    Const stuMaxCnt = 10000             '最多考生人数

    Dim zsCnt(1 To schCnt) As Integer      '存储每个学校的计划招生人数

    Dim zsCnt2(1 To schCnt) As Integer     '存储每个学校的实际招生人数

    Dim a(1 To stuMaxCnt) As Single       '存储考生总分成绩

    Dim b(1 To stuMaxCnt * 3) As Integer    '存储考试志愿,每个考生有3个志愿,每个志愿为学校编号

    Dim stuCnt As Integer                  '实际考生总人数

    Private Sub Command1_Click()

    '从数据库中读取所有考生的总分和志愿信息存储到数组a和数组b中(第1个考生总分存储到a(1),第1个考生的3个志愿分别存储到b(1)、b(2)、b(3)中, …),然后按总分对数组a和数组b进行降序排序,总分相同时,需根据各科成绩决定排序先后,但名次相同,考生总人数存储到stuCnt变量中;

    '读取每个学校的计划招生数,存储到数组zsCnt中;

    '以上功能代码略

    End Sub

    Private Sub Command2_Click()

      Dim sch As Integer         '学校代码,用1~5中的一个数字表示某学校代码

      Dim i As Integer, j As Integer, finished As Integer, prevScore As Single

      Dim stuMc(1 To stuMaxCnt) As Integer

      Dim MinScore(1 To schCnt) As Single

      Dim MinMc(1 To schCnt) As Integer

      finished = 0: i = 1

      prevScore = -1

      Do While

        If a(i) = prevScore Then

          stuMc(i) = stuMc(i - 1)

        Else

          

        End If

        prevScore = a(i)

        For j = 1 To 3

          

          If zsCnt2(sch) < zsCnt(sch) Then

            zsCnt2(sch) = zsCnt2(sch) + 1

            MinScore(sch) = a(i)

            MinMc(sch) = stuMc(i)

            Exit For

          End If

        Next j

        finished = 0

        For j = 1 To schCnt

          If zsCnt2(j) = zsCnt(j) Then

            finished = finished + 1

          End If

        Next j

        i = i + 1

      Loop

    '在List1中输出每所学校的代码、计划招生数、实际招生数、录取分数线、最低录取名次,代码略

    End Sub

运行下列 Python程序,结果正确的是(     )

a=32

b=14

c=a%b

print(c)

A . 2 B . 4 C . 32 D . 14
有如下程序段

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
有如下Python程序段:

info=[3,7,4,9,11,23,6]

x=info[1]

y=info[6]

z=info[3]

sum=x+y+z

print(sum)

运行程序后,输出的值正确的是(     )

A . 13 B . 22 C . 2 D . 3
若参与运算的数范围大大超出了标准数据类型能表示的范围的运算,就要用到高精度算法。小明编写了如下的高精度乘法程序,在文本框Text1和Text2中分别输入两个乘数(保证输入的乘数为正整数),单击命令按钮Command1,在文本框Text3中输出两个数的乘积,运行界面如图所示。

图片_x0020_100009

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

    Private Sub Command1_Click()

        Dim a(1 To 100)As Integer, b(1 To 100)As Integer, c(1 To 1000)As Integer

        Dim lenc As Integer, i As Integer, j As Integer

        Dim s1 As String, s2 As String, output As String

        s1= Text1. Text: s2 = Text2. Text: Text3. Text =""

        For i = 1 To Len(s1)

            a(i) =        ‘将文本框Text1中的自然数按从低位到高位的顺序依次存放在数组a(1),a2......a(len(s1))中

        Next i

    ‘将文本框Text2中的自然数按从低位到高位的顺序依次存放在数组b(1),b(2)......b(len(s2))中,代码略

        lenc= 图片_x0020_100010

        For i = 1 To Len(s1)

            For j = 1 To Len(s2)

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

                c(i +j) =

                c(i +j -1)=c(i +j -1) Mod 10

            Next j

        Next i

        If c(lenc +1)> 0 Then

        output =""

        For i =len c To 1 Step -1

            output = 图片_x0020_100011

        Next i

        Text3. Text = output

    End Sub

  2. (2) 程序中第一个加框处的语句有误,请改正。
  3. (3) 若将第二个加框处的代码改为Mid(Str(c(i)),2,1)+ output,则在Text1中输入14,在Text2中输入19,运行程序后在Text3中显示的结果为
某 VB 程序段如下:

Dim a(1 To 3) As Single,i As Integer

Randomize

a(1) = 1

For i =2 To 3

    a(i) = (Int(Rnd() * 3)) *2- 2

    a(i) = Abs(a(i - 1)) / Sqr(a(i))

Next i

List1.AddItem Str(a(i))

运行该程序段,下列错误提示不可能会出现的是(   )

A . 下标越界 B . 无效的过程调用或参数 C . 类型不匹配 D . 除数为零