3.3 简单算法及其程序实现 知识点题库

编写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

一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数称为质数又称素数,下列程序用来判断文本框text1中输入的数是否素数,请完善以下三处代码。

Dim i As Integer, m As Integer ,flag as Boolean

m =

flag=

For  i = 2  To  int(sqr(m)) 

If    Then

 flag=false

 Exit For

End if

Next  i 

If flag=true Then 

Text2.Text = str(m) +"是素数" 

Else 

Text2.Text = str(m)  +"不是素数"

End if

【加试题】小明编写了一个统计字符串中数字字符串之和的VB程序(如字符串“ab12.3cd34ef9”,中数字字符串之和为58:12+3+34+9),运行界面如图所示。在文本框Text1中输入字符串s,单击“统计”按钮Command1,在Label3中输出统计结果。

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

Private Sub Command1_Click()

  Dim s As String, ch As String

  Dim ch2 As String, sum As Double

  Dim n As Integer, i As Integer

  s = Text1.Text

  n = Len(s)

  i = 1: sum = 0

  Do While                                    '①

    ch = Mid(s, i, 1)

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

      j = i

      ch2 = Mid(s, j, 1)

      Do While ch2 >= "0" And ch2 <= "9"

        j = j + 1

        ch2 = Mid(s, j, 1)

      Loop

      sum = sum + Val( )     '②

      i = j

    End If

    i = i + 1

  Loop

  Label3.Caption = Str(sum)

End Sub

 ② 

有一个数列,它的前二个数为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的上面
自然常数e,约为2.71828,其值可通过泰勒公式计算获得

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

  1. (1) 代码“Private Sub Commandl_Click()”中的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

     ② ③ 

七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯对面的两盏灯也会切换“开/关”状态,如图b所示:

图a为初始状态,操作圈中的灯,则该灯与对面的两盏灯都会切换“开/关”状态,如图b所示。假设这些灯的编号为0到6号,“开/关”状态随机产生,并输出到列表框List1中,接着需要从中选出数盏灯进行操作,使得最后所有灯都打开(已证明方案-一定存在且唯一), 并在列表框List2中输出灯的编号。

程序采用枚举策略,一一尝试对每盏灯状态进行“切换”操作,“1”表示对当前灯进行切换,“0”表示不操作。

程序运行界面如图c所示。

  1. (1) 0-6号灯的初始状态为“关  关  关  开  关  关  开”,如对1号灯进行切换操作,对面随之切换灯的编号是:
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Dim a(0 To 6)As Integer,b(0 To 6) As Integer

    Private Sub Command1_Click()

      Dim i As Integer, x As Integer, pos As Integer

      Dim flag As Boolean

      List2.Clear

      For i = 0 To

        x = i:pos = 0:flag = True

        For j = 0 To 6

            b(j)= a(j)

        Next j

        Do While x > 0

            If x Mod 2 = 1 Then

                b(pos)= 1 - b(pos)

                b((pos + 3) Mod 7) = 1 – b((pos + 3) Mod 7)

               

            End If

            pos = pos + 1

            x = x \ 2

         Loop

         For j = 0 To 6

             IfThen flag = False:Exit For

         Next j

         If flag Then

            pos = 0

            Do While i > 0

               If i Mod 2 = 1 Then List2.AddItem “第” + CStr(pos)+ “号”

               i = i \ 2

               pos = pos + 1

            Loop

            Exit For

         End If

       Next i

    End Sub

    Private Sub Form_Load()     ‘随机生成初始数据

        Dim i As Integer

        Randomize

        List1.Clear

        For i = 0 To 6

            a(i)= Int(Rnd * 2)

            If a(i)= 1 Then

                List1.AddItem “第” + CStr(i) + “号:”+ “开”

            Else

                List1.AddItem “第” + CStr(i) + “号:” + “关”

            End If

         Next i

    End Sub

分析完善程序。

假设银行的年存储利率为3%,如果现在存储10000元钱,问多少年后连本带利超过12000元。设定:连本带利=本金*(1+利率)年数。

假设n年后连本带息超过12000,根据题意得出数学关系式:10000*(1+3%)n>12000,求最小的n。

Dim s as single

Dim r as single

Dim n as integer

s=10000

r=0.03

n=0

Do while            

   n=n+1

s=s*(1+r)

Loop

Print n;”年后”:”连本带利超过”;s

根据上述回答下列问题

  1. (1) 本题采用的算法是(填写:解析法/穷举法/排序法/递归法)
  2. (2) 写出参考程序中空白处表达式
模拟一个简易计算器,其功能是:输入两个数和一个运算符(加、减、乘、除),进行算术运算并输出运算结果。
  1. (1) 用Python语言编写的程序如下,请在划线处填入合适的语句或表达式,实现程序功能。

    a=flat(input("输入第一个数:")

    ch=

    b=float(input("输入第二个数:"))

    if ch== "+":

        print(a,ch,b,"=",a+b)

    elifch=="-":

        print(a,ch,b,"=",a-b)

    elif ch == *":

        print(a,ch,b,"=",a*b)

    elif ch == "/":

        if

            print(a,ch,b,"=",a/b)

        else:

            print("除数不能为0")

    else:

    print("运算符不正确")

  2. (2) 当输入的第一个数为4,输入的运算符为“\”,输入的第二个数为0,则程序输出的运算结果是(    )
    A . 0 B . 4 C . 除数不能为0 D . 运算符不正确
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,则该数是多少?假设该数为x,n的平方数用变量n2表示,m的平方数用变量m2表示。回答下列问题:
  1. (1) 由题意可知:n2=x+ 100,m2=
  2. (2) m2 -n2= (m + n)(m-n)= 168,设:m+n=i,m-n=j,得: m=(i+j)/2,n=(用i 和j表示)。
  3. (3) 用解析法求该完全平方数的某Python程序如下,请在划线处填入相应代码,实现程序功能。

    for i in range(2, 85):

        if 168 % i =0:

            j= 168/i

        if i> j and= 0:

            m=(i+j)/ 2

            n=(i-j)/ 2

            x=

            print(x)

有如下Python程序段:

s=0

for i in range(1, 101):

   if i%2== 0:

        s+=i

该程序段被执行后,变量s中存储的是1~100之间的(    )

A . 偶数个数 B . 奇数个数 C . 奇数之和 D . 偶数之和
求方程组的解。有如下方程组:

求该方程组解的Python程序如下:

for x in range(1,8,1):

    if      :

        print("x= ",x)

        print("y=",38-5*x)

回答下列问题:

  1. (1) 上述程序中,用到的主要算法是
  2. (2) 为了使程序能正确运行,上述程序划线处的代码应为
寻找受潮药瓶:现有5瓶药,每瓶中有20粒药丸,每粒药丸重10克,其中有几瓶药受潮了,受潮的每粒药丸重11克,如何用天平只称一次找出受潮的那几瓶药?解决此问题的方法:将5瓶药编号为1~5号,从中分别取出1、2、4、8、16粒药丸进行称重。在不受潮时应是(1+2+4+8+16)×10=310(克)。假如称出的重量是315克,那么超出的重量是5克,说明有5粒超重,(5)<sub>10</sub>=(00101)<sub>2</sub>,因此受潮的是第1瓶和第3瓶。编写程序模拟此过程,程序运行时,单击“模拟”按钮Command1,在文本框Text1中输出超重克数,在列表框List1中输出药瓶编号,运行界面如图所示。实现上述功能的VB程序如下。

Private Sub Commandl_Click( )

Dim s As Integer, cz As Integer            'cz存储超重克数

Dim k As Integer

'依次从1~5号瓶中取出1、2、4、8、16粒药,并计算总重量,存储在变量s中,代码略

cz=s-310

Text1.Text=    ①    

k=0

Do While cz<>0

k=k+1

If    ②     Then List 1.Addltem"第"+Str(k)+"瓶"

cz=cz\2

Loop

End Sub

  1. (1) 代码 List1.AddItem 中的 AddItem 是(单选,填字母:A .属性名/B .方法名/C .事件名)
  2. (2) 请在划线处填入合适代码。

  3. (3) 假如超重为 10 克,则受潮的药瓶编号是(填数字,若有多瓶,用“,”隔开)。
找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来时限问题求解,这种方法叫做(   )
A . 解析法 B . 顺序查找算法 C . 递归算法 D . 穷举法
穷举法的适用范围是(   )
A . 一切问题 B . 解的个数极多的问题 C . 解的个数有限且可以一一列举 D . 不适合设计算法
若一个正整数从左向右读与从右向左读都一样,我们就将其称之为回文数。如11、121均是回文数。请你编写程序,输出10至n之间的所有回文数。程序运行界面如图所示,在文本框Text1中输入一个正整数n,单击“查找”按钮Command1,在列表框List1中显示10–n之间的所有回文数,并且在标签Label1中输出查找到回文数的总数。

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

Private Sub Command1_Click()

    Dim n as long , sum as long , i As Long Dim x as long , y as long

    List1.Clear

    n = Val(Text1.Text) sum = 0

    For i = 10 To n

        x =               ‘①

        y = 0

        Do While x > 0

            y =         ‘②

            x = x \ 10

        Loop

        If y = i Then

            List1.additem Str(i)

            sum = sum+1

        End if

    Next i

Label1.caption = “共有”& Str(sum) & “个回文数” End Sub

用VB编程解决一个问题:求所有五位数中满足能被17整除且十位数字为5的数之和。
  1. (1) 本题的所有五位数所指的范围是1~10000,10000~99999,10000~90000,还是11111~99999?写出本题的所有五位数所指的范围。
  2. (2) 算术运算符:除/、整除\、求余Mod。例子,设五位数为参数i,则i\10000为万位,(i\1000)Mod 10 为千位,类推,则五位数中十位数字为,i Mod 10为个位。写出五位数中十位数字为5的表示式。
  3. (3) 将本题程序填写完整。

    Private Sub Command1_Click()

        s = 0

        For i =To

            If i Mod 17 = 0 And  =5 Then

                s = s + i

            End If

        Next i

        Print s

    End Sub

  4. (4) 本题程序采用了什么算法?
尼克斯彻定理:任何一个大于等1的整数的立方等于一串连续奇数之和,如:13=1,23=3+5,33=7+9+11。编写一个VB程序验证尼克斯彻定理,程序运行时,在文本框Text1中输入一个于等于1的整数,单击“验证”按钮Command1,在文本框Text2中显示验证结果,运行界面如图所示。

实现上述功能的VB代码如下,请完善代码:

Private Sub Command1_Click()

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

    n=Val(Text1.Text)

    For i=1 To n^3 step 2           '变量i表示连续奇数的首个整数

        sum=0:t=i:flag=False

        Do While sum<n^3 And flag= False

            sum=

            t=t+2

            If Then flag=True

        Loop

        If flag=True Then Exit For

    Next i

    s=Str(n)+ "^"+Str(3)+ "="

    Do While sum>0

       

        If sum= 0 Then

            s=s+Str(i)

        Else

            s=s+Srt(i)+ "+"

        End If

        i=i+2

    Loop

    Text2.Text=s

End Sub

一个十进制整数的二进制表示中,如果数字“1”的个数多于数字“0”的个数,则称该整数为A类数。如十进制整数26的二进制表示为11010,26就是一个A类数。以下VB程序的功能:寻找前1000个自然数中所有A类数在List1中输出,并将统计个数在Text1中输出。请回答以下问题:
  1. (1) 十进制数37(选填:是/不是)A类数。
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim i As Integer, n As Integer

        Dim s As Integer            's为A类数的个数

        Dim t As Integer            't为二进制数中“1”的个数

        Dim k As Integer           'k为二进制数中“0”的个数

        s=0

        For i=1 To 1000

            n=i: t=0: k=0

            Do While n>0

                If Then t=t+1 Else k=k+1

               

            Loop

            If t>k Then

                List1.Additem Str(i)

                s=s+1

            End If

        Next i

        Text1.Text=Str(s)

    End Sub

请阅读以下材料,并回答问题:

材料一:珠穆朗玛峰的高度为848.86米。

材科二:有个科学猜想节目:如果有-张足够 大的纸,其厚度为0.1毫米,对折一次纸的厚度增加1倍设张纸的厚度为h,对折k次,那么纸的厚度为h*2”。

材料三:纸对折多少次后可以超过珠穆朗玛峰的高度的算法流程图表示如下。

  1. (1) 材料二中由“纸的厚度为h,对折k次,得出纸的厚度为h*2”,这个过程属于用算法解决问题的哪个步骤(单选题,填字母: A .抽象与建模;B .设计算法;C .描述算法)。
  2. (2) 材料三种加虚线框的过程属于算法控制结构中的结构。
  3. (3) 用Python语言实现上述算法,请在划线处填入代码。

    h=0.0001

    k=0

    while

        k=k+1

        h=h*2

    print("需要对折",k,"次")

  4. (4) 解决此问题的算法是(填“解析算法”或“枚举算法”)。
以下适合使用解析算法求解的问题是(     )。
A . 求正整数n所有约数的和 B . 已知一元二次方程的三个系数,求方程的解 C . 已知两个整数a和b,求它们的最大公约数 D . 找出一筐乒乓球中质量不符合标准的球
最近更新