解析算法及程序实现 知识点题库

小刚的支付宝账户密码忘记了,但他急用支付宝进行转账,请你帮他尽可能找回密码。他只记得自己密码的一些零星信息:

①密码是六位数字,前面两位为59;

②最后两位数字相同;

③能被12和38整除。

程序界面如图1所示,单击 “帮助找回密码”按钮(Command1)后,可能的密码显示在列表框List1中。

  1. (1) 应用程序界面设计时,为添加“ 可能的密码有:”对象,应使用图2所示的“控件工具箱”中的(填写相应编号),并在图3所示的“属性窗口”中,将属性值设置为“可能的密码有:”。

  2. (2) 解决此问题的相应程序如下,请根据题意将程序补充完整。

    Private Sub  Command1_click ( )                    

    Dim x As Integer, s As Long, y As Integer, i As Integer

    For i = 0 To 9999

        S = 590000 + i

        If   Then

            x= s mod 10

            y = (s Mod 100) \ 10

            If x = y Then

                List1.AddItem Str(s)

            End If

        End If

    Next i

    End Sub

某地区公共自行车收费信息如下:“60分钟内免费;60分钟以上至120分钟(含),收费1元;120分钟以上至180分钟(含),收费2元;租用超过180分钟(含)以上的时间,按每小时3元计费(不足一小时的按一小时计)”。现按要求编写VB程序,界面如图1所示,程序功能如下:在文本框Text1中输入租车时间,单击“计费”按钮Command1,在标签Label5中输出对应的租车费用。

  1. (1) 在应用程序界面设计时,为添加“计费”按钮,应使用图2所示的“控件工具箱”中的(请填写相应编号),并在图3所示的“属性窗口”中,将属性值设置为“计费”。
  2. (2) 请根据题意将下列程序补充完整。

    Private Sub Command1_Click()

      Dim zysj As Single, zyfy As Single  ‘zysj:租用时间,zyfy:租用费用

      zysj = Val(Text1.Text)

      If zysj <= 60 Then

        zyfy = 0

      ElseIf zysj <= 120 Then

        zyfy = 1

      ElseIf zysj <= 180 Then

       

      ElseIf zysj Mod 60 = 0 Then

        zyfy = (zysj - 180) / 60 * 3 + 3

      Else

        zyfy = (Int((zysj - 180) / 60) + 1) * 3 + 3

      End If

      Label5.Caption = Str(zyfy)

    End Sub

某数据加密方法描述如下:

⑴以字节为单位进行加密处理;

⑵将1个字节的8位二进制数分割成前4位与后4位两个二进制数;

⑶分别将上述两个4位二进制数转换为十进制数;

⑷将每个十进制数转换为1个加密字符,对应的“密码表”如下:

值(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密字符

I

l

i

k

e

C

H

N

P

0

s

t

c

a

r

d

小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:单击“加密”按钮Commandl,程序依次将文本框Textl中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表显示了字符串中一个字符的加密过程:

程序运行效果如图所示。

实现上述功能的VB程序如下:

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

    Private Sub Command1_Click()

    Dim n As Integer, s As String, i As Integer, ss As String

    Dim a As Integer  '存储加密前字符的ASCII码

    Dim b1 As Integer, b2 As Integer    '分别存储分割、转换后的两个十进制数

    s = Text1.Text 

    For i = 1 To n

      a = Asc(Mid(s, i, 1))

      b1 = a \ 16

      b2 = a Mod 16

      ss = ss + Code2Char(b1) + Code2Char(b2)

    Text2.Text = ss

    Next i

    End Sub

    '十进制值转换为加密字符的函数

    Function Code2Char(c As Integer) As String

    Dim s As String

    s = "IlikeCHNpostcard"

    Code2Char =

    End Function

  2. (2) 若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是 。
【加试题】在计算机中用一个字节(8位)来存储一个字符的ASCII码,其中低7位二进制数对应字符的编码,每个字节的最高位一般保持为“0”,在数据传输时该位可用作奇偶校验位。传输时ASCII代码转换成传输码的方法是:若7位ASCII码中有偶数个1,则最高位置为1;有奇数个1,则最高位置为0。例如字母“A”的ASCII码十进制表示为65,二进制表示为1000001。“A”的传输码则为“11000001”,本程序的功能就是把ASCII码转换成这种传输码,运行效果如第17题图所示。
  1. (1) 根据上述ASCII代码转换成传输码的方法,字符“D”的传输码为
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

    Private Sub Command1_Click()

        Dim i As Integer, S As String

        Dim str As String, ch As String

        str = Text1.Text

        List1.Clear

        For i = 1 To Len(str)

            ch =    ①    

            S = convert(ch)

            List1.AddItem ch & "==>" & S

        Next i

    End Sub


    Private Function convert(ch As String)  As String

        Dim m As Integer, k As Integer, n As Integer, i As Integer

        convert = ""

        n = Asc(ch)

        Do While n > 0

        ②   

            convert = m & convert

            If m = 1 Then

                k = k + 1

            End If

            n = n \ 2

        Loop

        For i = 1 To 7 - Len(convert)  '将字符的二进制代码补足7位

            convert = "0" & convert

        Next i

        If k Mod 2 = 0 Then

            convert =    ③    

        Else

            convert = "0" & convert

        End If

    End Function

    程序中划线处①的代码应为

    程序中划线处②的代码应为

    程序中划线处③的代码应为

【加试题】德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对。

小敏编写了一个VB程序,用来求一个偶数(6到100之间)可能存在多少这样的素数对(注: A+B与B+A认为是相同素数对,不重复统计),并把这些结果输出到一个列表框中,通过逻辑推理,小敏发现这些素数对都是奇数,所以她只需要验证奇数的素数对即可。运行界面如图所示,程序代码如下。但加框处代码有错,请改正。

图片_x0020_73  

Dim IsPrime(100) As Boolean  '用来存储是否素数,True为素数,False为非素数

Private Sub Command1_Click()

    Dim x As Integer, y As Integer, i As Integer, num As Integer

Call Init  '调用Init函数

    x = Val(Text1.Text)

y = x \ 2

num = 0

For i = 3 To y Step 2

                 '①

num = num + 1

            List1.AddItem Str(x) + "=" + Str(i) + "+" + Str(x - i)

        End If

    Next i

    Label2.Caption = "偶数" + Str(x) + "共有" + Str(num) + "个素数对。"

End Sub

Sub Init() '初始化IsPrime数组的值

    Dim i As Integer, j As Integer, x As Integer

    For i = 3 To 100 Step 2

        x = Int(Sqr(i))

                            '②

            If i Mod j = 0 Then Exit For

        Next j

        If j > x Then IsPrime(i) = True Else IsPrime(i) = False

    Next i

End Sub

 ② 
编写VB程序,实现如下功能:在文本框Text1中输入一个正整数,单击“求数根”按钮Command1,在Text2中输出该正整数的树根(数根:若一个正整数X的各位数字之和是一位数,那么这个数就是X的数根,否则再把这个数的各位数字相加,如此反复直到得到一位数为止。例如156的各位数字相加1+5+6=12,12的各位数字相加1+2=3,则156的数根是3)。程序运行界面如图1所示。

图1

图2

  1. (1) 如图2所示,在窗体Form1的属性窗口中,若修改“3”处的内容为“求数根”,则(填:1/2/4,多选)处会随之改变。
  2. (2) 实现上述功能的VB程序如下,请在划线处填上合适的代码。

    Private Sub Command1_Click()

      Dim a As Integer, b As Integer, s As Integer

    a = Val(Text1.Text)

    s = a

    Do While s >= 10

        a =

        s = 0

        Do While a > 0

          b = a Mod 10

          s = s + b

          a =

        Loop

    Loop

    Text2.Text = Str(s)

    End Sub

自然常数e,约为2.71828,其值可通过泰勒公式计算获得

小明编写了一个VB程序来计算e的近似值,功能为在文本框Text1中输入公式n值,单击“计算”命令按钮Commong1,在标签Label2中显示计算结果,程序运行界面如图所示。

  1. (1) 代码“Private sub commund1_Click是(单选,填字母:A,对象名/B,属性名/C,事件名)。
  2. (2) 为实现上述功能,请在画线处填入合适代码。

    Private Sub Command1_Click()

      Dim i As Double,p As Double

      Dim e As Double

      n=    ①   

      e=1

      i=1

      p=1

      Do While i<=n

        p=   ②   

        e=e+p

            ③  

      Loop

      Label2.Caption=”e的值是:”+Str(e)

    End Sub

     ② ③ 

回文字符串是一个对称的字符串,它从左到右读和从右到左读是完全一样的。如“abcba”和“abccba”都是回文字符串,“abc”不是回文字符串。小王编写了一个验证回文字符串的VB程序,功能如下:在文本框Text1里输入一个字符串,单击命令按钮Command1,在文本框Text2中显示验证结果:是回文字符串显示“yes”,否则显示“no”。程序运行界面如图所示。
  1. (1) 在设计程序界面时,要窗体Form1的标题栏上显示“判断回文字符串”,应修改Form1的属性。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适代码。 

      

    Private Sub Command1_Click()

    Dim st As String

    Dim i As Integer, j As Integer

    Dim flag As Boolean

     

    j = Len(st)

    i = 1

    flag = True

    Do While flag And i <= j

     If Mid(st, i, 1) = Mid(st, j, 1) Then

            i = i + 1

             

         Else

            flag = False

    End If

     Loop

    If  Then 

          Text2.Text = "yes"

    Else

          Text2.Text = "no"

    End If

    End Sub 

小王编写VB程序,实现如下功能:在Text1中输入1~9之间的任意一个数字,单击“计算”按钮Command1, 计算该数字的阶乘并显示在标签Label2中。程序运行界面如图所示:

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

    Private Sub Command1_Click()

    Dim i As Integer, j As Integer, s As Long

    s = 1

    i =

    If i >= 1 And i <= 9 Then

    For j = 1 To i

    s =

    Next j

    Label2.Caption = Str(i) & "的阶乘为:" & Str(s)

    Else

    Label2.Caption = "请重新输入1~ 9之间的任意数字"

    End If

    End Sub

  3. (3) 程序中,若将变量s的类型由Long改为Integer,在文本框Text1中输入的内容为“9”,单击“计算”按钮后,程序运行将会出现什么情况(单选,填字母:A .溢出 / B .类型不匹配 / C .要求对象)。
有如下 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)

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

A . 3 B . 4 C . 5 D . 6
有一个数列,它的前二个数为0,1,此后的每个数都是其前面2个数之和,即0,1,1,2,3,5,8,13……要求编写程序,输出该数列到刚超过10000的数为止,且项数不能超过100项。编写程序如下:

Dim i As Integer, a As Integer, b As Integer, c As Integer

Dim s As String

a = 0: b = 1: c = 0: i = 2

s = Str(a) + Str(b)

Do While c <= 10000 And i < 100

    a = b: b = c

    c = a + b

    s = s + Str(c)

    i = i + 1

Loop

Text1.Text = s

运行上面的程序,发现输出的数列不正确,应进行修改。以下修改正确的是(  )

A . 把c<=10000改为 c>10000 B . 把i<100改成i<=100 C . 把i=i+1移到Do While c<=10000 and i<100下面 D . 把语句c=a+b移到a=b:b=c的上面
编写一个VB程序,实现如下功能:在文本框Text1中输入一个偶数n,判断该数在10步之内通过以下计算过程后能否回到初始值。计算步骤如下:

⑴将n乘以3后加1产生一个新的数

⑵对产生的新数循环执行如下操作:新数是偶数时,用新数除以2;新数是奇数时,用新数乘以3后加1

譬如,以2为初始值,则计算过程如下。2→7→22→11→34→17→52→26→13→40→20→10→5→16→8→4→2。数字2不能在10步之内回到初始值。

界面如图所示,回答下列问题:

  1. (1) 若要把窗体的标题名称由“Form1”改为“数值猜想”,应改变窗体的属性。
  2. (2) 完成上述功能的程序代码如下,请在划线处填入合适的代码

    Private Sub Command1_Click()

    Dim n As Integer,t as Integer ,m as Integer ,s as String

    t = n * 3 + 1

    m = 1

    s = ""

    Do While

            s = s + Str(t)

            If t Mod 2 = 0 Then

                t = t \ 2

            Else

                t = t * 3 + 1

            End If

            m = m + 1

    Loop

    If n = t Then

            Label1.Caption = s + Str(n)

    Else

            Label1.Caption = "该数10步之内无法实现!"

    End If

    End Sub

  3. (3) 按照以上VB程序的计算方法,若在文本框Text1中输入4,能否在10步之内回到初始数 。(选填:能/否)
【加试题】小王设计了一个算法试图求出平面坐标系中最左点出发,从左往右途经所有点到达最右点的路径值和,编写了一个VB程序功能如下:在文本框Text1中输入需随机生成的坐标点数量,单击“生成”按钮Command1后,在列表框List1中生成相应数量的坐标点(坐标值为大于等于1小于10的实数 ,保留一位小数),在文本框Text2中输出路径值。程序界面如图所示。

实现上述功能的VB程序如下,但划线部分代码有错,请改正。

Private Sub Command1_Click()

  Dim x(1 To 100) As Single, y(1 To 100) As Single

  Dim tmp As Single, length As Single, sum As Single, x1 As Single, y1 As Single

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

Randomize 

List1.Clear

  k = Val(Text1.Text)

  For i = 1 To k

      x(i) = Int(Rnd * 90) / 10 + 1

      y(i) = Int(Rnd * 90) / 10 + 1

      List1.AddItem "X:" + Str(x(i)) + "   " + "Y:" + Str(y(i))

  Next i

  For i = 1 To k - 1

      For j = 1 To k - i

          If x(j) > x(j + 1) Then

              x(i)=x(i) + x(j)

              x(j) = x(i) - x(j)

              x(j) = x(i) + x(j)   ‘①

              tmp = y(j)

              y(j) = y(j + 1)

              y(j + 1) = tmp

          End If

      Next j

  Next i

  sum = 0: length = 0

  For i = 1 To k - 1

      x1 = (x(i) - x(1)) ^ 2     ‘②

 '变量y1计算方法同x1,代码略

      length = Sqr(x1 + y1)

      sum = sum + length

  Next i

  Text2.Text = Str(Int(sum * 10) / 10)

End Sub

 ② 

简易加法器:小王用VB编写了一个简易加法器,其功能如下:在文本框Text中输入数字,中间用“,”隔开,单击“计算”命令按钮 Command1后,其计算结果输出在标签框 Label1中。运行界面如图所示,VB程序代码如下,请回答以下问题。

  1. (1) 观察代码,可知“计算”命令按钮的对象名为
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command_Click( )

    Dim i As Integer, j As Integer, ans As Integer

    Dim ch As String, s As String

    s= Text1 Text

    ans = 0:j = 1

    For i =l To Len(s)

           ①    

        If ch = "," Then

            ans =ans Val (Mid(s, j, i-j))

            j=     ②    

        End If

    Next i

    Label1. Caption ="计算结果是:"+Str( ans)

    End sub

     ② 

  3. (3) 运行该程序,在文本框中输入“21,5,3”,则计算结果(值)是
以下不适合使用解析算法求解的问题是(  )。
A . 已知三角形的底边和高,求三角形的面积 B . 已知两个整数a和b,求它们的最大公约数 C . 已知两个电阻的阻值,求它们并联后的总阻值 D . 已知两点坐标,求两点之间的距离
以下适合用解析算法解决的问题是(   )
A . 将10个评委的打分按由大到小的顺序进行排序 B . 计算出租车费 C . 找出一管乒乓球中质量不符合标准的球 D . 求三位正整数中的“水仙花数”
利用VB程序计算三角形面积。在文本框Text1、Text2、Text3中分别输入三角形三条边长a,b,c,半周长p = (a + b + c) / 2,单击按钮Command1计算三角形的面积s= ,并把结果显示在文本框Text4中。界面如图a所示,请回答下列问题:

  1. (1) 结合图b,若要把窗体背景色改为白色,可通过其属性进行设置。

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

    Private Sub Command1_Click()

        Dim a, b, c, p, s As Integer

        a = Val(Text1.Text)

        b =

        c = Val(Text3.Text)

        p =(a + b + c) / 2

        If a+b>c And a+c>b And b+c>a And a>0 And b>0 And c>0 Then

            s =

            Text4.Text =

        Else

            Text4.Text =“输入边长不能组成三角形!”

        End If

    End Sub

用计算机解决以下问题,与穷举法相比更适合用解析法来解决的有(    )。
A . 输入整数m、n,输出从m到n之间的质数(素数)。 B . 输入三角形三边长,输出这个三角形面积 C . 输入一元二次方程的各个系数,输出方程的解。 D . 输入三个正整数a、b、c,输出这三个数的最小公约数。
以下适合使用解析算法求解的问题是(     )。
A . 求正整数n所有约数的和 B . 已知一元二次方程的三个系数,求方程的解 C . 已知两个整数a和b,求它们的最大公约数 D . 找出一筐乒乓球中质量不符合标准的球
从离地500米的空中自由落下一个小球,求从开始落下的时刻起,小球在最后1秒内的位移(重力加速度g以9.8米/秒2计)。程序如下,回答以下问题。

import math

h = 500

g = 9.8

t = math.sqrt(2*h/g)

hx = g*(t-1)*(-1)/2

hh = h-hx

print(“小球最后1秒下落的位移是:”, hh, "m")

  1. (1) 该程序代码中使用了库,库的名称是(   )。
    A . Limport B . math C . sqrt D . Print
  2. (2) 该程序代码中使用了常量,它的名称是(   )。
    A . h B . t C . 500 D . Hh
  3. (3) 该程序代码中使用了变量hh,它的数据类型是(   )。
    A . int B . float C . 列表 D . 字符串
  4. (4) 该程序中print(“小球最后1秒下客的位移是:”,hh,“m”),其中“m”的数据类型是(   )。
    A . int B . float C . 列表 D . 字符串
  5. (5) 该程序使用了物理公式计算空中自由落下个小球的位移,采用的算法处(   )。
    A . 解析算法 B . 穷举算法 C . 递归法 D . 选择排序
最近更新