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

【加试题】某单位会员储值卡查询系统具有如下功能:输入会员卡号,即可查出该卡号对应的余额。所有会员卡号和相应的余额已分别保存在数组kh和数组ye中,第i个会员的卡号保存在kh(i)中,对应卡号的余额保存在ye(i)中,卡号从小到大排序。

程序运行界面如图所示,左边列表框List1中显示的是会员卡号和余额,在文本框Text1中输入会员卡号,单击"查询余额"按钮(Command1)后,如果找到此卡号,则在标签Label2中显示"此卡号余额为"和卡号对应的余额值,如果未找到则显示"找不到此卡号,请重新输入"。

解决此问题的部分程序段如下:

Dim kh (1 To n) As Long

Dim ye (1 To n) As Single

Private Sub Command1_Click()

Dim x As Long, i As Long, j As Long, m As Long, f As Boolean

x = Val(Text1.Text)

i = 1: j = n: f = False           ‘ 设卡号总数为n

Do While        ①            

        ②    

       If x = kh (m) Then

           f = True

       ElseIf x < kh (m) Then

           j = m - 1

       Else

         ③      

      End If

Loop

If f Then

      Label2.Caption = "此卡号余额为" + Str(ye(m)) + "元"

Else

      Label2.Caption = "找不到此卡号,请重新输入"

  End If

End Sub

Private Sub Form_Load()

   ’此过程用于对数组kh和数组ye进行初始赋值,代码略

End Sub

  1. (1) 程序中①划线处应填入
  2. (2) 程序中②划线处应填入
  3. (3) 程序中③划线处应填入
下列问题中适合使用枚举算法解决的是(   )
A . 在一串不相同的钥匙中寻找微格教室的前门钥匙 B . 计算五个同学的信息技术平均分 C . 找出笔筒中红色的签字笔 D . 超市的促销方案
下列问题选项中不能用算法描述的是(   )
A . 计算所有质数之和 B . 已知某圆形的半径,求圆形的面积 C . 求“百元买百鸡”的解 D . 计算回家需要的出租车费
编写一个删除数字字符串s中的最大和次大数字字符的程序。具体功能如下:在文本框Text1中输入一个数字字符串,单击“删数”按钮Command1,将删除后的结果显示在文本框Text2中。程序运行界面如下图所示。

  1. (1) 要使程序运行时,按钮Command1上显示的标题为“删数”,可在Form_Load事件处理过程中添加语句(单选,填字母: A . Caption.Command1 ="删数" / B . Command1.Caption ="删数" / C . Caption ="删数"/)
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

      Dim s As String, ch As String

      Dim i As Integer, n As Integer

      Dim max1 As Integer, max2 As Integer

      s = Text1.Text: n = Len(Text1.Text)

      If Mid(s, 1, 1) > Mid(s, 2, 1) Then

        max1 = 1: max2 = 2

      Else

        max1 = 2: max2 = 1

      End If

      For i = 3 To n

       ch = Mid(s, i, 1)

       If ch > Mid(s, max1, 1) Then

        

         max1 = i

       ElseIf ch >= Mid(s, max2, 1) Then

         max2 = i

       End If

      Next i

      For i = 1 To n

        If   Then Text2.Text = Text2.Text & Mid(s, i, 1)

      Next i

    End Sub

  3. (3) 若在文本框Text1中输入的内容为“82176736”,单击按钮Command1,文本框Text2中显示的内容是
【加试题】问题描述:有n个互不重复的数字,值的范围是[1,n],分别保存在数组元素a(1)到a(n)中,如果数字i保存在a(i),认为数字i在正确的位置上。若干个相互占用了位置的数字称为一组,一个在正确位置上的数字单独为一组,比如6个数字2,3,1,4,6,5分别保存在数组元素a(1)到a(6)中,则2、3、1为一组,4为一组,6、5为一组。该程序的功能为输出每组的情况。运行界面如下图:

  1. (1) 数组元素a(1)到a(5)的值分别为2、5、3、1、4,这5个元素总共有组。
  2. (2) 请在划线处填入合适的代码

      Const n = 10

      Dim a (1 To n)  As Integer    ‘保存原始数据

      Dim b(1 To n )  As Boolean ‘数组b用来标记相应的位置有没有找过

      Private Sub Command1 _ Click ()

        Dim i As Integer , sum As Integer ,  total As Integer

        sum = 0: total = 1  ‘total 表不第几组

        i = 1

        List 2.Addltem “第”& Str (total) & “组”

        Do While sum < n

            Do While Not b (i)

                List 2.Addltem a (i)

                b(i) = True

               

                sum = sum + 1

            Loop

            If sum < n Then

                total = total + 1

                List 2.Addltem “第” &  Str ( total ) &■“组”

                i = 1

                Do While b(i) ‘该循环用来查找下一组的开始位置

               

                Loop

            End If

        Loop

      End Sub

    Private Sub Form _ Load ()

      Dim i As Integer

      Randomize

      For i = 1 To n ‘产生 n 个不一样的整数,范围为[ 1, n ]

        a(i) =  Int(Rnd * n ) + 1

        Do While

            a (i) =  Int(Rnd * n ) + 1

        Loop

      Next i

      For i = 1 To n

        List1.Addltem a (i)

        b (i) = False

      Next i

    End Sub

    Function f(x As Integer , y As Integer )  As Boolean

    ‘该函数的功能:判断x和数组a中前y个数有没有重复,有重复返回值True,否则False

    End Function

落球游戏。小球从上方随机垂直掉落在孔(“.”)、平板(“-”)、左右滑坡(“/”“\”)、隔板(“|”)后,运动情况如下:

●小球落在孔上,入孔:

●垂直落在平板上,停下;

●落在左滑坡向左滚动,右滑坡向右滚动。若遇平板继续滚动,遇孔则入孔;遇隔板或滑坡则停下;或超出边界;

●落在隔板上,可能向左或向右滑落,概率分别为50%。滑落后运动规律与左右滑坡相同。

假设两个隔板不相邻且左右滑坡总是以“八”出现。小球入孔或超出边界则消失,记消失的概率为100%;小球若停下,记消失的概率为0。

如图a所示,小球随机落下,最终消失的平均概率计算过程如下:

(100%+100%+100%+0.5*(100%+0)+0+0+100%+100%+0.5*(100%+100%)+100%)/10=75%

编写VB程序求解小球消失的概率,程序运行界面如图b所示,代码如下,请回答下列问题:

    Dim s As string

    Dim prob As single

    Private Sub Command1 Click()

    Dim i As Integer, c As string

    s Text1 Text

    prob =0

    For i =1 To Len(s)

    c= Mid(s, i, 1)

    If c=“.” Then

        prob= prob +100

    ElseIf c =“/”Then

        prob= prob slope(i, True)

    ElseIf c=“\” Then

        prob prob+ slope(i, False)

    ElseIf c=“|” Then

        prob =prob+      

   

    End If

Next i

Text2 Text= Str(prob Len(s))

End sub

Function slope(k As Integer, flag As Boolean)As Single

Dim c As string

If flag Then

    For j=

        c= Mid(s, j, 1)

        If c =“.” Then slope =100: Exit For

        If c=“|” Or c=“\”Then slope =0: Exit For

    Next j

    If j< 1 Then slope =100

Else

    For j=k+ 1 To Len (s)

        c= Mid(s, j, 1)

        If c=“.”Then slope =100: Exit For

        If c=“|” Or c=“/” Then slope =0: Exit For

    Next j

    If j>Len(s) Then slope =100

End If

End Function

  1. (1) 在文本框中输入:“ ”则小球消失的概率为
  2. (2) 加框代码有误,请改正。
  3. (3) 请在划线处填入合适代码。
  4. (4) 若删除虚线框处的代码,运行程序,则      。(单选,填字母)
    A . 输出的概率值变大 B . 输出的概率值变小 C . 程序调试错误 D . 输出的概率值不变
某对分查找算法的VB程序段如下:

i = 1: j = 7

key = Int(Rnd( ) * 100)

Do While i < = j

    m = (1+j) \2

    If a(m) = Key Then

      Exit Do

    Else If a(m) > Key Then

      j = m-1

    Else

      i = m+1

    End If

Loop

数组元素a(1)到a(7)的值依次为“25,42,53,6,77,83,98”,运行上述程序段后,下列条件表达式肯定不成立的是(  )

A . j-i = 0 B . i-j = 2 C . i = 8 D . m < = 7
【加试题】某对分查找算法的VB程序段如下:

key=Val(Text1.text)

i=1:j=10

Text2.text=””

Do While i<=j

   m=Int((i+j)/2+0.5)

   If key=a(m) Then Exit Do `Exit Do表示退出循环

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

   Text2.text=Text2.text+Str(a(m))

Loop

数组元素a(1)到a(10)的值依次为“8、17、24、30、36、40、55、58、61、66”,文本框Text1中输入的值是30,执行该程序段,文本框Text2中显示的是(  )

A . 40  24 B . 40  24  36 C . 36  24 D . 36  17  24
如果一个4位数恰好等于它的各位数字的4次方和,则这个数被称为“玫瑰花”数。例如1634就是一个玫瑰花数:1634=14+64+34+44。如果要求出所有的玫瑰花数,下列算法合适的是( )
A . 查找法 B . 解析法 C . 穷举法 D . 排序法
某对分查找算法的VB程序如下:

Key=Val(Text1.Text)

i=1:j=6

n=0:f=False

flag=False

Do While i<=j And Not f

    n=n+1

    m=Int((i+j)/2)

    If key=a(m)Then f=True

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

Loop

若数组元素a(1)到a(6)的值依次为“3,9,12,17,28,39”,在文本框Text1中输入17后运行该程序,则以上程序段运行结束后,下列说法不正确的是(  )

A . 变量i的值为4 B . 变量j的值为4 C . 变量m的值为4 D . 变量n的值为4
在BXY中输入代码如图所示。

代码中“import music”表示导人music模块,它包含了生成和控制声音的方法,music.pitch(freq,8)表示播放设定频率的曲调,时间为8ns。下载并运行该代码,在蜂鸣器中听到的声音效果是(    )

A . 声音频率升高一次降低一次 B . 声音频率不变 C . 声音频率降低一次升高一次 D . 声音频率呈周期性变化
列出所有可能的情况,逐个判断有哪些符合问题所要求的条件,从而解决问题,这是(   )思路
A . 递归算法 B . 顺序查找算法 C . 穷举法 D . 解析法
小强在双十一购物期间忘记了支付宝账户密码,但他急用支付宝进行转账,请你帮他尽可能找回密码。他只记得自己密码的一些零星信息:

①密码是六位数字,前面两位为59;②最后两位数字相同;③能被12和38整除。

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

  1. (1) 应用程序界面设计时,为添加“List1”对象,应使用图2所示的“控件工具箱”中的(填写相应编号)。
  2. (2) 请根据题意将解决此问题的相应程序补充完整。

    Private Sub Command1_click( )

        Dim x As Integer, s As Long

        Dim y As Integer, i As Integer

        For i = 0 To 9999

            s = 590000 + i

            If Then

                x= s mod 10

                y =

                If x = y Then

                    List1.AddItem Str(s)

                End If

            End If

        Next i

    End Sub

  3. (3) 该模块采用的算法是(   )
    A . 枚举 B . 查找 C . 排序 D . 解析
某vb程序段如下:

L=1: R=10: n=10: key=78

Do While L<=R

    m=Fix((L+R)/2)

    If  Then

        R=m-1

    Else

        L=m+1

    End If

Loop

For i=1 To R

    List1.Additem Str(a(i))

Next i

数组元素a(1)到a(10)的值依次为86,78,78,77,73,69,60,54,54,51,若执行该程序段后,列表框List1中输出的数据个数为3,则方框处的代码为(     )

A . Key>a(m) B . Key>=a(m) C . Key<a(m) D . Key<=a(m)
一个正确的算法因该具有5个特性,除输入项、输出项特性外,另外3个特性是(   )
A . 确切性、可行性、有穷性 B . 易读性、确切性、有效性 C . 有穷性、稳定性、确切性 D . 可行性、易读性、有穷性
数组a中存储的是两个数列交替排序的n个正整数,下标为奇数的数组元素都是奇数且为升序排列,下标为偶数的数组元素都是偶数且为降序排列。排序示例如下。

a(1)

a(2)

a(3)

a(4)

a(5)

a(6)

a(7)

a(8)

a(9)

a(10)

1

10

3

8

5

6

7

4

9

2

依据对分查找思想,设计一个在数组a中查找数据key的程序,实现该功能的VB程序如下,请回答下列问题:

Private Sub Search_Click()

    Const n = 10

    Dim a(1 To n) As Integer

Dim i As Integer, j As Integer, m As Integer, f As Boolean, key As Integer

‘读取一组正整数,按上述规则存入数组a中。代码略

key = Val (Text1.Text)

If key Mod 2=1 Then i=1 Else i=2

j =n:f= False

Do While i<=j And Not f

    If key Mod 2=0 Then

        m=(i+j)\2-(i+j)\2Mod2

    Else

        m=    ①  

    End If

    If key = a(m) Then

        f = True

    ElseIf  Then

        j=m-2

    Else

        i=   ②  

    End If

Loop

If f Then Label1.Caption = Str(m) Else Label1.Caption =“不存在”

End Sub

  1. (1) 观察程序代码,该事件处理过程名为
  2. (2) 程序加框处代码有错,请改正。
  3. (3) 请在划线处填入合适的代码。

     ② 

给定n(n小于1000)个整数,整数的范围在0到m之间,请使用“对分法”思想求出这n个整数的中位数(所谓中位数,是指将这n个数排序之后,排在正中间的数)。

小丫编写了一个求中位数的VB程序,功能如下:单击“求中位数”按钮Command1,程序根据输入的n和m,随机产生n个在[0,m]范围内的数。程序运行界面如下所示:

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

Dim x(1 To 1000) As Long

Private Sub Command1_Click()

    Dim n As Integer, i As Integer, rbound As Integer, mid As Integer

    Dim m As Integer, count As Integer

    n = Val(Text1.Text)

    m = Val(Text2.Text)

    List1.Clear

    Randomize

    For i = 1 To n

        x(i) =Int(Rnd * (m + 1))      ' 产生[0,m] 的随机数

        List1.AddItem x(i)

    Next i

    lb = 0

    rb = m

    Do While lb <rb

        mid = (lb + rb) \ 2

             ①     

        For i = 1 To n

            If     ②      Then

                count = count + 1

            End If

        Next i

        If count > n \ 2 Then

            lb = mid + 1

        Else

                  ③      

        End If

    Loop

    Text3. text = str(rb)

End Sub

程序要实现该功能,画线处应填入的代码为:

有如下VB 程序段:

Key = Val(Text1.Text):s = 0: i = 1: j = 7

Do While i <= j

    m = (i + j) \ 2

    s = s + m

    If a(m) > Key Then j = m - 1 Else i = m + 1

Loop

Text2.Text = Str(s)

数组元素a(1)到a(7)的值依次为“12,15,18,20,20,20,29”,在文本框Text1中输入待查数,执行该程序段后,则文本框 Text2 中显示的内容不可能的是(    )

A . 7 B . 9 C . 15 D . 17
大数据由于数据量大,服务器一般采用分布式文件存储或数据库存储。
下列关于算法的描述,正确的是(      )
A . 解题的步骤可以是无穷的 B . 算法是解决问题的步骤 C . 算法就是解题的算式 D . 算法是可以被表述但无法实现
最近更新